Annotation of /trunk/mage/usr/lib/mage/smage2.sh
Parent Directory | Revision Log
Revision 33 -
(hide annotations)
(download)
(as text)
Thu Jan 6 02:57:12 2005 UTC (19 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 8629 byte(s)
Thu Jan 6 02:57:12 2005 UTC (19 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 8629 byte(s)
fixed version tags
1 | niro | 24 | #!/bin/bash |
2 | |||
3 | # compiles/installs .smage2 source install scripts | ||
4 | # needs pkgbuild_dir (mage) | ||
5 | |||
6 | # SMAGE2 | ||
7 | niro | 33 | # version: 0.3.6-r9 |
8 | niro | 24 | |
9 | #01.10.2004 | ||
10 | # added ccache support | ||
11 | # added distcc support | ||
12 | |||
13 | ## setup ## | ||
14 | SMAGEVERSION=0.3.6-r8 | ||
15 | PKGSUFFIX="mpk" | ||
16 | SMAGENAME="$1" | ||
17 | SMAGESUFFIX="smage2" | ||
18 | #SOURCEDIR="/bootstrap/sources" | ||
19 | #SMAGESCRIPTSDIR="/bootstrap/smage2-install-scripts" | ||
20 | #SMAGE2RSYNC="rsync://192.168.0.2/smage2-scripts" | ||
21 | MLIBDIR=/usr/lib/mage | ||
22 | |||
23 | source /etc/mage.rc | ||
24 | |||
25 | showversion() { | ||
26 | echo -en "Magellan Source Install v${SMAGEVERSION} " | ||
27 | echo -e "-- Niels Rogalla (niro@magellan-linux.de)" | ||
28 | } | ||
29 | |||
30 | die() { | ||
31 | xtitleclean | ||
32 | echo "SMAGE failed: $@" | ||
33 | exit 1 | ||
34 | } | ||
35 | |||
36 | xtitle() { | ||
37 | if [ ${TERM} == "xterm" ] | ||
38 | then | ||
39 | echo -ne "\033]0;[sMage: $@]\007" | ||
40 | fi | ||
41 | return 0 | ||
42 | } | ||
43 | |||
44 | xtitleclean() { | ||
45 | if [ ${TERM} == "xterm" ] | ||
46 | then | ||
47 | echo -ne "\033]0;\007" | ||
48 | fi | ||
49 | return 0 | ||
50 | } | ||
51 | |||
52 | syncsmage2() { | ||
53 | xtitle "Updating smage2-script tree ..." | ||
54 | local i | ||
55 | for i in ${SMAGE2RSYNC} | ||
56 | do | ||
57 | rsync \ | ||
58 | --recursive \ | ||
59 | --links \ | ||
60 | --perms \ | ||
61 | --times \ | ||
62 | --devices \ | ||
63 | --timeout=600 \ | ||
64 | --verbose \ | ||
65 | --compress \ | ||
66 | --progress \ | ||
67 | --stats \ | ||
68 | --delete \ | ||
69 | --delete-after \ | ||
70 | ${i} ${SMAGESCRIPTSDIR} | ||
71 | |||
72 | if [ "$?" == "0" ] | ||
73 | then | ||
74 | break | ||
75 | else | ||
76 | continue | ||
77 | fi | ||
78 | |||
79 | done | ||
80 | |||
81 | #clean up backup files (foo~) | ||
82 | find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';' | ||
83 | |||
84 | xtitleclean | ||
85 | } | ||
86 | |||
87 | # dummy function, used if that not exist in smage file | ||
88 | src_prepare() { | ||
89 | echo "no src_prepare defined" | ||
90 | sleep 2 | ||
91 | return 0 | ||
92 | } | ||
93 | |||
94 | # dummy function, used if that not exist in smage file | ||
95 | src_compile() { | ||
96 | echo "no src_compile defined" | ||
97 | sleep 2 | ||
98 | return 0 | ||
99 | } | ||
100 | |||
101 | # dummy function, used if that not exist in smage file | ||
102 | src_install() { | ||
103 | echo "no src_install defined" | ||
104 | sleep 2 | ||
105 | return 0 | ||
106 | } | ||
107 | |||
108 | |||
109 | build_mage_script() { | ||
110 | return 0 | ||
111 | } | ||
112 | |||
113 | mconfigure() { | ||
114 | if [ -x ./configure ] | ||
115 | then | ||
116 | ./configure \ | ||
117 | --prefix=/usr \ | ||
118 | --host=${CHOST} \ | ||
119 | --mandir=/usr/share/man \ | ||
120 | --infodir=/usr/share/info \ | ||
121 | --datadir=/usr/share \ | ||
122 | --sysconfdir=/etc \ | ||
123 | --localstatedir=/var/lib \ | ||
124 | "$@" || die "mconfigure failed" | ||
125 | else | ||
126 | echo "configure is not an executable ..." | ||
127 | exit 1 | ||
128 | fi | ||
129 | } | ||
130 | |||
131 | minstall() { | ||
132 | if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then | ||
133 | make prefix=${BINDIR}/usr \ | ||
134 | datadir=${BINDIR}/usr/share \ | ||
135 | infodir=${BINDIR}/usr/share/info \ | ||
136 | localstatedir=${BINDIR}/var/lib \ | ||
137 | mandir=${BINDIR}/usr/share/man \ | ||
138 | sysconfdir=${BINDIR}/etc \ | ||
139 | "$@" install || die "minstall failed" | ||
140 | else | ||
141 | die "no Makefile found" | ||
142 | fi | ||
143 | } | ||
144 | |||
145 | mmake() { | ||
146 | make ${MAKEOPTS} ${EXTRA_EMAKE} "$@" | ||
147 | } | ||
148 | |||
149 | munpack() { | ||
150 | local SRCFILE | ||
151 | local IFTAR | ||
152 | local DEST | ||
153 | |||
154 | SRCFILE=$1 | ||
155 | |||
156 | if [ -z "$2" ] | ||
157 | then | ||
158 | DEST=${BUILDDIR} | ||
159 | else | ||
160 | DEST=$2 | ||
161 | fi | ||
162 | |||
163 | case "${SRCFILE##*.}" in | ||
164 | bz2) | ||
165 | IFTAR="$(basename $SRCFILE .bz2)" | ||
166 | IFTAR="${IFTAR##*.}" | ||
167 | if [ "${IFTAR}" == "tar" ] | ||
168 | then | ||
169 | tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} | ||
170 | fi | ||
171 | ;; | ||
172 | gz) | ||
173 | IFTAR="$(basename $SRCFILE .gz)" | ||
174 | IFTAR="${IFTAR##*.}" | ||
175 | if [ "${IFTAR}" == "tar" ] | ||
176 | then | ||
177 | tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} | ||
178 | fi | ||
179 | ;; | ||
180 | tbz2) | ||
181 | tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} | ||
182 | ;; | ||
183 | tgz) | ||
184 | tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} | ||
185 | ;; | ||
186 | *) | ||
187 | die "munpack failed" | ||
188 | ;; | ||
189 | esac | ||
190 | } | ||
191 | |||
192 | mpatch() { | ||
193 | local PATCHOPTS | ||
194 | local PATCHFILE | ||
195 | |||
196 | PATCHOPTS=$1 | ||
197 | PATCHFILE=$2 | ||
198 | |||
199 | patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE} | ||
200 | } | ||
201 | |||
202 | |||
203 | minstalldocs() { | ||
204 | local docfiles | ||
205 | |||
206 | docfiles="$@" | ||
207 | |||
208 | if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ] | ||
209 | then | ||
210 | install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs." | ||
211 | fi | ||
212 | |||
213 | for i in ${docfiles} | ||
214 | do | ||
215 | cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs." | ||
216 | install -m 0644 ${SRCDIR}/${i}.gz \ | ||
217 | ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs." | ||
218 | done | ||
219 | } | ||
220 | |||
221 | setup_distcc_environment(){ | ||
222 | if [ -x /usr/bin/distcc ] | ||
223 | then | ||
224 | echo "Using DistCC for compilation ..." | ||
225 | export PATH=/usr/lib/distcc/bin:${PATH} || die "distcc: could not export new $PATH" | ||
226 | |||
227 | #export distcc as compiler | ||
228 | # export CC="distcc" | ||
229 | # export CXX=distcc | ||
230 | |||
231 | export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed" | ||
232 | |||
233 | |||
234 | #ccache + distcc together | ||
235 | if [ "${SMAGE_USE_CCACHE}" == "true" ] | ||
236 | then | ||
237 | if [ -x /usr/bin/ccache ] | ||
238 | then | ||
239 | echo "Preparing DistCC to work together with CCache ..." | ||
240 | #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix" | ||
241 | # export CC="ccache distcc" | ||
242 | # export CXX="ccache distcc" | ||
243 | fi | ||
244 | fi | ||
245 | |||
246 | #creating distcc tempdir | ||
247 | install -o distcc -g daemon -d ${DISTCC_DIR} | ||
248 | chmod 1777 ${DISTCC_DIR} | ||
249 | fi | ||
250 | } | ||
251 | |||
252 | setup_ccache_environment(){ | ||
253 | if [ -x /usr/bin/ccache ] | ||
254 | then | ||
255 | echo "Using CCache for compilation ..." | ||
256 | export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH" | ||
257 | #unset CC CXX | ||
258 | fi | ||
259 | } | ||
260 | |||
261 | if [ -z "$1" ] | ||
262 | then | ||
263 | showversion | ||
264 | echo | ||
265 | echo "No .smage2 file given. Exiting." | ||
266 | echo | ||
267 | exit 1 | ||
268 | fi | ||
269 | |||
270 | #updating smage2-scripts | ||
271 | if [ "$1" == "update" ] | ||
272 | then | ||
273 | showversion | ||
274 | if [ ! -d ${SMAGESCRIPTSDIR} ] | ||
275 | then | ||
276 | install -d ${SMAGESCRIPTSDIR} | ||
277 | fi | ||
278 | syncsmage2 | ||
279 | exit 0 | ||
280 | fi | ||
281 | |||
282 | |||
283 | if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] | ||
284 | then | ||
285 | die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting." | ||
286 | fi | ||
287 | |||
288 | if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ] | ||
289 | then | ||
290 | die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting." | ||
291 | fi | ||
292 | |||
293 | if [ -z "${SOURCEDIR}" ] | ||
294 | then | ||
295 | die "\$SOURCEDIR not found. Please setup your mage.rc correctly." | ||
296 | fi | ||
297 | |||
298 | if [ -z "${SMAGESCRIPTSDIR}" ] | ||
299 | then | ||
300 | die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly." | ||
301 | fi | ||
302 | |||
303 | if [ -z "${SMAGE2RSYNC}" ] | ||
304 | then | ||
305 | echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly." | ||
306 | exit 1 | ||
307 | fi | ||
308 | |||
309 | if [ -z "${BINDIR}" ] | ||
310 | then | ||
311 | die "no BINDIR variable found in /etc/mage.rc" | ||
312 | fi | ||
313 | |||
314 | if [ -z "${CHOST}" ] | ||
315 | then | ||
316 | die "no CHOST variable found in /etc/mage.rc" | ||
317 | fi | ||
318 | |||
319 | if [ -z "${CFLAGS}" ] | ||
320 | then | ||
321 | die "no CFLAGS variable found in /etc/mage.rc" | ||
322 | fi | ||
323 | |||
324 | if [ -z "${CXXFLAGS}" ] | ||
325 | then | ||
326 | die "no CXXFLAGS variable found in /etc/mage.rc" | ||
327 | fi | ||
328 | |||
329 | |||
330 | source ${SMAGENAME} || die "source failed" | ||
331 | PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}" | ||
332 | |||
333 | xtitle "Compiling ${PKGNAME}" | ||
334 | #fixes some issues with these functions | ||
335 | export -f src_prepare || die "src_prepare export failed" | ||
336 | export -f src_compile || die "src_compile export failed" | ||
337 | export -f src_install || die "src_install export failed" | ||
338 | |||
339 | #fixes some compile issues | ||
340 | export CHOST="${CHOST}" || die "CHOST export failed" | ||
341 | export CFLAGS="${CFLAGS}" || die "CFLAGS export failed" | ||
342 | export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed" | ||
343 | export BINDIR="${BINDIR}" || die "BINDIR export failed" | ||
344 | export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed" | ||
345 | |||
346 | |||
347 | #setup distcc | ||
348 | #distcc mus be setup *before* ccache, as ccache need to be before distcc in path | ||
349 | if [ "${SMAGE_USE_DISTCC}" == "true" ] | ||
350 | then | ||
351 | setup_distcc_environment | ||
352 | fi | ||
353 | |||
354 | #setup ccache | ||
355 | if [ "${SMAGE_USE_CCACHE}" == "true" ] | ||
356 | then | ||
357 | setup_ccache_environment | ||
358 | fi | ||
359 | |||
360 | |||
361 | # small sleep to show our settings | ||
362 | sleep 1 | ||
363 | |||
364 | #debug | ||
365 | #echo "CC=${CC}" | ||
366 | #echo "CXX=${CXX}" | ||
367 | #echo "DISTCC_DIR=${DISTCC_DIR}" | ||
368 | #echo "PATH: ${PATH}" | ||
369 | #echo "--------------------------------------" | ||
370 | #env | ||
371 | #echo "--------------------------------------" | ||
372 | #read | ||
373 | #debug end | ||
374 | |||
375 | #cleans up build if a previously one exists | ||
376 | if [ -d ${BUILDDIR} ] | ||
377 | then | ||
378 | rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR." | ||
379 | fi | ||
380 | install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR." | ||
381 | |||
382 | #cleans up srcdir if a previously unpacked one exists | ||
383 | if [ -d ${SRCDIR} ] | ||
384 | then | ||
385 | rm -rf ${SRCDIR} | ||
386 | fi | ||
387 | |||
388 | #cleans up bindir if a previous build exists or creates a new one | ||
389 | if [ -d ${BINDIR} ] | ||
390 | then | ||
391 | rm -rf ${BINDIR} | ||
392 | fi | ||
393 | install -d ${BINDIR} || die "couldn't create \$BINDIR." | ||
394 | |||
395 | #cleans up package temp dir if a previous build exists | ||
396 | if [ -d ${BUILDDIR}/${PKGNAME} ] | ||
397 | then | ||
398 | rm -rf ${BUILDDIR}/${PKGNAME} | ||
399 | fi | ||
400 | |||
401 | #cleans up timestamp if one exists | ||
402 | if [ -f /var/tmp/timestamp ] | ||
403 | then | ||
404 | mage rmstamp | ||
405 | fi | ||
406 | |||
407 | src_prepare || die "src_prepare failed" | ||
408 | src_compile || die "src_compile failed" | ||
409 | src_install || die "src_install failed" | ||
410 | |||
411 | |||
412 | #compressing doc, info & man files | ||
413 | echo -e "Compressing man-pages ..." | ||
414 | if [ -d ${BUILDDIR}/builded/usr/share/man ] | ||
415 | then | ||
416 | ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man | ||
417 | fi | ||
418 | |||
419 | echo -e "Compressing info-pages ..." | ||
420 | if [ -d ${BUILDDIR}/builded/usr/share/info ] | ||
421 | then | ||
422 | ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info | ||
423 | fi | ||
424 | |||
425 | #the new buildpkg command | ||
426 | case ${NOPKGBUILD} in | ||
427 | true|TRUE|yes|y) | ||
428 | echo -e "NOPGKBUILD=true detected; Package will not be build ..." | ||
429 | ;; | ||
430 | *) | ||
431 | ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed" | ||
432 | echo -e "\nPackage ${PKGNAME} successfully builded.\n" | ||
433 | ;; | ||
434 | esac | ||
435 | |||
436 | #for sure | ||
437 | unset NOPKGBUILD | ||
438 | |||
439 | xtitleclean | ||
440 | #echo -e "\nPackage ${PKGNAME} successfully builded.\n" |
Properties
Name | Value |
---|---|
svn:executable | * |