summaryrefslogtreecommitdiff
path: root/scripts
authorwimpie <wimpie>2004-04-02 16:49:47 (UTC)
committer wimpie <wimpie>2004-04-02 16:49:47 (UTC)
commit9e26c10c0dc97a0956d019166caf712955094764 (patch) (side-by-side diff)
tree9bf4f33bd02185780070e178d25e24bdff4d6cd2 /scripts
parent2f2d702e37cc391dd547eaa7e2432d86285e546d (diff)
downloadopie-9e26c10c0dc97a0956d019166caf712955094764.zip
opie-9e26c10c0dc97a0956d019166caf712955094764.tar.gz
opie-9e26c10c0dc97a0956d019166caf712955094764.tar.bz2
ipkg-build mkipkg : speedup (avoid grepping over controlfile by loading into array)
SpeciapMTFiles tothreaded : convert control files to -mt.control
Diffstat (limited to 'scripts') (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/SpecialMTFiles14
-rwxr-xr-xscripts/ipkg-build63
-rwxr-xr-xscripts/mkipkg22
-rwxr-xr-xscripts/tothreaded132
4 files changed, 209 insertions, 22 deletions
diff --git a/scripts/SpecialMTFiles b/scripts/SpecialMTFiles
new file mode 100644
index 0000000..456550c
--- a/dev/null
+++ b/scripts/SpecialMTFiles
@@ -0,0 +1,14 @@
+ConvertSpecialFiles() {
+ local f
+ for f in "$*"
+ do
+ case "$f" in
+ *libqte*)
+ echo ${f//qte/qte-mt}
+ ;;
+ *)
+ echo $f
+ ;;
+ esac
+ done
+}
diff --git a/scripts/ipkg-build b/scripts/ipkg-build
index c6af056..b661bbf 100755
--- a/scripts/ipkg-build
+++ b/scripts/ipkg-build
@@ -1,71 +1,106 @@
#!/bin/bash
# ipkg-build -- construct a .ipk from a directory
# Carl Worth <cworth@east.isi.edu>
# based on a script by Steve Redler IV, steve@sr-tech.com 5-21-2001
set -e
-ipkg_extract_value() {
- sed -e "s/^[^:]*:[[:space:]]*//"
+#declare array for values and fields found in control file
+declare -a AllValues AllFields
+
+collect_values() {
+ local i line
+
+ i=0
+ while read line
+ do
+ AllFields[$i]=${line%%:*}
+ AllValues[$i]=`echo ${line#*:}` # echo to remove spaces
+ let i=i+1
+ done < ${pkg_dir}/${CONTROL}/control
}
required_field() {
- field=$1
-
- value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value`
- if [ -z "$value" ]; then
- echo "*** Error: $CONTROL/control is missing field $field" >&2
- return 1
- fi
- echo $value
- return 0
+ local field i
+ field=$1
+
+ i=0
+ for af in "${AllFields[@]}"
+ do
+ if [ "$field" = "$af" ]
+ then
+ # return value
+ echo "${AllValues[$i]}"
+ return 0;
+ fi
+ let i=i+1
+ done
+ # not found
+ echo "*** Error: $CONTROL/control is missing field $field" >&2
+ return 1
}
+#ipkg_extract_value() {
+# sed -e "s/^[^:]*:[[:space:]]*//"
+#}
+#
+#required_field() {
+# field=$1
+#
+# value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value`
+# if [ -z "$value" ]; then
+# echo "*** Error: $CONTROL/control is missing field $field" >&2
+# return 1
+# fi
+# echo $value
+# return 0
+#}
+
pkg_appears_sane() {
local pkg_dir=$1
local owd=`pwd`
cd $pkg_dir
PKG_ERROR=0
tilde_files=`find . -name '*~'`
if [ -n "$tilde_files" ]; then
echo "*** Warning: The following files have names ending in '~'.
You probably want to remove them: " >&2
ls -ld $tilde_files
echo >&2
fi
large_uid_files=`find . -uid +99`
if [ "$ogargs" = "" ] && [ -n "$large_uid_files" ]; then
echo "*** Warning: The following files have a UID greater than 99.
You probably want to chown these to a system user: " >&2
ls -ld $large_uid_files
echo >&2
fi
if [ ! -f "$CONTROL/control" ]; then
echo "*** Error: Control file $pkg_dir/$CONTROL/control not found." >&2
cd $owd
return 1
fi
pkg=`required_field Package`
[ "$?" -ne 0 ] && PKG_ERROR=1
version=`required_field Version | sed 's/Version://; s/^.://g;'`
[ "$?" -ne 0 ] && PKG_ERROR=1
arch=`required_field Architecture`
[ "$?" -ne 0 ] && PKG_ERROR=1
required_field Maintainer >/dev/null
[ "$?" -ne 0 ] && PKG_ERROR=1
required_field Description >/dev/null
[ "$?" -ne 0 ] && PKG_ERROR=1
section=`required_field Section`
@@ -92,110 +127,116 @@ You probably want to chown these to a system user: " >&2
if [ -n "$bad_fields" ]; then
bad_fields=`echo $bad_fields`
echo "*** Error: The following fields in $CONTROL/control are missing a ':'" >&2
echo " $bad_fields" >&2
echo "ipkg-build: This may be due to a missing initial space for a multi-line field value" >&2
PKG_ERROR=1
fi
for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do
if [ -f $script -a ! -x $script ]; then
echo "*** Error: package script $script is not executable" >&2
PKG_ERROR=1
fi
done
if [ -f $CONTROL/conffiles ]; then
for cf in `cat $CONTROL/conffiles`; do
if [ ! -f ./$cf ]; then
echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2
PKG_ERROR=1
fi
done
fi
cd $owd
return $PKG_ERROR
}
###
# ipkg-build "main"
###
ogargs=""
outer=ar
usage="Usage: $0 [-c] [-o owner] [-g group] <pkg_directory> [<destination_directory>]"
while getopts "cg:o:" opt; do
case $opt in
o ) owner=$OPTARG
ogargs="--owner=$owner"
;;
g ) group=$OPTARG
ogargs="$ogargs --group=$group"
;;
c ) outer=tar
;;
\? ) echo $usage >&2
esac
done
+# maks sure that tar produces headers compatible with busybox format
+# debian needs this
+ogargs="$ogargs --format=oldgnu"
shift $(($OPTIND - 1))
# continue on to process additional arguments
case $# in
1)
dest_dir=.
;;
2)
dest_dir=$2
;;
*)
echo echo $usage >&2
exit 1
;;
esac
pkg_dir=$1
if [ ! -d $pkg_dir ]; then
echo "*** Error: Directory $pkg_dir does not exist" >&2
exit 1
fi
# CONTROL is second so that it takes precedence
CONTROL=
[ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN
[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL
if [ -z "$CONTROL" ]; then
echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2
exit 1
fi
+# load values
+collect_values
+
if ! pkg_appears_sane $pkg_dir; then
echo >&2
echo "ipkg-build: Please fix the above errors and try again." >&2
exit 1
fi
tmp_dir=$dest_dir/IPKG_BUILD.$$
mkdir $tmp_dir
tar $ogargs -C $pkg_dir -czf $tmp_dir/data.tar.gz . --exclude=$CONTROL
tar $ogargs -C $pkg_dir/$CONTROL -czf $tmp_dir/control.tar.gz .
echo "2.0" > $tmp_dir/debian-binary
pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
here_dir=$PWD
## tar -C $tmp_dir -czf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
rm -f $pkg_file
if [ "$outer" = "ar" ] ; then
cd $tmp_dir ; ar crf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
else
cd $tmp_dir ; tar -zcf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
fi
cd $here_dir
rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
rmdir $tmp_dir
echo "Packaged contents of $pkg_dir into $pkg_file"
diff --git a/scripts/mkipkg b/scripts/mkipkg
index 43bd3a3..a336371 100755
--- a/scripts/mkipkg
+++ b/scripts/mkipkg
@@ -134,141 +134,141 @@ if [ ! -r $control ]; then
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 (cat $1|grep -q ^FileExcludeMask); then
+ if (grep -q ^FileExcludeMask $1); then
excludemaskpresent=1
excludeMask=$(eval echo '"'$(sed -n -e "s,^FileExcludeMask: *,,p" $1)'"')
fi
- if (cat $1|grep -q ^FileIncludeMask); then
+ if (grep -q ^FileIncludeMask $1); then
includemaskpresent=1
includeMask=$(eval echo '"'$(sed -n -e "s,^FileIncludeMask: *,,p" $1)'"')
else
- if (cat $1|grep -q ^Files:); then
+ if (grep -q ^Files: $1); then
includemaskpresent=1
includeMask=$(eval echo '"'$(sed -n -e "s,^Files: *,,p" $1)'"')
fi
fi
_pushd $destdir
- excludeMask="$excludeMask CONTROL/* usr/share/*"
+ 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
- _excludeList=
- if [ -n "$excludeMask" ]; then
- expandMaskToList "$excludeMask" _excludeList
- _excludeList="$_excludeList `find -name \*CVS\* -o -name \*SCCS\*`"
- fi
+ excludeMaskArray=( "${excludeMaskArray[@]}" "*/CVS*" "*/SCCS*" )
local realFileList=
local missing=0
for file in $_fileList; do
local containedInList=0
- for i in $_excludeList; do
- if [ $file = $i ]; then
+ 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
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
}
diff --git a/scripts/tothreaded b/scripts/tothreaded
new file mode 100755
index 0000000..d9f8488
--- a/dev/null
+++ b/scripts/tothreaded
@@ -0,0 +1,132 @@
+#!/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 "
+ else
+ # threaded package
+ 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"
+ ;;
+ "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