author | wimpie <wimpie> | 2004-04-02 16:49:47 (UTC) |
---|---|---|
committer | wimpie <wimpie> | 2004-04-02 16:49:47 (UTC) |
commit | 9e26c10c0dc97a0956d019166caf712955094764 (patch) (side-by-side diff) | |
tree | 9bf4f33bd02185780070e178d25e24bdff4d6cd2 /scripts/ipkg-build | |
parent | 2f2d702e37cc391dd547eaa7e2432d86285e546d (diff) | |
download | opie-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
-rwxr-xr-x | scripts/ipkg-build | 63 |
1 files changed, 52 insertions, 11 deletions
diff --git a/scripts/ipkg-build b/scripts/ipkg-build index c6af056..b661bbf 100755 --- a/scripts/ipkg-build +++ b/scripts/ipkg-build @@ -1,31 +1,66 @@ #!/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 @@ -132,16 +167,19 @@ while getopts "cg:o:" opt; do 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=. @@ -166,16 +204,19 @@ fi 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 |