summaryrefslogtreecommitdiff
path: root/scripts
Side-by-side diff
Diffstat (limited to 'scripts') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/GeneratePackageMake8
-rwxr-xr-xscripts/mkipkg10
-rwxr-xr-xscripts/tothreaded4
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