summaryrefslogtreecommitdiff
authorkergoth <kergoth>2003-04-22 20:12:04 (UTC)
committer kergoth <kergoth>2003-04-22 20:12:04 (UTC)
commitccec87cf3e7192c0a3987aa3486668e89b1662a4 (patch) (unidiff)
tree2d1135ed639410fe1a75486bfdeae8083e1682a2
parent2134672b0a731415bfd50f2ff22de59b78709e5c (diff)
downloadopie-ccec87cf3e7192c0a3987aa3486668e89b1662a4.zip
opie-ccec87cf3e7192c0a3987aa3486668e89b1662a4.tar.gz
opie-ccec87cf3e7192c0a3987aa3486668e89b1662a4.tar.bz2
you can now 'make ipks' :)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--Makefile26
-rw-r--r--Vars.make63
-rwxr-xr-xscripts/mkipkg371
3 files changed, 451 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 9169645..10df035 100644
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,8 @@
1#!/usr/bin/make -f 1#!/usr/bin/make -f
2ifndef QTDIR
3$(error QTDIR not set)
4endif
5 2
6export OPIEDIR:=$(shell pwd) 3export TOPDIR:=$(shell pwd)
7export TOPDIR:=$(OPIEDIR)
8export QMAKE:=$(OPIEDIR)/qmake/qmake
9 4
10export QMAKESPECSDIR=$(OPIEDIR)/mkspecs 5include $(TOPDIR)/Vars.make
11 6
12noconfig_targets := xconfig menuconfig config oldconfig randconfig \ 7noconfig_targets := xconfig menuconfig config oldconfig randconfig \
13 defconfig allyesconfig allnoconfig allmodconfig \ 8 defconfig allyesconfig allnoconfig allmodconfig \
@@ -26,6 +21,18 @@ configs += $(TOPDIR)/core/applets/config.in $(TOPDIR)/core/apps/config.in $(TOPD
26 21
27all : $(TOPDIR)/.config 22all : $(TOPDIR)/.config
28 23
24STRIP=arm-linux-strip
25
26ipks: $(OPIEDIR)/scripts/subst $(OPIEDIR)/scripts/filesubst FORCE
27 @find $(OPIEDIR)/ -type f -name \*.control | ( for ctrl in `cat`; do \
28 prerm=`echo $$ctrl|sed -e 's,\.control$$,.prerm,'`; \
29 preinst=`echo $$ctrl|sed -e 's,\.control$$,.preinst,'`; \
30 postrm=`echo $$ctrl|sed -e 's,\.control$$,.postrm,'`; \
31 postinst=`echo $$ctrl|sed -e 's,\.control$$,.postinst,'`; \
32 echo "Building ipk of $$ctrl"; \
33 cd $(OPIEDIR); $(OPIEDIR)/scripts/mkipkg --subst=$(OPIEDIR)/scripts/subst --filesubst=$(OPIEDIR)/scripts/filesubst --control=$$ctrl --prerm=$$prerm --preinst=$$preinst --postrm=$$postrm --postinst=$$postinst --strip=$(STRIP) $(OPIEDIR); \
34 done )
35
29$(TOPDIR)/.config : $(TOPDIR)/.depends.cfgs 36$(TOPDIR)/.config : $(TOPDIR)/.depends.cfgs
30 37
31all menuconfig xconfig oldconfig config randconfig allyesconfig allnoconfig defconfig : $(TOPDIR)/.depends.cfgs 38all menuconfig xconfig oldconfig config randconfig allyesconfig allnoconfig defconfig : $(TOPDIR)/.depends.cfgs
@@ -34,7 +41,9 @@ clean-configs :
34 @echo "Wiping generated config.in files..." 41 @echo "Wiping generated config.in files..."
35 @-rm -f $(configs) 42 @-rm -f $(configs)
36 43
37-include $(TOPDIR)/.depends.cfgs 44ifneq ($(wildcard $(TOPDIR)/.depends.cfgs),)
45 include $(TOPDIR)/.depends.cfgs
46endif
38 47
39all menuconfig xconfig oldconfig config randconfig allyesconfig allnoconfig defconfig : $(configs) 48all menuconfig xconfig oldconfig config randconfig allyesconfig allnoconfig defconfig : $(configs)
40 49
@@ -92,7 +101,6 @@ export include-config := 1
92 101
93-include $(TOPDIR)/.config 102-include $(TOPDIR)/.config
94-include $(TOPDIR)/.depends 103-include $(TOPDIR)/.depends
95
96endif 104endif
97 105
98-include $(TOPDIR)/.config.cmd 106-include $(TOPDIR)/.config.cmd
diff --git a/Vars.make b/Vars.make
new file mode 100644
index 0000000..eac5cea
--- a/dev/null
+++ b/Vars.make
@@ -0,0 +1,63 @@
1ifndef QTDIR
2$(error QTDIR not set)
3endif
4
5prefix=/opt/QtPalmtop
6
7ifeq ($(OPIEDIR),)
8 export OPIEDIR:=$(TOPDIR)
9endif
10ifeq ($(IPK_DIR),)
11 export IPK_DIR:=$(OPIEDIR)
12endif
13
14export QMAKE:=$(OPIEDIR)/qmake/qmake
15export QMAKESPECSDIR=$(OPIEDIR)/mkspecs
16
17ifeq ($(QPE_VERSION),)
18 VERSION_MAJ:=$(shell echo $$(sed -n -e 's/.*QPE_VERSION "\([0-9]*\)\..*\..*".*/\1/p' <$(OPIEDIR)/library/version.h))
19 VERSION_MIN:=$(shell echo $$(sed -n -e 's/.*QPE_VERSION ".*\.\([0-9]*\)\..*".*/\1/p' <$(OPIEDIR)/library/version.h))
20 VERSION_PAT:=$(shell echo $$(sed -n -e 's/.*QPE_VERSION ".*\..*\.\([0-9]*\).*/\1/p' <$(OPIEDIR)/library/version.h))
21 QPE_VERSION:=$(VERSION_MAJ).$(VERSION_MIN).$(VERSION_PAT)
22
23 ifeq ($(QPE_VERSION),..)
24 QPE_VERSION=0.9.3
25 endif
26endif
27export QPE_VERSION
28
29SUB_VERSION=$(shell echo $$(sed -n -e 's,.*SUB_VERSION \"\(.*\)\".*,\1,p' <$(OPIEDIR)/library/version.h))
30ifeq ($(VERSION_CVS),)
31 VERSION_CVS:=$(shell date +%Y%m%d)
32endif
33ifneq ($(filter %snapshot",$(shell cat $(OPIEDIR)/library/version.h|grep QPE_VERSION)),)
34 SUB_VERSION:=$(VERSION_CVS)
35endif
36export SUB_VERSION
37
38ifeq ($(QTE_REVISION),)
39 QTE_REVISION=4
40endif
41export QTE_REVISION
42
43export DEB_VERSION=2.0
44
45ifeq ($(QTE_BASEVERSION),)
46 ifneq ($(shell ls $(QTDIR)/include/qglobal.h 2>/dev/null),)
47 QTE_BASEVERSION:=$(shell cat $(QTDIR)/include/qglobal.h|grep '^\#define QT_VERSION'|grep -v STR|sed -e 's/\#define QT_VERSION\t*//; s/.*\([0-9]\)\([0-9]\)\([0-9]\).*/\1.\2.\3/;')
48 else
49 QTE_BASEVERSION=2.3.5
50 endif
51endif
52export QTE_BASEVERSION
53
54ifeq ($(QTE_VERSION),)
55 ifneq ($(shell ls $(QTDIR)/include/qglobal.h 2>/dev/null),)
56 QTE_VERSION:=$(shell cat $(QTDIR)/include/qglobal.h|grep '^\#define QT_VERSION_STR'|sed -e 's/\#define QT_VERSION_STR\t*//;' -e 's/.*"\([^"]*\)".*/\1/;')
57 else
58 QTE_VERSION=2.3.5
59 endif
60endif
61export QTE_VERSION
62
63export PATH:=$(OPIEDIR)/scripts:$(PATH)
diff --git a/scripts/mkipkg b/scripts/mkipkg
new file mode 100755
index 0000000..54651af
--- a/dev/null
+++ b/scripts/mkipkg
@@ -0,0 +1,371 @@
1#!/bin/sh
2# vim: et sw=4
3
4# TODO: srcdir!=builddir
5
6usage()
7{
8 echo "usage: $self --destdir=[destination installation directory]"
9 echo "usage: $self [destination installation directory]"
10 exit 1
11}
12
13self=mkipkg
14destdir=
15strip=strip
16control=
17builddir=
18srcdir=
19prefix=
20preinst=
21postinst=
22prerm=
23postrm=
24mkfsjffs2=
25ipkgbuild=ipkg-build
26buildversion=
27subst=
28user=root
29group=root
30filesubst=
31
32oldpwd=
33
34for option
35do
36 case "$option" in
37 -*=*)
38 arg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'`
39 ;;
40 esac
41
42 case "$option" in
43 --destdir=*)
44 destdir=$arg
45 ;;
46 --strip=*)
47 strip=$arg
48 ;;
49 --control=*)
50 control=$arg
51 ;;
52 --preinst=*)
53 preinst=$arg
54 ;;
55 --postinst=*)
56 postinst=$arg
57 ;;
58 --prerm=*)
59 prerm=$arg
60 ;;
61 --postrm=*)
62 postrm=$arg
63 ;;
64 --builddir=*)
65 builddir=$arg
66 ;;
67 --srcdir=*)
68 srcdir=$arg
69 ;;
70 --prefix=*)
71 prefix=$arg
72 ;;
73 --mkfsjffs2=*)
74 mkfsjffs2=$arg
75 ;;
76 --ipkgbuild=*)
77 ipkgbuild=$arg
78 ;;
79 --buildversion=*)
80 buildversion=$arg
81 ;;
82 --subst=*)
83 subst=$arg
84 ;;
85 --user=*)
86 user=$arg
87 ;;
88 --group=*)
89 group=$arg
90 ;;
91 --filesubst=*)
92 filesubst=$arg
93 ;;
94 --classic)
95 classic=-c
96 ;;
97 -*)
98 usage
99 ;;
100 *)
101 destdir=$option
102 ;;
103 esac
104done
105
106if [ -z "$control" ]; then
107 control=$destdir/CONTROL/control
108fi
109if [ -z "$prerm" ]; then
110 prerm=$destdir/CONTROL/prerm
111fi
112if [ -z "$postrm" ]; then
113 postrm=$destdir/CONTROL/postrm
114fi
115if [ -z "$preinst" ]; then
116 preinst=$destdir/CONTROL/preinst
117fi
118if [ -z "$postinst" ]; then
119 postinst=$destdir/CONTROL/postinst
120fi
121
122# remove leading slash from prefix (to fix globbing)
123if [ -n "$prefix" ]; then
124 prefix=`echo $prefix | sed -e "s,/\(.*\),\\1,"`
125fi
126
127if [ -z "$destdir" ]; then
128 usage
129fi
130
131if [ ! -r $control ]; then
132 echo "$self: cannot find $control, exiting..."
133 exit 1
134fi
135
136if [ -z "`which $ipkgbuild 2>/dev/null`" ]; then
137 echo "$self: cannot find ipkg-build, exiting..."
138 exit 1
139fi
140
141findFile()
142{
143 local path=
144 if [ $# = 1 ]; then
145 find $1 -type f -o -type b -o -type c -o -type l -o -type d
146 else
147 find . -type f -o -type b -o -type c -o -type l -o -type d | \
148 sed -e "s,\./\(.*\),\\1,g"
149 fi
150
151}
152
153_pushd() { oldpwd=`pwd`; cd $1; }
154_popd() { cd $oldpwd; }
155
156setVar()
157{
158 eval "$1='$2'"
159}
160
161expandMaskToList()
162{
163 local _list=`echo $1`
164 local _tmpFileList=
165 for f in $_list; do
166 if [ -d $f ]; then
167 find="`findFile $f`"
168 if [ -z "$find" ]; then
169 find="$f"
170 fi
171 f="$f `findFile $f`"
172 fi
173 _tmpFileList=$f" $_tmpFileList"
174 done
175 setVar $2 "$_tmpFileList"
176}
177
178createFileList()
179{
180 local excludeMask
181 local includeMask
182 if (cat $1|grep -q ^FileExcludeMask); then
183 excludemaskpresent=1
184 excludeMask=$(eval echo '"'$(sed -n -e "s,^FileExcludeMask: *,,p" $1)'"')
185 fi
186 if (cat $1|grep -q ^FileIncludeMask); then
187 includemaskpresent=1
188 includeMask=$(eval echo '"'$(sed -n -e "s,^FileIncludeMask: *,,p" $1)'"')
189 else
190 if (cat $1|grep -q ^Files:); then
191 includemaskpresent=1
192 includeMask=$(eval echo '"'$(sed -n -e "s,^Files: *,,p" $1)'"')
193 fi
194 fi
195
196 excludeMask="$excludeMask CONTROL/* usr/share/* CVS/* SCCS/*"
197
198 if [ $includemaskpresent == 1 ]; then
199 if [ -z "$includeMask" ]; then
200 setVar $2 ""
201 return 0
202 fi
203 _pushd $destdir
204 expandMaskToList "$includeMask" _fileList
205 _popd
206 else
207 _fileList=`cd $destdir && findFile`
208 fi
209
210 _excludeList=
211 if [ -n "$excludeMask" ]; then
212 _pushd $destdir
213 expandMaskToList "$excludeMask" _excludeList
214 _popd
215 fi
216
217 local realFileList=
218 local missing=0
219 for file in $_fileList; do
220 local containedInList=0
221 for i in $_excludeList; do
222 if [ $file = $i ]; then
223 containedInList=1
224 fi
225 done
226 if [ $containedInList = 0 ]; then
227 if [ ! -e $file ]; then
228# echo "$self: $file not found"
229 missing=1
230 fi
231 realFileList=$file" $realFileList"
232 fi
233 done
234
235 if [ $missing = 1 ]; then
236 return 1
237 fi
238
239 setVar $2 "$realFileList"
240}
241
242stripFile()
243{
244 if [ -f $1 -a -x $1 ]; then
245 $strip --strip-all $1
246 fi
247}
248
249substFile()
250{
251 local oldfile=$1
252
253 if [ ! -e $2 ]; then return 1; fi
254
255 if [ -e $oldfile ]; then
256 newfile=./`echo $1|sed -f $2|sed -e's,^/,,g'`
257 olddir=./`dirname $1`
258 newdir=`dirname $newfile`
259
260 if [ "$newdir" = "$olddir" ]; then
261 return 0
262 fi
263
264 mkdir -p $newdir
265 mv $1 $newfile
266 rmdir -p $olddir 2>/dev/null
267 fi
268}
269
270stripFiles()
271{
272 for f in $1; do
273 stripFile $f
274 done
275}
276
277substFiles()
278{
279 for f in $1; do
280 substFile $f
281 done
282}
283
284substAndStripFiles()
285{
286 for f in $1; do
287 stripFile $f
288 substFile $f $2
289 done
290}
291
292installScript()
293{
294 if [ -n "$1" -a -f "$1" ]; then
295 destfile=`basename $1`
296 if [ -n "$subst" ]; then
297 sed -f $subst < $1 > $ctrldir/$destfile
298 else
299 cat $1 > $ctrldir/$destfile
300 fi
301 chmod +x $ctrldir/$destfile
302 fi
303}
304
305tempDir=/tmp/`basename $self`.$$
306mkdir -p $tempDir
307if [ $? != 0 ]; then
308 echo "$self: cannot create $tempDir, exiting..."
309 exit 1
310fi
311
312cd $destdir; createFileList $control ipkgFileList
313if [ "$?" != "0" ]; then
314 echo "$self: ERROR: missing files, not building $control"
315 exit 1
316fi
317
318( cd $destdir && tar cf - $ipkgFileList 2>/dev/null ) | \
319( cd $tempDir && tar xf - 2>/dev/null )
320
321if [ -z "$filesubst" ]; then
322 ( cd $tempDir && stripFiles "$ipkgFileList" )
323else
324 if ! (echo $filesubst|grep -q '^/'); then
325 filesubst="$oldpwd/$filesubst"
326 fi
327 ( cd $tempDir && substAndStripFiles "$ipkgFileList" $filesubst )
328fi
329
330path="`echo "$PATH" | sed -e "s/\:/ /g"`"
331if [ -z "$mkfsjffs2" ]; then
332 for i in $path; do
333 if [ -x "$i/mkfs.jffs2" ]; then
334 mkfsjffs2="$i/mkfs.jffs2"
335 break
336 fi
337 done
338fi
339
340if [ -z "$mkfsjffs2" ]; then
341 echo "$self: WARNING: no mkjfs.jffs2 found in path. Falling back to using du"
342 echo "for size calculation. mkfs.jffs2 is recommended for size calculation"
343 echo "as it calculates the real package size on the compressed file system,"
344 echo "in contrast to du calculating the uncompressed size!"
345 buildsize=`du -h -s $tempDir | awk '{print $1}'`
346else
347 buildsize=`$mkfsjffs2 -r $tempDir | wc -c`
348fi
349
350ctrldir=$tempDir/CONTROL
351
352mkdir -p $ctrldir
353
354if [ ! -e $subst ] || [ -z "$subst" ]; then
355 cat $control | egrep -v '^(FileIncludeMask|FileExcludeMask|Files):' > $ctrldir/control
356else
357 sed -f $subst < $control | egrep -v '^(FileIncludeMask|FileExcludeMask|Files):' > $ctrldir/control
358fi
359
360if [ "$buildsize" != "0" ]; then
361 echo "Installed-Size: $buildsize" >> $ctrldir/control
362fi
363
364installScript $preinst
365installScript $postinst
366installScript $prerm
367installScript $posrm
368
369$ipkgbuild $classic -o $user -g $group $tempDir
370
371rm -rf $tempDir