summaryrefslogtreecommitdiff
authorwimpie <wimpie>2004-04-02 16:49:47 (UTC)
committer wimpie <wimpie>2004-04-02 16:49:47 (UTC)
commit9e26c10c0dc97a0956d019166caf712955094764 (patch) (unidiff)
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 @@
1ConvertSpecialFiles() {
2 local f
3 for f in "$*"
4 do
5 case "$f" in
6 *libqte*)
7 echo ${f//qte/qte-mt}
8 ;;
9 *)
10 echo $f
11 ;;
12 esac
13 done
14}
diff --git a/scripts/ipkg-build b/scripts/ipkg-build
index c6af056..b661bbf 100755
--- a/scripts/ipkg-build
+++ b/scripts/ipkg-build
@@ -1,201 +1,242 @@
1#!/bin/bash 1#!/bin/bash
2 2
3# ipkg-build -- construct a .ipk from a directory 3# ipkg-build -- construct a .ipk from a directory
4# Carl Worth <cworth@east.isi.edu> 4# Carl Worth <cworth@east.isi.edu>
5# based on a script by Steve Redler IV, steve@sr-tech.com 5-21-2001 5# based on a script by Steve Redler IV, steve@sr-tech.com 5-21-2001
6set -e 6set -e
7 7
8ipkg_extract_value() { 8#declare array for values and fields found in control file
9 sed -e "s/^[^:]*:[[:space:]]*//" 9declare -a AllValues AllFields
10
11collect_values() {
12 local i line
13
14 i=0
15 while read line
16 do
17 AllFields[$i]=${line%%:*}
18 AllValues[$i]=`echo ${line#*:}` # echo to remove spaces
19 let i=i+1
20 done < ${pkg_dir}/${CONTROL}/control
10} 21}
11 22
12required_field() { 23required_field() {
13 field=$1 24 local field i
14 25 field=$1
15 value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value` 26
16 if [ -z "$value" ]; then 27 i=0
17 echo "*** Error: $CONTROL/control is missing field $field" >&2 28 for af in "${AllFields[@]}"
18 return 1 29 do
19 fi 30 if [ "$field" = "$af" ]
20 echo $value 31 then
21 return 0 32 # return value
33 echo "${AllValues[$i]}"
34 return 0;
35 fi
36 let i=i+1
37 done
38 # not found
39 echo "*** Error: $CONTROL/control is missing field $field" >&2
40 return 1
22} 41}
23 42
43#ipkg_extract_value() {
44 #sed -e "s/^[^:]*:[[:space:]]*//"
45#}
46#
47#required_field() {
48 #field=$1
49#
50 #value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value`
51 #if [ -z "$value" ]; then
52 # echo "*** Error: $CONTROL/control is missing field $field" >&2
53 # return 1
54 #fi
55 #echo $value
56 #return 0
57#}
58
24pkg_appears_sane() { 59pkg_appears_sane() {
25 local pkg_dir=$1 60 local pkg_dir=$1
26 61
27 local owd=`pwd` 62 local owd=`pwd`
28 cd $pkg_dir 63 cd $pkg_dir
29 64
30 PKG_ERROR=0 65 PKG_ERROR=0
31 66
32 tilde_files=`find . -name '*~'` 67 tilde_files=`find . -name '*~'`
33 if [ -n "$tilde_files" ]; then 68 if [ -n "$tilde_files" ]; then
34 echo "*** Warning: The following files have names ending in '~'. 69 echo "*** Warning: The following files have names ending in '~'.
35You probably want to remove them: " >&2 70You probably want to remove them: " >&2
36 ls -ld $tilde_files 71 ls -ld $tilde_files
37 echo >&2 72 echo >&2
38 fi 73 fi
39 74
40 large_uid_files=`find . -uid +99` 75 large_uid_files=`find . -uid +99`
41 76
42 if [ "$ogargs" = "" ] && [ -n "$large_uid_files" ]; then 77 if [ "$ogargs" = "" ] && [ -n "$large_uid_files" ]; then
43 echo "*** Warning: The following files have a UID greater than 99. 78 echo "*** Warning: The following files have a UID greater than 99.
44You probably want to chown these to a system user: " >&2 79You probably want to chown these to a system user: " >&2
45 ls -ld $large_uid_files 80 ls -ld $large_uid_files
46 echo >&2 81 echo >&2
47 fi 82 fi
48 83
49 84
50 if [ ! -f "$CONTROL/control" ]; then 85 if [ ! -f "$CONTROL/control" ]; then
51 echo "*** Error: Control file $pkg_dir/$CONTROL/control not found." >&2 86 echo "*** Error: Control file $pkg_dir/$CONTROL/control not found." >&2
52 cd $owd 87 cd $owd
53 return 1 88 return 1
54 fi 89 fi
55 90
56 pkg=`required_field Package` 91 pkg=`required_field Package`
57 [ "$?" -ne 0 ] && PKG_ERROR=1 92 [ "$?" -ne 0 ] && PKG_ERROR=1
58 93
59 version=`required_field Version | sed 's/Version://; s/^.://g;'` 94 version=`required_field Version | sed 's/Version://; s/^.://g;'`
60 [ "$?" -ne 0 ] && PKG_ERROR=1 95 [ "$?" -ne 0 ] && PKG_ERROR=1
61 96
62 arch=`required_field Architecture` 97 arch=`required_field Architecture`
63 [ "$?" -ne 0 ] && PKG_ERROR=1 98 [ "$?" -ne 0 ] && PKG_ERROR=1
64 99
65 required_field Maintainer >/dev/null 100 required_field Maintainer >/dev/null
66 [ "$?" -ne 0 ] && PKG_ERROR=1 101 [ "$?" -ne 0 ] && PKG_ERROR=1
67 102
68 required_field Description >/dev/null 103 required_field Description >/dev/null
69 [ "$?" -ne 0 ] && PKG_ERROR=1 104 [ "$?" -ne 0 ] && PKG_ERROR=1
70 105
71 section=`required_field Section` 106 section=`required_field Section`
72 [ "$?" -ne 0 ] && PKG_ERROR=1 107 [ "$?" -ne 0 ] && PKG_ERROR=1
73 if [ -z "$section" ]; then 108 if [ -z "$section" ]; then
74 echo "The Section field should have one of the following values:" >&2 109 echo "The Section field should have one of the following values:" >&2
75 echo "admin, base, comm, editors, extras, games, graphics, kernel, libs, misc, net, text, web, x11" >&2 110 echo "admin, base, comm, editors, extras, games, graphics, kernel, libs, misc, net, text, web, x11" >&2
76 fi 111 fi
77 112
78 priority=`required_field Priority` 113 priority=`required_field Priority`
79 [ "$?" -ne 0 ] && PKG_ERROR=1 114 [ "$?" -ne 0 ] && PKG_ERROR=1
80 if [ -z "$priority" ]; then 115 if [ -z "$priority" ]; then
81 echo "The Priority field should have one of the following values:" >&2 116 echo "The Priority field should have one of the following values:" >&2
82 echo "required, important, standard, optional, extra." >&2 117 echo "required, important, standard, optional, extra." >&2
83 echo "If you don't know which priority value you should be using, then use \`optional'" >&2 118 echo "If you don't know which priority value you should be using, then use \`optional'" >&2
84 fi 119 fi
85 120
86 if echo $pkg | grep '[^a-z0-9.+-]'; then 121 if echo $pkg | grep '[^a-z0-9.+-]'; then
87 echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2 122 echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2
88 PKG_ERROR=1; 123 PKG_ERROR=1;
89 fi 124 fi
90 125
91 local bad_fields=`sed -ne 's/^\([^[:space:]][^:[:space:]]\+[[:space:]]\+\)[^:].*/\1/p' < $CONTROL/control | sed -e 's/\\n//'` 126 local bad_fields=`sed -ne 's/^\([^[:space:]][^:[:space:]]\+[[:space:]]\+\)[^:].*/\1/p' < $CONTROL/control | sed -e 's/\\n//'`
92 if [ -n "$bad_fields" ]; then 127 if [ -n "$bad_fields" ]; then
93 bad_fields=`echo $bad_fields` 128 bad_fields=`echo $bad_fields`
94 echo "*** Error: The following fields in $CONTROL/control are missing a ':'" >&2 129 echo "*** Error: The following fields in $CONTROL/control are missing a ':'" >&2
95 echo "$bad_fields" >&2 130 echo "$bad_fields" >&2
96 echo "ipkg-build: This may be due to a missing initial space for a multi-line field value" >&2 131 echo "ipkg-build: This may be due to a missing initial space for a multi-line field value" >&2
97 PKG_ERROR=1 132 PKG_ERROR=1
98 fi 133 fi
99 134
100 for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do 135 for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do
101 if [ -f $script -a ! -x $script ]; then 136 if [ -f $script -a ! -x $script ]; then
102 echo "*** Error: package script $script is not executable" >&2 137 echo "*** Error: package script $script is not executable" >&2
103 PKG_ERROR=1 138 PKG_ERROR=1
104 fi 139 fi
105 done 140 done
106 141
107 if [ -f $CONTROL/conffiles ]; then 142 if [ -f $CONTROL/conffiles ]; then
108 for cf in `cat $CONTROL/conffiles`; do 143 for cf in `cat $CONTROL/conffiles`; do
109 if [ ! -f ./$cf ]; then 144 if [ ! -f ./$cf ]; then
110 echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2 145 echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2
111 PKG_ERROR=1 146 PKG_ERROR=1
112 fi 147 fi
113 done 148 done
114 fi 149 fi
115 150
116 cd $owd 151 cd $owd
117 return $PKG_ERROR 152 return $PKG_ERROR
118} 153}
119 154
120### 155###
121# ipkg-build "main" 156# ipkg-build "main"
122### 157###
123ogargs="" 158ogargs=""
124outer=ar 159outer=ar
125usage="Usage: $0 [-c] [-o owner] [-g group] <pkg_directory> [<destination_directory>]" 160usage="Usage: $0 [-c] [-o owner] [-g group] <pkg_directory> [<destination_directory>]"
126while getopts "cg:o:" opt; do 161while getopts "cg:o:" opt; do
127 case $opt in 162 case $opt in
128 o ) owner=$OPTARG 163 o ) owner=$OPTARG
129 ogargs="--owner=$owner" 164 ogargs="--owner=$owner"
130 ;; 165 ;;
131 g ) group=$OPTARG 166 g ) group=$OPTARG
132 ogargs="$ogargs --group=$group" 167 ogargs="$ogargs --group=$group"
133 ;; 168 ;;
134 c ) outer=tar 169 c ) outer=tar
135 ;; 170 ;;
136 \? ) echo $usage >&2 171 \? ) echo $usage >&2
137 esac 172 esac
138done 173done
139 174
175# maks sure that tar produces headers compatible with busybox format
176# debian needs this
177ogargs="$ogargs --format=oldgnu"
140 178
141shift $(($OPTIND - 1)) 179shift $(($OPTIND - 1))
142 180
143# continue on to process additional arguments 181# continue on to process additional arguments
144 182
145case $# in 183case $# in
1461) 1841)
147 dest_dir=. 185 dest_dir=.
148 ;; 186 ;;
1492) 1872)
150 dest_dir=$2 188 dest_dir=$2
151 ;; 189 ;;
152*) 190*)
153 echo echo $usage >&2 191 echo echo $usage >&2
154 exit 1 192 exit 1
155 ;; 193 ;;
156esac 194esac
157 195
158pkg_dir=$1 196pkg_dir=$1
159 197
160if [ ! -d $pkg_dir ]; then 198if [ ! -d $pkg_dir ]; then
161 echo "*** Error: Directory $pkg_dir does not exist" >&2 199 echo "*** Error: Directory $pkg_dir does not exist" >&2
162 exit 1 200 exit 1
163fi 201fi
164 202
165# CONTROL is second so that it takes precedence 203# CONTROL is second so that it takes precedence
166CONTROL= 204CONTROL=
167[ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN 205[ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN
168[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL 206[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL
169if [ -z "$CONTROL" ]; then 207if [ -z "$CONTROL" ]; then
170 echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2 208 echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2
171 exit 1 209 exit 1
172fi 210fi
173 211
212# load values
213collect_values
214
174if ! pkg_appears_sane $pkg_dir; then 215if ! pkg_appears_sane $pkg_dir; then
175 echo >&2 216 echo >&2
176 echo "ipkg-build: Please fix the above errors and try again." >&2 217 echo "ipkg-build: Please fix the above errors and try again." >&2
177 exit 1 218 exit 1
178fi 219fi
179 220
180tmp_dir=$dest_dir/IPKG_BUILD.$$ 221tmp_dir=$dest_dir/IPKG_BUILD.$$
181mkdir $tmp_dir 222mkdir $tmp_dir
182 223
183tar $ogargs -C $pkg_dir -czf $tmp_dir/data.tar.gz . --exclude=$CONTROL 224tar $ogargs -C $pkg_dir -czf $tmp_dir/data.tar.gz . --exclude=$CONTROL
184tar $ogargs -C $pkg_dir/$CONTROL -czf $tmp_dir/control.tar.gz . 225tar $ogargs -C $pkg_dir/$CONTROL -czf $tmp_dir/control.tar.gz .
185 226
186echo "2.0" > $tmp_dir/debian-binary 227echo "2.0" > $tmp_dir/debian-binary
187 228
188pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk 229pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
189here_dir=$PWD 230here_dir=$PWD
190## tar -C $tmp_dir -czf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz 231## tar -C $tmp_dir -czf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
191rm -f $pkg_file 232rm -f $pkg_file
192if [ "$outer" = "ar" ] ; then 233if [ "$outer" = "ar" ] ; then
193 cd $tmp_dir ; ar crf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz 234 cd $tmp_dir ; ar crf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
194else 235else
195 cd $tmp_dir ; tar -zcf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz 236 cd $tmp_dir ; tar -zcf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
196fi 237fi
197cd $here_dir 238cd $here_dir
198rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz 239rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
199rmdir $tmp_dir 240rmdir $tmp_dir
200 241
201echo "Packaged contents of $pkg_dir into $pkg_file" 242echo "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
@@ -1,388 +1,388 @@
1#!/bin/sh 1#!/bin/sh
2# vim: et sw=4 2# vim: et sw=4
3 3
4# TODO: srcdir!=builddir 4# TODO: srcdir!=builddir
5 5
6usage() 6usage()
7{ 7{
8 echo "usage: $self --destdir=[destination installation directory]" 8 echo "usage: $self --destdir=[destination installation directory]"
9 echo "usage: $self [destination installation directory]" 9 echo "usage: $self [destination installation directory]"
10 exit 1 10 exit 1
11} 11}
12 12
13self=mkipkg 13self=mkipkg
14destdir= 14destdir=
15strip=strip 15strip=strip
16control= 16control=
17builddir= 17builddir=
18srcdir= 18srcdir=
19prefix= 19prefix=
20preinst= 20preinst=
21postinst= 21postinst=
22prerm= 22prerm=
23postrm= 23postrm=
24mkfsjffs2= 24mkfsjffs2=
25ipkgbuild=ipkg-build 25ipkgbuild=ipkg-build
26buildversion= 26buildversion=
27subst= 27subst=
28user=root 28user=root
29group=root 29group=root
30filesubst= 30filesubst=
31 31
32oldpwd= 32oldpwd=
33 33
34for option 34for option
35do 35do
36 case "$option" in 36 case "$option" in
37 -*=*) 37 -*=*)
38 arg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` 38 arg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'`
39 ;; 39 ;;
40 esac 40 esac
41 41
42 case "$option" in 42 case "$option" in
43 --destdir=*) 43 --destdir=*)
44 destdir=$arg 44 destdir=$arg
45 ;; 45 ;;
46 --strip=*) 46 --strip=*)
47 strip=$arg 47 strip=$arg
48 ;; 48 ;;
49 --control=*) 49 --control=*)
50 control=$arg 50 control=$arg
51 ;; 51 ;;
52 --preinst=*) 52 --preinst=*)
53 preinst=$arg 53 preinst=$arg
54 ;; 54 ;;
55 --postinst=*) 55 --postinst=*)
56 postinst=$arg 56 postinst=$arg
57 ;; 57 ;;
58 --prerm=*) 58 --prerm=*)
59 prerm=$arg 59 prerm=$arg
60 ;; 60 ;;
61 --postrm=*) 61 --postrm=*)
62 postrm=$arg 62 postrm=$arg
63 ;; 63 ;;
64 --builddir=*) 64 --builddir=*)
65 builddir=$arg 65 builddir=$arg
66 ;; 66 ;;
67 --srcdir=*) 67 --srcdir=*)
68 srcdir=$arg 68 srcdir=$arg
69 ;; 69 ;;
70 --prefix=*) 70 --prefix=*)
71 prefix=$arg 71 prefix=$arg
72 ;; 72 ;;
73 --mkfsjffs2=*) 73 --mkfsjffs2=*)
74 mkfsjffs2=$arg 74 mkfsjffs2=$arg
75 ;; 75 ;;
76 --ipkgbuild=*) 76 --ipkgbuild=*)
77 ipkgbuild=$arg 77 ipkgbuild=$arg
78 ;; 78 ;;
79 --buildversion=*) 79 --buildversion=*)
80 buildversion=$arg 80 buildversion=$arg
81 ;; 81 ;;
82 --subst=*) 82 --subst=*)
83 subst=$arg 83 subst=$arg
84 ;; 84 ;;
85 --user=*) 85 --user=*)
86 user=$arg 86 user=$arg
87 ;; 87 ;;
88 --group=*) 88 --group=*)
89 group=$arg 89 group=$arg
90 ;; 90 ;;
91 --filesubst=*) 91 --filesubst=*)
92 filesubst=$arg 92 filesubst=$arg
93 ;; 93 ;;
94 --classic) 94 --classic)
95 classic=-c 95 classic=-c
96 ;; 96 ;;
97 -*) 97 -*)
98 usage 98 usage
99 ;; 99 ;;
100 *) 100 *)
101 destdir=$option 101 destdir=$option
102 ;; 102 ;;
103 esac 103 esac
104done 104done
105 105
106if [ -z "$control" ]; then 106if [ -z "$control" ]; then
107 control=$destdir/CONTROL/control 107 control=$destdir/CONTROL/control
108fi 108fi
109if [ -z "$prerm" ]; then 109if [ -z "$prerm" ]; then
110 prerm=$destdir/CONTROL/prerm 110 prerm=$destdir/CONTROL/prerm
111fi 111fi
112if [ -z "$postrm" ]; then 112if [ -z "$postrm" ]; then
113 postrm=$destdir/CONTROL/postrm 113 postrm=$destdir/CONTROL/postrm
114fi 114fi
115if [ -z "$preinst" ]; then 115if [ -z "$preinst" ]; then
116 preinst=$destdir/CONTROL/preinst 116 preinst=$destdir/CONTROL/preinst
117fi 117fi
118if [ -z "$postinst" ]; then 118if [ -z "$postinst" ]; then
119 postinst=$destdir/CONTROL/postinst 119 postinst=$destdir/CONTROL/postinst
120fi 120fi
121 121
122# remove leading slash from prefix (to fix globbing) 122# remove leading slash from prefix (to fix globbing)
123if [ -n "$prefix" ]; then 123if [ -n "$prefix" ]; then
124 prefix=`echo $prefix | sed -e "s,/\(.*\),\\1,"` 124 prefix=`echo $prefix | sed -e "s,/\(.*\),\\1,"`
125fi 125fi
126 126
127if [ -z "$destdir" ]; then 127if [ -z "$destdir" ]; then
128 usage 128 usage
129fi 129fi
130 130
131if [ ! -r $control ]; then 131if [ ! -r $control ]; then
132 echo "$self: cannot find $control, exiting..." 132 echo "$self: cannot find $control, exiting..."
133 exit 1 133 exit 1
134fi 134fi
135 135
136if [ -z "`which $ipkgbuild 2>/dev/null`" ]; then 136if [ -z "`which $ipkgbuild 2>/dev/null`" ]; then
137 echo "$self: cannot find ipkg-build, exiting..." 137 echo "$self: cannot find ipkg-build, exiting..."
138 exit 1 138 exit 1
139fi 139fi
140 140
141findFile() 141findFile()
142{ 142{
143 local path= 143 local path=
144 if [ $# = 1 ]; then 144 if [ $# = 1 ]; then
145 find $1 -type f -o -type b -o -type c -o -type l 145 find $1 -type f -o -type b -o -type c -o -type l
146 find $1 -type d -a -empty 146 find $1 -type d -a -empty
147 else 147 else
148 find . -type f -o -type b -o -type c -o -type l | \ 148 find . -type f -o -type b -o -type c -o -type l | \
149 sed -e "s,\./\(.*\),\\1,g" 149 sed -e "s,\./\(.*\),\\1,g"
150 find . -type d -a -empty 150 find . -type d -a -empty
151 fi 151 fi
152} 152}
153 153
154_pushd() { oldpwd=`pwd`; cd $1; } 154_pushd() { oldpwd=`pwd`; cd $1; }
155_popd() { cd $oldpwd; } 155_popd() { cd $oldpwd; }
156 156
157setVar() 157setVar()
158{ 158{
159 eval "$1='$2'" 159 eval "$1='$2'"
160} 160}
161 161
162expandMaskToList() 162expandMaskToList()
163{ 163{
164 local _list=`echo $1` 164 local _list=`echo $1`
165 local _tmpFileList= 165 local _tmpFileList=
166 for f in $_list; do 166 for f in $_list; do
167 if [ -d $f ]; then 167 if [ -d $f ]; then
168 f="`findFile $f`" 168 f="`findFile $f`"
169 fi 169 fi
170 _tmpFileList="`eval echo $f` $_tmpFileList" 170 _tmpFileList="`eval echo $f` $_tmpFileList"
171 done 171 done
172 setVar $2 "$_tmpFileList" 172 setVar $2 "$_tmpFileList"
173} 173}
174 174
175createFileList() 175createFileList()
176{ 176{
177 local excludeMask 177 local excludeMask
178 local includeMask 178 local includeMask
179 local includemaskpresent=0 179 local includemaskpresent=0
180 local excludemaskpresent=0 180 local excludemaskpresent=0
181 181
182 if (cat $1|grep -q ^FileExcludeMask); then 182 if (grep -q ^FileExcludeMask $1); then
183 excludemaskpresent=1 183 excludemaskpresent=1
184 excludeMask=$(eval echo '"'$(sed -n -e "s,^FileExcludeMask: *,,p" $1)'"') 184 excludeMask=$(eval echo '"'$(sed -n -e "s,^FileExcludeMask: *,,p" $1)'"')
185 fi 185 fi
186 if (cat $1|grep -q ^FileIncludeMask); then 186 if (grep -q ^FileIncludeMask $1); then
187 includemaskpresent=1 187 includemaskpresent=1
188 includeMask=$(eval echo '"'$(sed -n -e "s,^FileIncludeMask: *,,p" $1)'"') 188 includeMask=$(eval echo '"'$(sed -n -e "s,^FileIncludeMask: *,,p" $1)'"')
189 else 189 else
190 if (cat $1|grep -q ^Files:); then 190 if (grep -q ^Files: $1); then
191 includemaskpresent=1 191 includemaskpresent=1
192 includeMask=$(eval echo '"'$(sed -n -e "s,^Files: *,,p" $1)'"') 192 includeMask=$(eval echo '"'$(sed -n -e "s,^Files: *,,p" $1)'"')
193 fi 193 fi
194 fi 194 fi
195 195
196 _pushd $destdir 196 _pushd $destdir
197 197
198 excludeMask="$excludeMask CONTROL/* usr/share/*" 198 declare -a excludeMaskArray
199 excludeMaskArray=( $excludeMask )
200 excludeMaskArray=( "${excludeMaskArray[@]}" "CONTROL/*" "usr/share/*" )
199 201
200 if [ $includemaskpresent != 1 ]; then 202 if [ $includemaskpresent != 1 ]; then
201 includeMask="." 203 includeMask="."
202 fi 204 fi
203 205
204 if [ -z "$includeMask" ]; then 206 if [ -z "$includeMask" ]; then
205 setVar $2 "" 207 setVar $2 ""
206 _popd 208 _popd
207 return 0 209 return 0
208 fi 210 fi
209 211
210 expandMaskToList "$includeMask" _fileList 212 expandMaskToList "$includeMask" _fileList
211 213
212 _excludeList= 214 excludeMaskArray=( "${excludeMaskArray[@]}" "*/CVS*" "*/SCCS*" )
213 if [ -n "$excludeMask" ]; then
214 expandMaskToList "$excludeMask" _excludeList
215 _excludeList="$_excludeList `find -name \*CVS\* -o -name \*SCCS\*`"
216 fi
217 215
218 local realFileList= 216 local realFileList=
219 local missing=0 217 local missing=0
220 for file in $_fileList; do 218 for file in $_fileList; do
221 local containedInList=0 219 local containedInList=0
222 for i in $_excludeList; do 220 for i in "${excludeMaskArray[@]}"; do
223 if [ $file = $i ]; then 221 if [[ $file == $i ]]; then
224 containedInList=1 222 containedInList=1
223 break;
225 fi 224 fi
226 done 225 done
226
227 if [ $containedInList = 0 ]; then 227 if [ $containedInList = 0 ]; then
228 if ! [ -e $file -o -L $file ]; then 228 if ! [ -e $file -o -L $file ]; then
229 echo "$self: $file not found" 229 echo "$self: $file not found"
230 missing=1 230 missing=1
231 fi 231 fi
232 realFileList=$file" $realFileList" 232 realFileList=$file" $realFileList"
233 fi 233 fi
234 done 234 done
235 235
236 _popd 236 _popd
237 237
238 if [ $missing = 1 ]; then 238 if [ $missing = 1 ]; then
239 return 1 239 return 1
240 fi 240 fi
241 241
242 setVar $2 "$realFileList" 242 setVar $2 "$realFileList"
243} 243}
244 244
245stripFile() 245stripFile()
246{ 246{
247 if [ -f $1 -a -x $1 ]; then 247 if [ -f $1 -a -x $1 ]; then
248 $strip --strip-all $1 248 $strip --strip-all $1
249 fi 249 fi
250} 250}
251 251
252substFile() 252substFile()
253{ 253{
254 local oldfile=$1 254 local oldfile=$1
255 255
256 if [ ! -e $2 ]; then return 1; fi 256 if [ ! -e $2 ]; then return 1; fi
257 257
258 if [ -e $oldfile -o -L $oldfile ]; then 258 if [ -e $oldfile -o -L $oldfile ]; then
259 newfile=`echo $oldfile|sed -f $2|sed -e's,^/,,g'` 259 newfile=`echo $oldfile|sed -f $2|sed -e's,^/,,g'`
260 olddir=`dirname $oldfile` 260 olddir=`dirname $oldfile`
261 base=`basename $oldfile` 261 base=`basename $oldfile`
262 newdir=`dirname $newfile` 262 newdir=`dirname $newfile`
263 263
264# echo >&2 moving $oldfile to $newfile 264# echo >&2 moving $oldfile to $newfile
265 265
266 if [ "$newdir" = "$olddir" ]; then 266 if [ "$newdir" = "$olddir" ]; then
267 return 0 267 return 0
268 fi 268 fi
269 269
270 mkdir -p $newdir 270 mkdir -p $newdir
271 mv $olddir/$base $newfile 271 mv $olddir/$base $newfile
272 rmdir -p $olddir 2>/dev/null 272 rmdir -p $olddir 2>/dev/null
273 fi 273 fi
274} 274}
275 275
276stripFiles() 276stripFiles()
277{ 277{
278 for f in $1; do 278 for f in $1; do
279 stripFile ./$f 279 stripFile ./$f
280 done 280 done
281} 281}
282 282
283substFiles() 283substFiles()
284{ 284{
285 for f in $1; do 285 for f in $1; do
286 substFile ./$f 286 substFile ./$f
287 done 287 done
288} 288}
289 289
290substAndStripFiles() 290substAndStripFiles()
291{ 291{
292 for f in $1; do 292 for f in $1; do
293 stripFile ./$f 293 stripFile ./$f
294 substFile ./$f $2 294 substFile ./$f $2
295 done 295 done
296} 296}
297 297
298installScript() 298installScript()
299{ 299{
300 if [ -n "$1" -a -f "$1" ]; then 300 if [ -n "$1" -a -f "$1" ]; then
301 destfile=`basename $1` 301 destfile=`basename $1`
302 filetype=`echo $destfile|cut -d. -f2` 302 filetype=`echo $destfile|cut -d. -f2`
303 if [ -n "$filetype" ]; then destfile=$filetype; fi 303 if [ -n "$filetype" ]; then destfile=$filetype; fi
304 if [ -n "$subst" ]; then 304 if [ -n "$subst" ]; then
305 sed -f $subst < $1 > $ctrldir/$destfile 305 sed -f $subst < $1 > $ctrldir/$destfile
306 else 306 else
307 cat $1 > $ctrldir/$destfile 307 cat $1 > $ctrldir/$destfile
308 fi 308 fi
309 chmod +x $ctrldir/$destfile 309 chmod +x $ctrldir/$destfile
310 fi 310 fi
311} 311}
312 312
313tempDir=/tmp/`basename $self`.$$ 313tempDir=/tmp/`basename $self`.$$
314mkdir -p $tempDir 314mkdir -p $tempDir
315if [ $? != 0 ]; then 315if [ $? != 0 ]; then
316 echo "$self: cannot create $tempDir, exiting..." 316 echo "$self: cannot create $tempDir, exiting..."
317 rm -rf $tempDir 317 rm -rf $tempDir
318 exit 1 318 exit 1
319fi 319fi
320 320
321ctrldir=$tempDir/CONTROL 321ctrldir=$tempDir/CONTROL
322 322
323mkdir -p $ctrldir 323mkdir -p $ctrldir
324 324
325if [ ! -e $subst ] || [ -z "$subst" ]; then 325if [ ! -e $subst ] || [ -z "$subst" ]; then
326 cat $control > $ctrldir/control.new 326 cat $control > $ctrldir/control.new
327else 327else
328 sed -f $subst < $control > $ctrldir/control.new 328 sed -f $subst < $control > $ctrldir/control.new
329fi 329fi
330 330
331createFileList $ctrldir/control.new ipkgFileList 331createFileList $ctrldir/control.new ipkgFileList
332 332
333if [ "$?" != "0" ]; then 333if [ "$?" != "0" ]; then
334 echo "$self: ERROR: missing files, not building $control" 334 echo "$self: ERROR: missing files, not building $control"
335 rm -rf $tempDir 335 rm -rf $tempDir
336 exit 1 336 exit 1
337fi 337fi
338 338
339 339
340cat $ctrldir/control.new | egrep -v '^(Files|FileExcludeMask|FileIncludeMask):' > $ctrldir/control 340cat $ctrldir/control.new | egrep -v '^(Files|FileExcludeMask|FileIncludeMask):' > $ctrldir/control
341rm -f $ctrldir/control.new 341rm -f $ctrldir/control.new
342 342
343( cd $destdir && tar -cf - $ipkgFileList 2>/dev/null ) | ( cd $tempDir && tar -xf - 2>/dev/null ) 343( cd $destdir && tar -cf - $ipkgFileList 2>/dev/null ) | ( cd $tempDir && tar -xf - 2>/dev/null )
344 344
345if [ -z "$filesubst" ]; then 345if [ -z "$filesubst" ]; then
346 ( cd $tempDir && stripFiles "$ipkgFileList" ) 346 ( cd $tempDir && stripFiles "$ipkgFileList" )
347else 347else
348 if ! (echo $filesubst|grep -q '^/'); then 348 if ! (echo $filesubst|grep -q '^/'); then
349 filesubst="$oldpwd/$filesubst" 349 filesubst="$oldpwd/$filesubst"
350 fi 350 fi
351 ( cd $tempDir && substAndStripFiles "$ipkgFileList" $filesubst ) 351 ( cd $tempDir && substAndStripFiles "$ipkgFileList" $filesubst )
352fi 352fi
353 353
354# removing CVS directories 354# removing CVS directories
355find $tempDir -name CVS -a -type d -print0 | xargs -0 rm -rf 355find $tempDir -name CVS -a -type d -print0 | xargs -0 rm -rf
356 356
357path="`echo "$PATH" | sed -e "s/\:/ /g"`" 357path="`echo "$PATH" | sed -e "s/\:/ /g"`"
358if [ -z "$mkfsjffs2" ]; then 358if [ -z "$mkfsjffs2" ]; then
359 for i in $path; do 359 for i in $path; do
360 if [ -x "$i/mkfs.jffs2" ]; then 360 if [ -x "$i/mkfs.jffs2" ]; then
361 mkfsjffs2="$i/mkfs.jffs2" 361 mkfsjffs2="$i/mkfs.jffs2"
362 break 362 break
363 fi 363 fi
364 done 364 done
365fi 365fi
366 366
367if [ -z "$mkfsjffs2" ]; then 367if [ -z "$mkfsjffs2" ]; then
368 echo "$self: WARNING: no mkjfs.jffs2 found in path. Falling back to using du" 368 echo "$self: WARNING: no mkjfs.jffs2 found in path. Falling back to using du"
369 echo "for size calculation. mkfs.jffs2 is recommended for size calculation" 369 echo "for size calculation. mkfs.jffs2 is recommended for size calculation"
370 echo "as it calculates the real package size on the compressed file system," 370 echo "as it calculates the real package size on the compressed file system,"
371 echo "in contrast to du calculating the uncompressed size!" 371 echo "in contrast to du calculating the uncompressed size!"
372 buildsize=`du -h -s $tempDir | awk '{print $1}'` 372 buildsize=`du -h -s $tempDir | awk '{print $1}'`
373else 373else
374 buildsize=`$mkfsjffs2 -r $tempDir | wc -c` 374 buildsize=`$mkfsjffs2 -r $tempDir | wc -c`
375fi 375fi
376 376
377if [ "$buildsize" != "0" ]; then 377if [ "$buildsize" != "0" ]; then
378 echo "Installed-Size: $buildsize" >> $ctrldir/control 378 echo "Installed-Size: $buildsize" >> $ctrldir/control
379fi 379fi
380 380
381installScript $preinst 381installScript $preinst
382installScript $postinst 382installScript $postinst
383installScript $prerm 383installScript $prerm
384installScript $posrm 384installScript $posrm
385 385
386$ipkgbuild $classic -o $user -g $group $tempDir 386$ipkgbuild $classic -o $user -g $group $tempDir
387 387
388rm -rf $tempDir 388rm -rf $tempDir
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 @@
1#!/bin/sh
2
3# PURPOSE :
4#
5# this script converts a non-threaded control file to a threaded one
6# by extending appropriate names with -mt as extension
7#
8# eg abc.control becoms abc-mt.control
9#
10
11#
12# make sure that the depends expression has enough spaces
13# expression can contian : , ( ) || &&
14#
15tokenize() {
16 sed "s/,/ & /g" | sed "s/)/ & /g" | sed "s/(/ & /g" | sed "s/|/ & /g" | sed "s/&/ & /g"
17}
18
19#
20# function converts package name to threaded equivalend IF the
21# package file HAS a threaded version
22#
23findthreadedequiv() {
24 local isin i
25 for i in $*
26 do
27 isin=`grep "^$i\$" "$ALLTHREADEDPKGSFILE"`
28 if [ -z "$isin" ]
29 then
30 # no threaded package
31 echo -n "$i "
32 else
33 # threaded package
34 echo -n "${isin}-mt "
35 fi
36 done
37 echo
38}
39
40#
41# signature of binary files
42# currently obsolete
43#
44# ISBINARY="*ELF*LSB*"
45
46usage() {
47 echo "Usage : tothreaded <controlfile> <ALLPackages file>"
48 exit 2
49}
50
51. scripts/SpecialMTFiles
52
53#
54# get the name of the controlfile to check for threading
55#
56if [ -z "$1" ]
57then
58 usage
59fi
60controlfile=$1
61shift
62
63case $controlfile in
64 *-mt.control)
65 #already threaded
66 echo $controlfile
67 exit 0;
68 ;;
69esac
70
71#
72# file containing list of all known threaded packages
73#
74if [ -z "$1" ]
75then
76 usage
77fi
78ALLTHREADEDPKGSFILE=$1
79shift
80
81#
82# strip out the name of the package
83#
84packagename=${controlfile##*/} # path
85packagename=${packagename%.control} # extension
86
87#
88# generate new control file
89#
90newcontrolfile=${controlfile/\.control/-mt\.control}
91
92#
93# read all lines in original control file
94#
95while read line
96do
97 case $line in
98 # convert some files to threaded equivalent
99 "Files:"*)
100 files=${line#Files:}
101 # thread-converted files
102 T_files=`ConvertSpecialFiles "$files"`
103 echo "Files: $T_files"
104 ;;
105 "Package: "*)
106 T_package=`findthreadedequiv ${line#Package: }`
107 echo "Package: ${T_package}"
108 ;;
109 "Depends: "*)
110 depends=`echo "${line#Depends: }" | tokenize`
111 T_depends=`findthreadedequiv ${depends}`
112 echo "Depends: $T_depends"
113 ;;
114 "Provides: "*)
115 T_provides=`findthreadedequiv ${line#Provides: }`
116 echo "Provides: $T_provides"
117 ;;
118 "Conflicts: "*)
119 conflicts=`echo "${line#Conflicts: }" | tokenize`
120 T_conflicts=`findthreadedequiv ${conflicts}`
121 echo "Conflicts: $T_conflicts"
122 ;;
123 *":"*)
124 echo "$line"
125 ;;
126 *) # al other lines
127 echo " $line"
128 ;;
129 esac
130done < $controlfile > $newcontrolfile
131
132echo $newcontrolfile