-rwxr-xr-x | scripts/GeneratePackageMake | 8 | ||||
-rwxr-xr-x | scripts/mkipkg | 10 | ||||
-rwxr-xr-x | scripts/tothreaded | 4 |
3 files changed, 13 insertions, 9 deletions
diff --git a/scripts/GeneratePackageMake b/scripts/GeneratePackageMake index 099d3e8..9d692a9 100755 --- a/scripts/GeneratePackageMake +++ b/scripts/GeneratePackageMake @@ -1,228 +1,228 @@ # generate file containg control name / package name / files find . -name *.control | grep -v -- "-mt.control" | while read i do i=${i/.\//} CDIR=${i%/*} BNAME=${i##*/} BNAME=${BNAME/.control/} echo "cdir: ${CDIR}" echo "bname: ${BNAME}" grep -e "Package:" -e "Files:" ./${i} done > /tmp/ALL # # makefile header # cat << MAKEFILEHEADER # # generate -mt.control file from regular control # arg 1 : path to control file to convert # define GenerateMTControl @echo "Generating -mt control file for \$(basename \$<)" @\$(OPIEDIR)/scripts/tothreaded \$< \$(OPIEDIR)/AllThreadedPackages endef # # package one control file # arg 1 : directory from OPIEROOT where control file resides # arg 2 : control file basename without -mt (no .control) # arg 3 : control file basename with -mt if needed # arg 4 : package name (value specified by Package: ...) # define DoPackage -@echo \"Building ipk of \$(4)\" -@( \$(ForSubst) ) > \$(TOPDIR)/scripts/subst -@( \$(ForFileSubst) ) > \$(TOPDIR)/scripts/Filesubst -@( cd \$(OPIEDIR); \\ +echo \"Building ipk of \$(4)\" +( \$(ForSubst) ) > \$(TOPDIR)/scripts/subst +( \$(ForFileSubst) ) > \$(TOPDIR)/scripts/Filesubst +( cd \$(OPIEDIR); \\ \$(OPIEDIR)/scripts/mkipkg \\ --subst=\$(OPIEDIR)/scripts/subst \\ --filesubst=\$(OPIEDIR)/scripts/filesubst \\ --control=\$(OPIEDIR)/\$(1)/\$(3).control \\ --prerm=\$(OPIEDIR)/\$(1)/\$(2).prerm \\ --preinst=\$(OPIEDIR)/\$(1)/\$(2).preinst \\ --postrm=\$(OPIEDIR)/\$(1)/\$(2).postrm \\ --postinst=\$(OPIEDIR)/\$(1)/\$(2).postinst \\ --strip=\$(STRIP) \$(OPIEDIR); \\ rm -f \$(OPIEDIR)/Packages/\$(4)_*.ipk; \\ mv *.ipk \$(OPIEDIR)/Packages; \\ touch \$(OPIEDIR)/Packages/\$(4) \\ ) || true endef # # prepared for generating the substfile for every build # define ForSubst echo 's,\\\$\$QPE_VERSION,\$(QPE_VERSION),g'; \\ echo 's,\\\$\$OPIE_VERSION,\$(OPIE_VERSION),g'; \\ echo 's,\\\$\$QTE_VERSION,\$(QTE_VERSION),g'; \\ echo 's,\\\$\$QTE_REVISION,\$(QTE_REVISION),g'; \\ echo 's,\\\$\$SUB_VERSION,\$(SUB_VERSION),g'; \\ echo 's,\\\$\$EXTRAVERSION,\$(EXTRAVERSION),g'; \\ echo 's,\\\$\$QTE_BASEVERSION,\$(QTE_BASEVERSION),g' endef define ForFileSubst echo 's,\\\$\$OPIEDIR/root/,/,g'; \\ echo 's,\$(OPIEDIR)/root/,/,g'; \\ echo 's,\\\$\$OPIEDIR,\$(prefix),g'; \\ echo 's,\$(OPIEDIR),\$(prefix),g'; \\ echo 's,\\\$\$QTDIR,\$(prefix),g'; \\ echo 's,\$(QTDIR),\$(prefix),g'; \\ echo 's,^\(\./\)*root/,/,g'; \\ echo 's,^\(\./\)*etc/,\$(prefix)/etc/,g'; \\ echo 's,^\(\./\)*lib/,\$(prefix)/lib/,g'; \\ echo 's,^\(\./\)*bin/,\$(prefix)/bin/,g'; \\ echo 's,^\(\./\)*pics/,\$(prefix)/pics/,g'; \\ echo 's,^\(\./\)*sounds/,\$(prefix)/sounds/,g'; \\ echo 's,^\(\./\)*i18n/,\$(prefix)/i18n/,g'; \\ echo 's,^\(\./\)*plugins/,\$(prefix)/plugins/,g'; \\ echo 's,^\(\./\)*apps/,\$(prefix)/apps/,g'; \\ echo 's,^\(\./\)*share/,\$(prefix)/share/,g'; \\ echo 's,^\(\./\)*i18n/,\$(prefix)/i18n/,g'; \\ echo 's,^\(\./\)*help/,\$(prefix)/help/,g' endef # # Will contain a list of all non-mt control files ALLCONTROLFILES= # # Will contain a list of all packaging targets ALLPACKAGES= # s contains now single space s=\$(x) \$(x) # # for convenience : generate AllTh ATP=\$(OPIEDIR)/AllThreadedPackages MAKEFILEHEADER while read k do CDIR="${k#* }" read k BNAME="${k#* }" read k case $k in *"ackage:"*) Pkg="${k#* }" Pkg="${Pkg// }" ;; *"iles:"*) Files="${k/Files:/}" ;; esac read k case $k in *"ackage:"*) Pkg="${k#* }" Pkg="${Pkg// }" ;; *"iles:"*) Files="${k/Files:/}" ;; esac cat << HERE # # package $Pkg in ${BNAME} # package-${Pkg} : \$(OPIEDIR)/Packages/$Pkg package-${Pkg}-mt : \$(ATP) \$(OPIEDIR)/Packages/$Pkg-mt # collect control files and package targets ALLCONTROLFILES += ${CDIR}/${BNAME}.control ALLPACKAGES += $Pkg # to generate -mt control file \$(OPIEDIR)/${CDIR}/${BNAME}-mt.control : \$(OPIEDIR)/${CDIR}/${BNAME}.control \$(GenerateMTControl) HERE if [ ! -z "${Files}" ] then cat << HERE # optimize speed .phony : \$(wildcard \$(addprefix \$(OPIEDIR)/,${Files})) # capture missing files (because not built) \$(OPIEDIR)/Packages/$Pkg \$(OPIEDIR)/Packages/$Pkg-mt \$(SUBSTFILES): \$(wildcard \$(addprefix \$(OPIEDIR)/,${Files})) HERE # echo "\$(wildcard \$(addprefix \$(OPIEDIR)/,${Files})) : " fi cat << HERE \$(OPIEDIR)/Packages/$Pkg : \$(OPIEDIR)/${CDIR}/${BNAME}.control @\$(call DoPackage,${CDIR},${BNAME},${BNAME},${Pkg}) \$(OPIEDIR)/Packages/$Pkg-mt : \$(OPIEDIR)/${CDIR}/${BNAME}-mt.control @\$(call DoPackage,${CDIR},${BNAME},${BNAME}-mt,${Pkg}-mt) HERE done < /tmp/ALL cat << HERE # # regenerate package file if control files are modified # Package.make : \$(addprefix \$(OPIEDIR)/,\$(ALLCONTROLFILES)) # # make targets to build packages # needs quicklauncher link in location (because dangling # links are not considered as true files by the wildcard command) # # if you want to build one package only then use # make package-<basenameof control> # or make package-<basenameof control>-mt # packages : /opt/QtPalmtop/bin/quicklauncher \\ \$(OPIEDIR)/Packages \\ \$(add prefix \$(OPIEDIR)/Packages/,\$(ALLPACKAGES)) packages-mt : /opt/QtPalmtop/bin/quicklauncher \\ \$(ATP) \\ \$(OPIEDIR)/Packages \\ \$(addprefix \$(OPIEDIR)/Packages/,\$(addsuffix -mt,\$(ALLPACKAGES))) # # capture missing quichlauncher link # /opt/QtPalmtop/bin/quicklauncher : @echo "create a link from /opt/QtPalmtop to \$(OPIEDIR) for this target to work" exit 2 # # Create Packages directory # \$(OPIEDIR)/Packages : @mkdir \$(OPIEDIR)/Packages # # update file containing all packages # \$(ATP) : \$(addprefix \$(OPIEDIR)/,\$(ALLCONTROLFILES)) @echo "Generating \$(notdir \$(ATP))" @echo -e "\$(subst \$(s),,\$(foreach i,\$(ALLPACKAGES),\$(i)\n))" > \$@ HERE rm /tmp/ALL diff --git a/scripts/mkipkg b/scripts/mkipkg index a336371..2f020f4 100755 --- a/scripts/mkipkg +++ b/scripts/mkipkg @@ -55,334 +55,338 @@ do --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 find $1 -type d -a -empty else find . -type f -o -type b -o -type c -o -type l | \ sed -e "s,\./\(.*\),\\1,g" find . -type d -a -empty 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 f="`findFile $f`" fi _tmpFileList="`eval echo $f` $_tmpFileList" done setVar $2 "$_tmpFileList" } createFileList() { local excludeMask local includeMask local includemaskpresent=0 local excludemaskpresent=0 if (grep -q ^FileExcludeMask $1); then excludemaskpresent=1 excludeMask=$(eval echo '"'$(sed -n -e "s,^FileExcludeMask: *,,p" $1)'"') fi if (grep -q ^FileIncludeMask $1); then includemaskpresent=1 includeMask=$(eval echo '"'$(sed -n -e "s,^FileIncludeMask: *,,p" $1)'"') else if (grep -q ^Files: $1); then includemaskpresent=1 includeMask=$(eval echo '"'$(sed -n -e "s,^Files: *,,p" $1)'"') fi fi _pushd $destdir declare -a excludeMaskArray excludeMaskArray=( $excludeMask ) excludeMaskArray=( "${excludeMaskArray[@]}" "CONTROL/*" "usr/share/*" ) if [ $includemaskpresent != 1 ]; then includeMask="." fi if [ -z "$includeMask" ]; then setVar $2 "" _popd return 0 fi expandMaskToList "$includeMask" _fileList excludeMaskArray=( "${excludeMaskArray[@]}" "*/CVS*" "*/SCCS*" ) local realFileList= local missing=0 for file in $_fileList; do local containedInList=0 for i in "${excludeMaskArray[@]}"; do if [[ $file == $i ]]; then containedInList=1 break; fi done if [ $containedInList = 0 ]; then if ! [ -e $file -o -L $file ]; then echo "$self: $file not found" missing=1 fi realFileList=$file" $realFileList" fi done _popd if [ $missing = 1 ]; then return 1 fi setVar $2 "$realFileList" } stripFile() { - if [ -f $1 -a -x $1 ]; then - $strip --strip-all $1 + if [ ! -h $1 -a -f $1 -a -x $1 ]; then + $strip -p --strip-all $1 fi } substFile() { local oldfile=$1 if [ ! -e $2 ]; then return 1; fi if [ -e $oldfile -o -L $oldfile ]; then newfile=`echo $oldfile|sed -f $2|sed -e's,^/,,g'` olddir=`dirname $oldfile` base=`basename $oldfile` newdir=`dirname $newfile` # echo >&2 moving $oldfile to $newfile if [ "$newdir" = "$olddir" ]; then return 0 fi mkdir -p $newdir mv $olddir/$base $newfile rmdir -p $olddir 2>/dev/null fi } stripFiles() { for f in $1; do - stripFile ./$f + # do not strip links + if [ ! -h ./$f ] + then + stripFile ./$f + fi 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` filetype=`echo $destfile|cut -d. -f2` if [ -n "$filetype" ]; then destfile=$filetype; fi 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..." rm -rf $tempDir exit 1 fi ctrldir=$tempDir/CONTROL mkdir -p $ctrldir if [ ! -e $subst ] || [ -z "$subst" ]; then cat $control > $ctrldir/control.new else sed -f $subst < $control > $ctrldir/control.new fi createFileList $ctrldir/control.new ipkgFileList if [ "$?" != "0" ]; then echo "$self: ERROR: missing files, not building $control" rm -rf $tempDir exit 1 fi cat $ctrldir/control.new | egrep -v '^(Files|FileExcludeMask|FileIncludeMask):' > $ctrldir/control rm -f $ctrldir/control.new ( 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 # removing CVS directories find $tempDir -name CVS -a -type d -print0 | xargs -0 rm -rf 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 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 diff --git a/scripts/tothreaded b/scripts/tothreaded index 31ed31e..f916ad8 100755 --- a/scripts/tothreaded +++ b/scripts/tothreaded @@ -1,136 +1,136 @@ #!/bin/sh # PURPOSE : # # this script converts a non-threaded control file to a threaded one # by extending appropriate names with -mt as extension # # eg abc.control becoms abc-mt.control # # # make sure that the depends expression has enough spaces # expression can contian : , ( ) || && # tokenize() { sed "s/,/ & /g" | sed "s/)/ & /g" | sed "s/(/ & /g" | sed "s/|/ & /g" | sed "s/&/ & /g" } # # function converts package name to threaded equivalend IF the # package file HAS a threaded version # findthreadedequiv() { local isin i for i in $* do isin=`grep "^$i\$" "$ALLTHREADEDPKGSFILE"` if [ -z "$isin" ] then # no threaded package - echo -n "$i " + echo -n "$i" else # threaded package - echo -n "${isin}-mt " + echo -n "${isin}-mt" fi done echo } # # signature of binary files # currently obsolete # # ISBINARY="*ELF*LSB*" usage() { echo "Usage : tothreaded <controlfile> <ALLPackages file>" exit 2 } . scripts/SpecialMTFiles # # get the name of the controlfile to check for threading # if [ -z "$1" ] then usage fi controlfile=$1 shift case $controlfile in *-mt.control) #already threaded echo $controlfile exit 0; ;; esac # # file containing list of all known threaded packages # if [ -z "$1" ] then usage fi ALLTHREADEDPKGSFILE=$1 shift # # strip out the name of the package # packagename=${controlfile##*/} # path packagename=${packagename%.control} # extension # # generate new control file # newcontrolfile=${controlfile/\.control/-mt\.control} # # read all lines in original control file # while read line do case $line in # convert some files to threaded equivalent "Files:"*) files=${line#Files:} # thread-converted files T_files=`ConvertSpecialFiles "$files"` echo "Files: $T_files" ;; "Package: "*) T_package=`findthreadedequiv ${line#Package: }` echo "Package: ${T_package}" ;; "Depends: "*) depends=`echo "${line#Depends: }" | tokenize` T_depends=`findthreadedequiv ${depends}` echo "Depends: $T_depends" ;; "Provides: "*) T_provides=`findthreadedequiv ${line#Provides: }` echo "Provides: $T_provides" ;; "Recommends: "*) T_recommends=`findthreadedequiv ${line#Recommends: }` echo "Recommends: $T_recommends" ;; "Conflicts: "*) conflicts=`echo "${line#Conflicts: }" | tokenize` T_conflicts=`findthreadedequiv ${conflicts}` echo "Conflicts: $T_conflicts" ;; *":"*) echo "$line" ;; *) # al other lines echo " $line" ;; esac done < $controlfile > $newcontrolfile echo $newcontrolfile |