summaryrefslogtreecommitdiff
path: root/scripts/mkipks
Unidiff
Diffstat (limited to 'scripts/mkipks') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/mkipks261
1 files changed, 261 insertions, 0 deletions
diff --git a/scripts/mkipks b/scripts/mkipks
new file mode 100755
index 0000000..f142029
--- a/dev/null
+++ b/scripts/mkipks
@@ -0,0 +1,261 @@
1#!/bin/sh
2
3if [ -z "$QTE_BASEVERSION" ]
4then
5 if [ -e $QTDIR/include/qglobal.h ]
6 then
7 QTE_BASEVERSION=`cat $QTDIR/include/qglobal.h|grep '^#define QT_VERSION'|grep -v STR|sed -e 's,#define QT_VERSION\t*,,;' -e 's,.*\([0-9]\)\([0-9]\)\([0-9]\).*,\1.\2.\3,;'`
8 else
9 QTE_BASEVERSION=2.3.4
10 fi
11fi
12if [ -z "$QTE_VERSION" ]
13then
14 if [ -e $QTDIR/include/qglobal.h ]
15 then
16 QTE_VERSION=`cat $QTDIR/include/qglobal.h|grep '^#define QT_VERSION_STR'|sed -e 's,#define QT_VERSION_STR\t*,,;' -e 's,.*"\([^"]*\)".*,\1,;'`
17 else
18 QTE_VERSION=2.3.4
19 fi
20fi
21[ -z "$QTE_REVISION" ] && QTE_REVISION=5
22DEB_VERSION=2.0
23
24# Have to do this here, since CVS can't store symlinks
25
26mkdir -p $OPIEDIR/etc/rcS.d
27ln -sf ../init.d/bootsplash $OPIEDIR/etc/rcS.d/S01bootsplash
28
29VERSION_MAJ=$(sed -n -e 's/.*QPE_VERSION "\([0-9]*\)\..*\..*".*/\1/p' <$OPIEDIR/include/qpe/version.h)
30VERSION_MIN=$(sed -n -e 's/.*QPE_VERSION ".*\.\([0-9]*\)\..*".*/\1/p' <$OPIEDIR/include/qpe/version.h)
31VERSION_PAT=$(sed -n -e 's/.*QPE_VERSION ".*\..*\.\([0-9]*\).*/\1/p' <$OPIEDIR/include/qpe/version.h)
32SUB_VERSION=$(sed -n -e 's,.*SUB_VERSION \"\(.*\)\".*,\1,p' <$OPIEDIR/include/qpe/version.h)
33if grep -q 'QPE_VERSION .*snapshot' $OPIEDIR/include/qpe/version.h
34then
35 [ -z "$VERSION_CVS" ] && VERSION_CVS="$(date +%Y%m%d)"
36 SUB_VERSION=$VERSION_CVS
37else
38 VERSION_CVS=""
39fi
40
41QPE_VERSION=$VERSION_MAJ.$VERSION_MIN.$VERSION_PAT
42
43ARCH=arm
44STRIP=arm-linux-strip
45STRIP_FILES="*ARM*not stripped"
46
47TDIR=/tmp/ipk$$
48DATADIR=$TDIR
49CTRLDIR=$TDIR/CONTROL
50
51IMAGEDIR=
52VERB=
53LIST=
54RPM=
55
56while [ $# -ne 0 ]
57do
58 case "$1" in
59 -v)
60 VERB=1
61 echo >&2 "Packaging for version $VERSION_MAJ.$VERSION_MIN.$VERSION_PAT$VERSION_CVS"
62 ;; -l)
63 LIST=1
64 ;; -i)
65 shift
66 IMAGEDIR=$1
67 DATADIR=$IMAGEDIR
68 mkdir -p $IMAGEDIR
69 ;; -classic)
70 classicopts=-c
71 ;; -rpm)
72 if [ "$OPIEDIR" != "/opt/Qtopia" ]
73 then
74 echo >&2 '$OPIEDIR is not the standard /usr/Qtopia directory.'
75 sleep 1
76 #exit 1
77 fi
78 RPM=1
79 ;; -arch)
80 shift
81 ARCH=$1
82 STRIP=
83 STRIP_FILES=
84 ;; /*)
85 FILES="$FILES $1"
86 ;; *)
87 FILES="$FILES $PWD/$1"
88 esac
89 shift
90done
91
92if [ -z "$FILES" ]
93then
94 FILES=`find $OPIEDIR -name "*.control" -print`
95fi
96
97RDIR=$PWD
98ORIGDIR=`pwd`
99cd $OPIEDIR
100
101for i in $FILES
102do
103 rm -rf $TDIR
104
105 mkdir -p $DATADIR
106 mkdir -p $CTRLDIR
107
108 packagename=${i##*/}; packagename=${packagename%.control}
109 version=$(eval echo '"'$(sed -n -e "s/^Version: *//p" $i)'"')
110 depends=$(eval echo '"'$(sed -n -e "s/^Depends: *//p" $i)'"')
111 files=$(eval echo $(sed -n -e "s/^Files://p" $i))
112 arch=$(eval echo $(sed -n -e "s/^Arch://p" $i))
113 section=$(sed -n -e "s/^Section: *//p" $i)
114 provides=$(sed -n -e "s/^Provides: *//p" $i)
115 conflicts=$(sed -n -e "s/^Conflicts: *//p" $i)
116 license=$(sed -n -e "s/^License: *//p" $i)
117 summary=$(sed -n -e "s/^Description: *//p" $i)
118 package=${packagename}_${version}_$ARCH
119 ERROR=
120 if [ -z "$files" ]
121 then
122 mkdir -p $DATADIR/usr/share/doc/$packagename
123 else
124 for f in $files
125 do
126 if [ -d $f ]
127 then
128 ffiles=$(find $f -type f -o -type b -o -type c -o -type l)
129 else
130 ffiles=$f
131 fi
132 for ff in $ffiles
133 do
134 case $ff in
135 */CVS/*)
136 continue
137 ;;*~)
138 continue
139 ;;*.control)
140 continue
141 ;; $QTDIR/*)
142 BASE=$(dirname /opt/QtPalmtop/${ff#$QTDIR/})
143 ;; etc/*.d/*)
144 BASE=$(dirname /$ff)
145 ;; root/*)
146 BASE=$(dirname ${ff#root})
147 ;; lib/*)
148 BASE=$(dirname /opt/QtPalmtop/$ff)
149 ;; $OPIEDIR/lib/*)
150 BASE=$(dirname /opt/QtPalmtop/${ff#$OPIEDIR/})
151 ;; $OPIEDIR/root/*)
152 BASE=$(dirname /${ff#$OPIEDIR/root/})
153 ;; *)
154 # For SHARP ROM compatibility. Should change to Qtopia.
155 BASE=/opt/QtPalmtop/$(dirname $ff)
156 esac
157
158 if [ -f $ff -o -b $ff -o -c $ff ]
159 then
160 D=$DATADIR$BASE
161 if [ -x $ff -a -n "$STRIP" ]
162 then
163 case $(file $ff) in
164 $STRIP_FILES)
165 $STRIP $ff
166 ;; *)
167 esac
168 fi
169 if [ -n "$RPM" ]
170 then
171 case "$ff" in
172 /*) RPMFILES="$RPMFILES $ff"
173 ;; *) RPMFILES="$RPMFILES $OPIEDIR/$ff"
174 esac
175 else
176 mkdir -p $D
177 if cp -a $ff $D
178 then
179 true
180 else
181 ERROR=1
182 fi
183 fi
184 else
185 echo >&2 "$0: $i: No such file: $ff"
186 ERROR=1
187 fi
188 done
189 done
190 fi
191 if [ -z "$ERROR" ]
192 then
193 if [ -n "$RPM" ]
194 then
195 SPEC=/tmp/mkipks-rpm-$$.spec
196 echo >$SPEC "Summary: $summary"
197 echo >>$SPEC "Name: $packagename"
198 echo >>$SPEC "Group: $section" ##########
199 echo >>$SPEC "License: $license"
200 echo >>$SPEC "Version: ${version%-*}"
201 echo >>$SPEC "Release: ${version#*-}"
202
203 echo >>$SPEC "%description"
204 sed -n -e '/^Description:/,$ p' $i | tail +2 >>$SPEC
205 echo >>$SPEC "%files"
206 echo >>$SPEC "%defattr(-,root,root)"
207 /bin/ls $RPMFILES >>$SPEC
208 rpm -bb --target $ARCH-unknown-linux $SPEC
209 # rm $SPEC
210 elif [ -z "$IMAGEDIR" ]
211 then
212 #size=$(du -h -s $DATADIR | sed -e 's/[ ].*//')
213 if (which mkfs.jffs2 >/dev/null 2>&1); then
214 size=$(mkfs.jffs2 -r $DATADIR | wc -c)
215 fi
216 if ! (cat $i|grep -q ^Package:); then
217 echo "Package: $packagename" >$CTRLDIR/control
218 fi
219 if [ ! -z "$size" ]; then
220 echo "Installed-Size: $size" >>$CTRLDIR/control
221 else
222 if [ -z "$SIZEWARNED" ]
223 then
224 echo "Warning, no mkfs.jffs2 found, unable to set Installed-Size."
225 SIZEWARNED=1
226 fi
227 fi
228 echo "Architecture: $ARCH" >>$CTRLDIR/control
229 echo "Version: $version" >>$CTRLDIR/control
230 [ ! -z "$depends" ] && echo "Depends: $depends" >>$CTRLDIR/control
231 [ ! -z "$provides" ] && echo "Provides: $provides" >>$CTRLDIR/control
232 [ ! -z "$conflicts" ] && echo "Conflicts: $conflicts" >>$CTRLDIR/control
233 egrep -v "^(Files|Version|Depends|Provides|Conflicts|Architecture):" >>$CTRLDIR/control $i
234 [ -n "$classicopts" ] && echo "$DEB_VERSION" >$TDIR/debian-binary
235 base=${i%.control}
236 scripts="preinst postinst prerm postrm"
237 for pf in $scripts
238 do
239 if [ -e ${base}.$pf ]
240 then
241 cp ${base}.$pf $CTRLDIR/$pf
242 chmod 755 $CTRLDIR/$pf
243 fi
244 done
245 cd $ORIGDIR; $OPIEDIR/scripts/ipkg-build $classicopts -o root -g root $TDIR; cd $OPIEDIR;
246 RESULT=$package.ipk
247 if [ -n "$VERB" ]
248 then
249 echo >&2 "Built $RESULT ($size)"
250 fi
251 if [ -n "$LIST" ]
252 then
253 echo $RESULT
254 fi
255 fi
256 else
257 echo >&2 "Not building $package package"
258 fi
259done
260# clean up
261rm -rf $TDIR