summaryrefslogtreecommitdiff
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
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 (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,39 +1,74 @@
#!/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
@@ -124,32 +159,35 @@ 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
;;
@@ -158,32 +196,35 @@ 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
diff --git a/scripts/mkipkg b/scripts/mkipkg
index 43bd3a3..a336371 100755
--- a/scripts/mkipkg
+++ b/scripts/mkipkg
@@ -166,77 +166,77 @@ expandMaskToList()
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"
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