summaryrefslogtreecommitdiff
path: root/scripts/mkipkg
Side-by-side diff
Diffstat (limited to 'scripts/mkipkg') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/mkipkg104
1 files changed, 58 insertions, 46 deletions
diff --git a/scripts/mkipkg b/scripts/mkipkg
index 54651af..7877078 100755
--- a/scripts/mkipkg
+++ b/scripts/mkipkg
@@ -137,106 +137,109 @@ 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
+ 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 -o -type d | \
- sed -e "s,\./\(.*\),\\1,g"
+ 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
- find="`findFile $f`"
- if [ -z "$find" ]; then
- find="$f"
- fi
- f="$f `findFile $f`"
+ f="`findFile $f`"
fi
- _tmpFileList=$f" $_tmpFileList"
+ _tmpFileList="`eval echo $f` $_tmpFileList"
done
setVar $2 "$_tmpFileList"
}
createFileList()
{
local excludeMask
local includeMask
+ local includemaskpresent=0
+ local excludemaskpresent=0
+
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/*"
+ _pushd $destdir
+
+ excludeMask="$excludeMask CONTROL/* usr/share/*"
- if [ $includemaskpresent == 1 ]; then
- if [ -z "$includeMask" ]; then
- setVar $2 ""
- return 0
- fi
- _pushd $destdir
- expandMaskToList "$includeMask" _fileList
- _popd
- else
- _fileList=`cd $destdir && findFile`
+ if [ $includemaskpresent != 1 ]; then
+ includeMask="."
+ fi
+
+ if [ -z "$includeMask" ]; then
+ setVar $2 ""
+ _popd
+ return 0
fi
+ expandMaskToList "$includeMask" _fileList
+
_excludeList=
if [ -n "$excludeMask" ]; then
- _pushd $destdir
expandMaskToList "$excludeMask" _excludeList
- _popd
+ _excludeList="$_excludeList `find -name \*CVS\* -o -name \*SCCS\*`"
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"
+ 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()
@@ -247,81 +250,100 @@ stripFile()
}
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`
+ 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 $1 $newfile
+ mv $olddir/$base $newfile
rmdir -p $olddir 2>/dev/null
fi
}
stripFiles()
{
for f in $1; do
- stripFile $f
+ stripFile ./$f
done
}
substFiles()
{
for f in $1; do
- substFile $f
+ substFile ./$f
done
}
substAndStripFiles()
{
for f in $1; do
- stripFile $f
- substFile $f $2
+ 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..."
exit 1
fi
-cd $destdir; createFileList $control ipkgFileList
+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"
exit 1
fi
-( cd $destdir && tar cf - $ipkgFileList 2>/dev/null ) | \
-( cd $tempDir && tar xf - 2>/dev/null )
+
+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 )
@@ -342,26 +364,16 @@ if [ -z "$mkfsjffs2" ]; then
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