summaryrefslogtreecommitdiff
authorkergoth <kergoth>2003-04-22 20:12:04 (UTC)
committer kergoth <kergoth>2003-04-22 20:12:04 (UTC)
commitccec87cf3e7192c0a3987aa3486668e89b1662a4 (patch) (side-by-side diff)
tree2d1135ed639410fe1a75486bfdeae8083e1682a2
parent2134672b0a731415bfd50f2ff22de59b78709e5c (diff)
downloadopie-ccec87cf3e7192c0a3987aa3486668e89b1662a4.zip
opie-ccec87cf3e7192c0a3987aa3486668e89b1662a4.tar.gz
opie-ccec87cf3e7192c0a3987aa3486668e89b1662a4.tar.bz2
you can now 'make ipks' :)
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--Makefile26
-rw-r--r--Vars.make63
-rwxr-xr-xscripts/mkipkg371
3 files changed, 451 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 9169645..10df035 100644
--- a/Makefile
+++ b/Makefile
@@ -1,125 +1,133 @@
#!/usr/bin/make -f
-ifndef QTDIR
-$(error QTDIR not set)
-endif
-export OPIEDIR:=$(shell pwd)
-export TOPDIR:=$(OPIEDIR)
-export QMAKE:=$(OPIEDIR)/qmake/qmake
+export TOPDIR:=$(shell pwd)
-export QMAKESPECSDIR=$(OPIEDIR)/mkspecs
+include $(TOPDIR)/Vars.make
noconfig_targets := xconfig menuconfig config oldconfig randconfig \
defconfig allyesconfig allnoconfig allmodconfig \
clean-configs
configs += $(TOPDIR)/core/applets/config.in $(TOPDIR)/core/apps/config.in $(TOPDIR)/core/multimedia/config.in $(TOPDIR)/core/pim/config.in $(TOPDIR)/core/pim/today/plugins/config.in $(TOPDIR)/core/settings/config.in $(TOPDIR)/development/config.in $(TOPDIR)/inputmethods/config.in $(TOPDIR)/libopie/ofileselector/config.in $(TOPDIR)/libopie/pim/config.in $(TOPDIR)/libsql/config.in $(TOPDIR)/noncore/applets/config.in $(TOPDIR)/noncore/apps/opie-console/test/config.in $(TOPDIR)/noncore/apps/config.in $(TOPDIR)/noncore/comm/config.in $(TOPDIR)/noncore/decorations/config.in $(TOPDIR)/noncore/games/config.in $(TOPDIR)/noncore/graphics/config.in $(TOPDIR)/noncore/multimedia/config.in $(TOPDIR)/noncore/net/config.in $(TOPDIR)/noncore/net/opietooth/config.in $(TOPDIR)/noncore/settings/config.in $(TOPDIR)/noncore/styles/config.in $(TOPDIR)/noncore/tools/calc2/config.in $(TOPDIR)/noncore/tools/config.in $(TOPDIR)/noncore/todayplugins/config.in
# $(TOPDIR)/.config depends on .depends.cfgs, as it depends on $(configs)
# in order to have a full set of config.in files.
# .depends depends on $(TOPDIR)/.config
# everything else depends on .depends, to ensure the dependencies are
# intact.
#
# NOTE: The order in which things happen in this makefile is
# -critical-. Do not rearrange this!
all : $(TOPDIR)/.config
+STRIP=arm-linux-strip
+
+ipks: $(OPIEDIR)/scripts/subst $(OPIEDIR)/scripts/filesubst FORCE
+ @find $(OPIEDIR)/ -type f -name \*.control | ( for ctrl in `cat`; do \
+ prerm=`echo $$ctrl|sed -e 's,\.control$$,.prerm,'`; \
+ preinst=`echo $$ctrl|sed -e 's,\.control$$,.preinst,'`; \
+ postrm=`echo $$ctrl|sed -e 's,\.control$$,.postrm,'`; \
+ postinst=`echo $$ctrl|sed -e 's,\.control$$,.postinst,'`; \
+ echo "Building ipk of $$ctrl"; \
+ cd $(OPIEDIR); $(OPIEDIR)/scripts/mkipkg --subst=$(OPIEDIR)/scripts/subst --filesubst=$(OPIEDIR)/scripts/filesubst --control=$$ctrl --prerm=$$prerm --preinst=$$preinst --postrm=$$postrm --postinst=$$postinst --strip=$(STRIP) $(OPIEDIR); \
+ done )
+
$(TOPDIR)/.config : $(TOPDIR)/.depends.cfgs
all menuconfig xconfig oldconfig config randconfig allyesconfig allnoconfig defconfig : $(TOPDIR)/.depends.cfgs
clean-configs :
@echo "Wiping generated config.in files..."
@-rm -f $(configs)
--include $(TOPDIR)/.depends.cfgs
+ifneq ($(wildcard $(TOPDIR)/.depends.cfgs),)
+ include $(TOPDIR)/.depends.cfgs
+endif
all menuconfig xconfig oldconfig config randconfig allyesconfig allnoconfig defconfig : $(configs)
$(TOPDIR)/.config: $(TOPDIR)/.depends.cfgs $(configs)
$(call descend,scripts/kconfig,conf)
@if [ ! -e $@ ]; then \
cp $(TOPDIR)/def-configs/opie $@; \
fi;
@$(MAKE) -C scripts/kconfig conf;
./scripts/kconfig/conf -s ./config.in
# config rules must have the $(configs) var defined
# at the time that they run. we must ensure that .depends.cfgs
# is built and included by the time we reach this point.
xconfig :
$(call descend,scripts/kconfig,qconf)
LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(TOPDIR)/scripts/kconfig \
./scripts/kconfig/qconf ./config.in
menuconfig : scripts/lxdialog/lxdialog
$(call descend,scripts/kconfig,mconf)
./scripts/kconfig/mconf ./config.in
config :
$(call descend,scripts/kconfig,conf)
./scripts/kconfig/conf ./config.in
oldconfig :
$(call descend,scripts/kconfig,conf)
./scripts/kconfig/conf -o ./config.in
randconfig :
$(call descend,scripts/kconfig,conf)
./scripts/kconfig/conf -r ./config.in
allyesconfig :
$(call descend,scripts/kconfig,conf)
./scripts/kconfig/conf -y ./config.in
allnoconfig :
$(call descend,scripts/kconfig,conf)
./scripts/kconfig/conf -n ./config.in
defconfig :
$(call descend,scripts/kconfig,conf)
./scripts/kconfig/conf -d ./config.in
export
ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
export include-config := 1
-include $(TOPDIR)/.config
-include $(TOPDIR)/.depends
-
endif
-include $(TOPDIR)/.config.cmd
SUBDIRS = $(subdir-y)
export QMAKESPEC=$(QMAKESPECSDIR)/$(patsubst "%",%,$(CONFIG_SPECFILE))
ifdef CONFIG_OPTIMIZATIONS
export CFLAGS_RELEASE=$(patsubst "%,%,$(CONFIG_OPTIMIZATIONS))
export CFLAGS_RELEASE:=$(patsubst %",%,$(CFLAGS_RELEASE))
endif
all clean install ipk: $(SUBDIRS)
lupdate lrelease:
@for i in $(SUBDIRS); do $(MAKE) -C $$i $@; done;
opie-lupdate opie-lrelease:
@for i in $(SUBDIRS); do $(MAKE) -C $$i $@; done;
$(subdir-y) : $(if $(CONFIG_LIBQPE),$(QTDIR)/stamp-headers $(OPIEDIR)/stamp-headers) \
$(if $(CONFIG_LIBQPE-X11),$(QTDIR)/stamp-headers-x11 $(OPIEDIR)/stamp-headers-x11 ) \
$(TOPDIR)/library/custom.h
clean : $(TOPDIR)/.config
apidox : doc/generate_apidox
include $(TOPDIR)/Rules.make
diff --git a/Vars.make b/Vars.make
new file mode 100644
index 0000000..eac5cea
--- a/dev/null
+++ b/Vars.make
@@ -0,0 +1,63 @@
+ifndef QTDIR
+$(error QTDIR not set)
+endif
+
+prefix=/opt/QtPalmtop
+
+ifeq ($(OPIEDIR),)
+ export OPIEDIR:=$(TOPDIR)
+endif
+ifeq ($(IPK_DIR),)
+ export IPK_DIR:=$(OPIEDIR)
+endif
+
+export QMAKE:=$(OPIEDIR)/qmake/qmake
+export QMAKESPECSDIR=$(OPIEDIR)/mkspecs
+
+ifeq ($(QPE_VERSION),)
+ VERSION_MAJ:=$(shell echo $$(sed -n -e 's/.*QPE_VERSION "\([0-9]*\)\..*\..*".*/\1/p' <$(OPIEDIR)/library/version.h))
+ VERSION_MIN:=$(shell echo $$(sed -n -e 's/.*QPE_VERSION ".*\.\([0-9]*\)\..*".*/\1/p' <$(OPIEDIR)/library/version.h))
+ VERSION_PAT:=$(shell echo $$(sed -n -e 's/.*QPE_VERSION ".*\..*\.\([0-9]*\).*/\1/p' <$(OPIEDIR)/library/version.h))
+ QPE_VERSION:=$(VERSION_MAJ).$(VERSION_MIN).$(VERSION_PAT)
+
+ ifeq ($(QPE_VERSION),..)
+ QPE_VERSION=0.9.3
+ endif
+endif
+export QPE_VERSION
+
+SUB_VERSION=$(shell echo $$(sed -n -e 's,.*SUB_VERSION \"\(.*\)\".*,\1,p' <$(OPIEDIR)/library/version.h))
+ifeq ($(VERSION_CVS),)
+ VERSION_CVS:=$(shell date +%Y%m%d)
+endif
+ifneq ($(filter %snapshot",$(shell cat $(OPIEDIR)/library/version.h|grep QPE_VERSION)),)
+ SUB_VERSION:=$(VERSION_CVS)
+endif
+export SUB_VERSION
+
+ifeq ($(QTE_REVISION),)
+ QTE_REVISION=4
+endif
+export QTE_REVISION
+
+export DEB_VERSION=2.0
+
+ifeq ($(QTE_BASEVERSION),)
+ ifneq ($(shell ls $(QTDIR)/include/qglobal.h 2>/dev/null),)
+ QTE_BASEVERSION:=$(shell cat $(QTDIR)/include/qglobal.h|grep '^\#define QT_VERSION'|grep -v STR|sed -e 's/\#define QT_VERSION\t*//; s/.*\([0-9]\)\([0-9]\)\([0-9]\).*/\1.\2.\3/;')
+ else
+ QTE_BASEVERSION=2.3.5
+ endif
+endif
+export QTE_BASEVERSION
+
+ifeq ($(QTE_VERSION),)
+ ifneq ($(shell ls $(QTDIR)/include/qglobal.h 2>/dev/null),)
+ QTE_VERSION:=$(shell cat $(QTDIR)/include/qglobal.h|grep '^\#define QT_VERSION_STR'|sed -e 's/\#define QT_VERSION_STR\t*//;' -e 's/.*"\([^"]*\)".*/\1/;')
+ else
+ QTE_VERSION=2.3.5
+ endif
+endif
+export QTE_VERSION
+
+export PATH:=$(OPIEDIR)/scripts:$(PATH)
diff --git a/scripts/mkipkg b/scripts/mkipkg
new file mode 100755
index 0000000..54651af
--- a/dev/null
+++ b/scripts/mkipkg
@@ -0,0 +1,371 @@
+#!/bin/sh
+# vim: et sw=4
+
+# TODO: srcdir!=builddir
+
+usage()
+{
+ echo "usage: $self --destdir=[destination installation directory]"
+ echo "usage: $self [destination installation directory]"
+ exit 1
+}
+
+self=mkipkg
+destdir=
+strip=strip
+control=
+builddir=
+srcdir=
+prefix=
+preinst=
+postinst=
+prerm=
+postrm=
+mkfsjffs2=
+ipkgbuild=ipkg-build
+buildversion=
+subst=
+user=root
+group=root
+filesubst=
+
+oldpwd=
+
+for option
+do
+ case "$option" in
+ -*=*)
+ arg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'`
+ ;;
+ esac
+
+ case "$option" in
+ --destdir=*)
+ destdir=$arg
+ ;;
+ --strip=*)
+ strip=$arg
+ ;;
+ --control=*)
+ control=$arg
+ ;;
+ --preinst=*)
+ preinst=$arg
+ ;;
+ --postinst=*)
+ postinst=$arg
+ ;;
+ --prerm=*)
+ prerm=$arg
+ ;;
+ --postrm=*)
+ postrm=$arg
+ ;;
+ --builddir=*)
+ builddir=$arg
+ ;;
+ --srcdir=*)
+ srcdir=$arg
+ ;;
+ --prefix=*)
+ prefix=$arg
+ ;;
+ --mkfsjffs2=*)
+ mkfsjffs2=$arg
+ ;;
+ --ipkgbuild=*)
+ ipkgbuild=$arg
+ ;;
+ --buildversion=*)
+ buildversion=$arg
+ ;;
+ --subst=*)
+ subst=$arg
+ ;;
+ --user=*)
+ user=$arg
+ ;;
+ --group=*)
+ group=$arg
+ ;;
+ --filesubst=*)
+ filesubst=$arg
+ ;;
+ --classic)
+ classic=-c
+ ;;
+ -*)
+ usage
+ ;;
+ *)
+ destdir=$option
+ ;;
+ esac
+done
+
+if [ -z "$control" ]; then
+ control=$destdir/CONTROL/control
+fi
+if [ -z "$prerm" ]; then
+ prerm=$destdir/CONTROL/prerm
+fi
+if [ -z "$postrm" ]; then
+ postrm=$destdir/CONTROL/postrm
+fi
+if [ -z "$preinst" ]; then
+ preinst=$destdir/CONTROL/preinst
+fi
+if [ -z "$postinst" ]; then
+ postinst=$destdir/CONTROL/postinst
+fi
+
+# remove leading slash from prefix (to fix globbing)
+if [ -n "$prefix" ]; then
+ prefix=`echo $prefix | sed -e "s,/\(.*\),\\1,"`
+fi
+
+if [ -z "$destdir" ]; then
+ usage
+fi
+
+if [ ! -r $control ]; then
+ echo "$self: cannot find $control, exiting..."
+ exit 1
+fi
+
+if [ -z "`which $ipkgbuild 2>/dev/null`" ]; then
+ echo "$self: cannot find ipkg-build, exiting..."
+ exit 1
+fi
+
+findFile()
+{
+ local path=
+ if [ $# = 1 ]; then
+ find $1 -type f -o -type b -o -type c -o -type l -o -type d
+ else
+ find . -type f -o -type b -o -type c -o -type l -o -type d | \
+ sed -e "s,\./\(.*\),\\1,g"
+ fi
+
+}
+
+_pushd() { oldpwd=`pwd`; cd $1; }
+_popd() { cd $oldpwd; }
+
+setVar()
+{
+ eval "$1='$2'"
+}
+
+expandMaskToList()
+{
+ local _list=`echo $1`
+ local _tmpFileList=
+ for f in $_list; do
+ if [ -d $f ]; then
+ find="`findFile $f`"
+ if [ -z "$find" ]; then
+ find="$f"
+ fi
+ f="$f `findFile $f`"
+ fi
+ _tmpFileList=$f" $_tmpFileList"
+ done
+ setVar $2 "$_tmpFileList"
+}
+
+createFileList()
+{
+ local excludeMask
+ local includeMask
+ if (cat $1|grep -q ^FileExcludeMask); then
+ excludemaskpresent=1
+ excludeMask=$(eval echo '"'$(sed -n -e "s,^FileExcludeMask: *,,p" $1)'"')
+ fi
+ if (cat $1|grep -q ^FileIncludeMask); then
+ includemaskpresent=1
+ includeMask=$(eval echo '"'$(sed -n -e "s,^FileIncludeMask: *,,p" $1)'"')
+ else
+ if (cat $1|grep -q ^Files:); then
+ includemaskpresent=1
+ includeMask=$(eval echo '"'$(sed -n -e "s,^Files: *,,p" $1)'"')
+ fi
+ fi
+
+ excludeMask="$excludeMask CONTROL/* usr/share/* CVS/* SCCS/*"
+
+ if [ $includemaskpresent == 1 ]; then
+ if [ -z "$includeMask" ]; then
+ setVar $2 ""
+ return 0
+ fi
+ _pushd $destdir
+ expandMaskToList "$includeMask" _fileList
+ _popd
+ else
+ _fileList=`cd $destdir && findFile`
+ fi
+
+ _excludeList=
+ if [ -n "$excludeMask" ]; then
+ _pushd $destdir
+ expandMaskToList "$excludeMask" _excludeList
+ _popd
+ fi
+
+ local realFileList=
+ local missing=0
+ for file in $_fileList; do
+ local containedInList=0
+ for i in $_excludeList; do
+ if [ $file = $i ]; then
+ containedInList=1
+ fi
+ done
+ if [ $containedInList = 0 ]; then
+ if [ ! -e $file ]; then
+# echo "$self: $file not found"
+ missing=1
+ fi
+ realFileList=$file" $realFileList"
+ fi
+ done
+
+ if [ $missing = 1 ]; then
+ return 1
+ fi
+
+ setVar $2 "$realFileList"
+}
+
+stripFile()
+{
+ if [ -f $1 -a -x $1 ]; then
+ $strip --strip-all $1
+ fi
+}
+
+substFile()
+{
+ local oldfile=$1
+
+ if [ ! -e $2 ]; then return 1; fi
+
+ if [ -e $oldfile ]; then
+ newfile=./`echo $1|sed -f $2|sed -e's,^/,,g'`
+ olddir=./`dirname $1`
+ newdir=`dirname $newfile`
+
+ if [ "$newdir" = "$olddir" ]; then
+ return 0
+ fi
+
+ mkdir -p $newdir
+ mv $1 $newfile
+ rmdir -p $olddir 2>/dev/null
+ fi
+}
+
+stripFiles()
+{
+ for f in $1; do
+ stripFile $f
+ done
+}
+
+substFiles()
+{
+ for f in $1; do
+ substFile $f
+ done
+}
+
+substAndStripFiles()
+{
+ for f in $1; do
+ stripFile $f
+ substFile $f $2
+ done
+}
+
+installScript()
+{
+ if [ -n "$1" -a -f "$1" ]; then
+ destfile=`basename $1`
+ if [ -n "$subst" ]; then
+ sed -f $subst < $1 > $ctrldir/$destfile
+ else
+ cat $1 > $ctrldir/$destfile
+ fi
+ chmod +x $ctrldir/$destfile
+ fi
+}
+
+tempDir=/tmp/`basename $self`.$$
+mkdir -p $tempDir
+if [ $? != 0 ]; then
+ echo "$self: cannot create $tempDir, exiting..."
+ exit 1
+fi
+
+cd $destdir; createFileList $control ipkgFileList
+if [ "$?" != "0" ]; then
+ echo "$self: ERROR: missing files, not building $control"
+ exit 1
+fi
+
+( cd $destdir && tar cf - $ipkgFileList 2>/dev/null ) | \
+( cd $tempDir && tar xf - 2>/dev/null )
+
+if [ -z "$filesubst" ]; then
+ ( cd $tempDir && stripFiles "$ipkgFileList" )
+else
+ if ! (echo $filesubst|grep -q '^/'); then
+ filesubst="$oldpwd/$filesubst"
+ fi
+ ( cd $tempDir && substAndStripFiles "$ipkgFileList" $filesubst )
+fi
+
+path="`echo "$PATH" | sed -e "s/\:/ /g"`"
+if [ -z "$mkfsjffs2" ]; then
+ for i in $path; do
+ if [ -x "$i/mkfs.jffs2" ]; then
+ mkfsjffs2="$i/mkfs.jffs2"
+ break
+ fi
+ done
+fi
+
+if [ -z "$mkfsjffs2" ]; then
+ echo "$self: WARNING: no mkjfs.jffs2 found in path. Falling back to using du"
+ echo "for size calculation. mkfs.jffs2 is recommended for size calculation"
+ echo "as it calculates the real package size on the compressed file system,"
+ echo "in contrast to du calculating the uncompressed size!"
+ buildsize=`du -h -s $tempDir | awk '{print $1}'`
+else
+ buildsize=`$mkfsjffs2 -r $tempDir | wc -c`
+fi
+
+ctrldir=$tempDir/CONTROL
+
+mkdir -p $ctrldir
+
+if [ ! -e $subst ] || [ -z "$subst" ]; then
+ cat $control | egrep -v '^(FileIncludeMask|FileExcludeMask|Files):' > $ctrldir/control
+else
+ sed -f $subst < $control | egrep -v '^(FileIncludeMask|FileExcludeMask|Files):' > $ctrldir/control
+fi
+
+if [ "$buildsize" != "0" ]; then
+ echo "Installed-Size: $buildsize" >> $ctrldir/control
+fi
+
+installScript $preinst
+installScript $postinst
+installScript $prerm
+installScript $posrm
+
+$ipkgbuild $classic -o $user -g $group $tempDir
+
+rm -rf $tempDir