summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/ipkg-build18
1 files changed, 10 insertions, 8 deletions
diff --git a/scripts/ipkg-build b/scripts/ipkg-build
index 0533048..c6af056 100755
--- a/scripts/ipkg-build
+++ b/scripts/ipkg-build
@@ -27,173 +27,175 @@ pkg_appears_sane() {
27 local owd=`pwd` 27 local owd=`pwd`
28 cd $pkg_dir 28 cd $pkg_dir
29 29
30 PKG_ERROR=0 30 PKG_ERROR=0
31 31
32 tilde_files=`find . -name '*~'` 32 tilde_files=`find . -name '*~'`
33 if [ -n "$tilde_files" ]; then 33 if [ -n "$tilde_files" ]; then
34 echo "*** Warning: The following files have names ending in '~'. 34 echo "*** Warning: The following files have names ending in '~'.
35You probably want to remove them: " >&2 35You probably want to remove them: " >&2
36 ls -ld $tilde_files 36 ls -ld $tilde_files
37 echo >&2 37 echo >&2
38 fi 38 fi
39 39
40 large_uid_files=`find . -uid +99` 40 large_uid_files=`find . -uid +99`
41 41
42 if [ "$ogargs" = "" ] && [ -n "$large_uid_files" ]; then 42 if [ "$ogargs" = "" ] && [ -n "$large_uid_files" ]; then
43 echo "*** Warning: The following files have a UID greater than 99. 43 echo "*** Warning: The following files have a UID greater than 99.
44You probably want to chown these to a system user: " >&2 44You probably want to chown these to a system user: " >&2
45 ls -ld $large_uid_files 45 ls -ld $large_uid_files
46 echo >&2 46 echo >&2
47 fi 47 fi
48 48
49 49
50 if [ ! -f "$CONTROL/control" ]; then 50 if [ ! -f "$CONTROL/control" ]; then
51 echo "*** Error: Control file $pkg_dir/$CONTROL/control not found." >&2 51 echo "*** Error: Control file $pkg_dir/$CONTROL/control not found." >&2
52 cd $owd 52 cd $owd
53 return 1 53 return 1
54 fi 54 fi
55 55
56 pkg=`required_field Package` 56 pkg=`required_field Package`
57 [ "$?" -ne 0 ] && PKG_ERROR=1 57 [ "$?" -ne 0 ] && PKG_ERROR=1
58 58
59 version=`required_field Version | sed 's/.*://;'` 59 version=`required_field Version | sed 's/Version://; s/^.://g;'`
60 [ "$?" -ne 0 ] && PKG_ERROR=1 60 [ "$?" -ne 0 ] && PKG_ERROR=1
61 61
62 arch=`required_field Architecture` 62 arch=`required_field Architecture`
63 [ "$?" -ne 0 ] && PKG_ERROR=1 63 [ "$?" -ne 0 ] && PKG_ERROR=1
64 64
65 required_field Maintainer >/dev/null 65 required_field Maintainer >/dev/null
66 [ "$?" -ne 0 ] && PKG_ERROR=1 66 [ "$?" -ne 0 ] && PKG_ERROR=1
67 67
68 required_field Description >/dev/null 68 required_field Description >/dev/null
69 [ "$?" -ne 0 ] && PKG_ERROR=1 69 [ "$?" -ne 0 ] && PKG_ERROR=1
70 70
71 section=`required_field Section` 71 section=`required_field Section`
72 [ "$?" -ne 0 ] && PKG_ERROR=1 72 [ "$?" -ne 0 ] && PKG_ERROR=1
73 if [ -z "$section" ]; then 73 if [ -z "$section" ]; then
74 echo "The Section field should have one of the following values:" >&2 74 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 75 echo "admin, base, comm, editors, extras, games, graphics, kernel, libs, misc, net, text, web, x11" >&2
76 fi 76 fi
77 77
78 priority=`required_field Priority` 78 priority=`required_field Priority`
79 [ "$?" -ne 0 ] && PKG_ERROR=1 79 [ "$?" -ne 0 ] && PKG_ERROR=1
80 if [ -z "$priority" ]; then 80 if [ -z "$priority" ]; then
81 echo "The Priority field should have one of the following values:" >&2 81 echo "The Priority field should have one of the following values:" >&2
82 echo "required, important, standard, optional, extra." >&2 82 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 83 echo "If you don't know which priority value you should be using, then use \`optional'" >&2
84 fi 84 fi
85 85
86 if echo $pkg | grep '[^a-z0-9.+-]'; then 86 if echo $pkg | grep '[^a-z0-9.+-]'; then
87 echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2 87 echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2
88 PKG_ERROR=1; 88 PKG_ERROR=1;
89 fi 89 fi
90 90
91 local bad_fields=`sed -ne 's/^\([^[:space:]][^:[:space:]]\+[[:space:]]\+\)[^:].*/\1/p' < $CONTROL/control | sed -e 's/\\n//'` 91 local bad_fields=`sed -ne 's/^\([^[:space:]][^:[:space:]]\+[[:space:]]\+\)[^:].*/\1/p' < $CONTROL/control | sed -e 's/\\n//'`
92 if [ -n "$bad_fields" ]; then 92 if [ -n "$bad_fields" ]; then
93 bad_fields=`echo $bad_fields` 93 bad_fields=`echo $bad_fields`
94 echo "*** Error: The following fields in $CONTROL/control are missing a ':'" >&2 94 echo "*** Error: The following fields in $CONTROL/control are missing a ':'" >&2
95 echo "$bad_fields" >&2 95 echo "$bad_fields" >&2
96 echo "ipkg-build: This may be due to a missing initial space for a multi-line field value" >&2 96 echo "ipkg-build: This may be due to a missing initial space for a multi-line field value" >&2
97 PKG_ERROR=1 97 PKG_ERROR=1
98 fi 98 fi
99 99
100 for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do 100 for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do
101 if [ -f $script -a ! -x $script ]; then 101 if [ -f $script -a ! -x $script ]; then
102 echo "*** Error: package script $script is not executable" >&2 102 echo "*** Error: package script $script is not executable" >&2
103 PKG_ERROR=1 103 PKG_ERROR=1
104 fi 104 fi
105 done 105 done
106 106
107 if [ -f $CONTROL/conffiles ]; then 107 if [ -f $CONTROL/conffiles ]; then
108 for cf in `cat $CONTROL/conffiles`; do 108 for cf in `cat $CONTROL/conffiles`; do
109 if [ ! -f ./$cf ]; then 109 if [ ! -f ./$cf ]; then
110 echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2 110 echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2
111 PKG_ERROR=1 111 PKG_ERROR=1
112 fi 112 fi
113 done 113 done
114 fi 114 fi
115 115
116 cd $owd 116 cd $owd
117 return $PKG_ERROR 117 return $PKG_ERROR
118} 118}
119 119
120### 120###
121# ipkg-build "main" 121# ipkg-build "main"
122### 122###
123ogargs="" 123ogargs=""
124usage="Usage: $0 [-o owner] [-g group] [-c] <pkg_directory> [<destination_directory>]" 124outer=ar
125while getopts ":o:g:c" opt; do 125usage="Usage: $0 [-c] [-o owner] [-g group] <pkg_directory> [<destination_directory>]"
126while getopts "cg:o:" opt; do
126 case $opt in 127 case $opt in
127 o ) owner=$OPTARG 128 o ) owner=$OPTARG
128 ogargs="--owner=$owner" 129 ogargs="--owner=$owner"
129 ;; 130 ;;
130 g ) group=$OPTARG 131 g ) group=$OPTARG
131 ogargs="$ogargs --group=$group" 132 ogargs="$ogargs --group=$group"
132 ;; 133 ;;
133 c ) classic=1 134 c ) outer=tar
134 ;; 135 ;;
135 \? ) echo $usage >&2 136 \? ) echo $usage >&2
136 esac 137 esac
137done 138done
138 139
139 140
140shift $(($OPTIND - 1)) 141shift $(($OPTIND - 1))
141 142
142# continue on to process additional arguments 143# continue on to process additional arguments
143 144
144case $# in 145case $# in
1451) 1461)
146 dest_dir=. 147 dest_dir=.
147 ;; 148 ;;
1482) 1492)
149 dest_dir=$2 150 dest_dir=$2
150 ;; 151 ;;
151*) 152*)
152 echo echo $usage >&2 153 echo echo $usage >&2
153 exit 1 154 exit 1
154 ;; 155 ;;
155esac 156esac
156 157
157pkg_dir=$1 158pkg_dir=$1
158 159
159if [ ! -d $pkg_dir ]; then 160if [ ! -d $pkg_dir ]; then
160 echo "*** Error: Directory $pkg_dir does not exist" >&2 161 echo "*** Error: Directory $pkg_dir does not exist" >&2
161 exit 1 162 exit 1
162fi 163fi
163 164
164# CONTROL is second so that it takes precedence 165# CONTROL is second so that it takes precedence
165CONTROL= 166CONTROL=
166[ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN 167[ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN
167[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL 168[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL
168if [ -z "$CONTROL" ]; then 169if [ -z "$CONTROL" ]; then
169 echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2 170 echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2
170 exit 1 171 exit 1
171fi 172fi
172 173
173if ! pkg_appears_sane $pkg_dir; then 174if ! pkg_appears_sane $pkg_dir; then
174 echo >&2 175 echo >&2
175 echo "ipkg-build: Please fix the above errors and try again." >&2 176 echo "ipkg-build: Please fix the above errors and try again." >&2
176 exit 1 177 exit 1
177fi 178fi
178 179
179tmp_dir=$dest_dir/IPKG_BUILD.$$ 180tmp_dir=$dest_dir/IPKG_BUILD.$$
180mkdir $tmp_dir 181mkdir $tmp_dir
181 182
182tar $ogargs -C $pkg_dir -czf $tmp_dir/data.tar.gz . --exclude=$CONTROL 183tar $ogargs -C $pkg_dir -czf $tmp_dir/data.tar.gz . --exclude=$CONTROL
183tar $ogargs -C $pkg_dir/$CONTROL -czf $tmp_dir/control.tar.gz . 184tar $ogargs -C $pkg_dir/$CONTROL -czf $tmp_dir/control.tar.gz .
184 185
185echo "2.0" > $tmp_dir/debian-binary 186echo "2.0" > $tmp_dir/debian-binary
186 187
187pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk 188pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
188here_dir=$PWD 189here_dir=$PWD
190## tar -C $tmp_dir -czf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
189rm -f $pkg_file 191rm -f $pkg_file
190if [ -n "$classic" ]; then 192if [ "$outer" = "ar" ] ; then
191 tar -C $tmp_dir -czf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz 193 cd $tmp_dir ; ar crf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
192else 194else
193 cd $tmp_dir ; ar crf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz 195 cd $tmp_dir ; tar -zcf $here_dir/$pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
194fi 196fi
195cd $here_dir 197cd $here_dir
196rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz 198rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
197rmdir $tmp_dir 199rmdir $tmp_dir
198 200
199echo "Packaged contents of $pkg_dir into $pkg_file" 201echo "Packaged contents of $pkg_dir into $pkg_file"