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) (unidiff)
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 @@
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,47 +1,82 @@
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
@@ -116,82 +151,88 @@ You probably want to chown these to a system user: " >&2
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
diff --git a/scripts/mkipkg b/scripts/mkipkg
index 43bd3a3..a336371 100755
--- a/scripts/mkipkg
+++ b/scripts/mkipkg
@@ -158,93 +158,93 @@ setVar()
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}
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