Magellan Linux

Contents of /trunk/mage/usr/lib/mage/smage2.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 61 - (show annotations) (download) (as text)
Tue Feb 15 23:10:09 2005 UTC (19 years, 2 months ago) by niro
File MIME type: application/x-sh
File size: 12336 byte(s)
cosmetic fix

1 #!/bin/bash
2
3 # compiles/installs .smage2 source install scripts
4 # needs pkgbuild_dir (mage)
5
6 # SMAGE2
7 # version: 0.3.6-r13
8
9 #01.10.2004
10 # added ccache support
11 # added distcc support
12
13 ## setup ##
14 SMAGEVERSION=0.3.6-r13
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 # $1 filename
88 get_db_md5_sum() {
89 local DB_FILE
90 local MD5_FILE
91 local i
92
93 DB_ENTRY="$(basename $1)"
94 MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} ${SMAGESUFFIX})"
95
96 i="$(cat ${MD5_FILE}| grep ${DB_ENTRY} | cut -d' ' -f1)"
97
98 echo "${i}"
99 }
100
101 download_sources() {
102
103 [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
104
105 local EOA=${#SRC_URI[*]}
106 local MY_SRC_URI
107 local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
108 local FETCHING
109 local i mirror
110
111
112 #install SRCDIR/PNAME if not exist
113 [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}
114
115 # check if FETCHING is needed
116 ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} > /dev/null )
117 if [[ $? == 0 ]]
118 then
119 # md5's ok, not fetching needed
120 FETCHING=false
121 else
122 FETCHING=true
123 fi
124
125 for ((i=0; i < EOA; i++))
126 do
127 # get MD5 sum from database
128
129
130 # if an mirrored file than replace first the mirror uri
131 if [ -n "$(echo ${SRC_URI[${i}]} | grep 'mirror://')" ]
132 then
133 for mirror in ${MIRRORS}
134 do
135 MY_SRC_URI="$(echo ${SRC_URI[${i}]} | sed "s|mirror:/|${mirror}/sources|g")"
136
137 #echo "DEBUG: ${MY_SRC_URI}"
138 if [[ ${FETCHING} == true ]]
139 then
140 echo "==> fetching ${MY_SRC_URI}"
141 wget \
142 --passive-ftp \
143 --tries 3 \
144 --continue \
145 --progress bar \
146 --directory-prefix="${SOURCEDIR}/${PNAME}" \
147 "${MY_SRC_URI}"
148 if [ "$?" == "0" ]
149 then
150 break
151 else
152 continue
153 fi
154 fi
155 done
156 else
157 #echo "DEBUG: ${SRC_URI[${i}]}"
158 if [[ ${FETCHING} == true ]]
159 then
160 echo "==> fetching ${SRC_URI[${i}]}"
161 wget \
162 --passive-ftp \
163 --tries 3 \
164 --continue \
165 --progress bar \
166 --directory-prefix="${SOURCEDIR}/${PNAME}" \
167 "${MY_SRC_URI}"
168 if [ "$?" == "0" ]
169 then
170 break
171 else
172 continue
173 fi
174 fi
175 fi
176
177 done
178
179 # recheck md5 sums
180 echo
181 echo ">== Checking MD5 sums:"
182 ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} || die "md5 failed")
183 echo
184
185 # not needed anymore
186 unset SRC_URI
187 }
188
189 # dummy function, used if that not exist in smage file
190 src_prepare() {
191 echo "no src_prepare defined"
192 sleep 2
193 return 0
194 }
195
196 # dummy function, used if that not exist in smage file
197 src_compile() {
198 echo "no src_compile defined"
199 sleep 2
200 return 0
201 }
202
203 # dummy function, used if that not exist in smage file
204 src_install() {
205 echo "no src_install defined"
206 sleep 2
207 return 0
208 }
209
210
211 build_mage_script() {
212 return 0
213 }
214
215 mconfigure() {
216 if [ -x ./configure ]
217 then
218 ./configure \
219 --prefix=/usr \
220 --host=${CHOST} \
221 --mandir=/usr/share/man \
222 --infodir=/usr/share/info \
223 --datadir=/usr/share \
224 --sysconfdir=/etc \
225 --localstatedir=/var/lib \
226 "$@" || die "mconfigure failed"
227 else
228 echo "configure is not an executable ..."
229 exit 1
230 fi
231 }
232
233 minstall() {
234 if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then
235 make prefix=${BINDIR}/usr \
236 datadir=${BINDIR}/usr/share \
237 infodir=${BINDIR}/usr/share/info \
238 localstatedir=${BINDIR}/var/lib \
239 mandir=${BINDIR}/usr/share/man \
240 sysconfdir=${BINDIR}/etc \
241 "$@" install || die "minstall failed"
242 else
243 die "no Makefile found"
244 fi
245 }
246
247 mmake() {
248 make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
249 }
250
251 munpack() {
252 local SRCFILE
253 local IFTAR
254 local DEST
255
256 SRCFILE=$1
257
258 if [ -z "$2" ]
259 then
260 DEST=${BUILDDIR}
261 else
262 DEST=$2
263 fi
264
265 case "${SRCFILE##*.}" in
266 bz2)
267 IFTAR="$(basename $SRCFILE .bz2)"
268 IFTAR="${IFTAR##*.}"
269 if [ "${IFTAR}" == "tar" ]
270 then
271 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
272 fi
273 ;;
274 gz)
275 IFTAR="$(basename $SRCFILE .gz)"
276 IFTAR="${IFTAR##*.}"
277 if [ "${IFTAR}" == "tar" ]
278 then
279 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
280 fi
281 ;;
282 tbz2)
283 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
284 ;;
285 tgz)
286 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
287 ;;
288 *)
289 die "munpack failed"
290 ;;
291 esac
292 }
293
294 mpatch() {
295 local PATCHOPTS
296 local PATCHFILE
297
298 PATCHOPTS=$1
299 PATCHFILE=$2
300
301 patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
302 }
303
304
305 minstalldocs() {
306 local docfiles
307
308 docfiles="$@"
309
310 if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
311 then
312 install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
313 fi
314
315 for i in ${docfiles}
316 do
317 cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
318 install -m 0644 ${SRCDIR}/${i}.gz \
319 ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs."
320 done
321 }
322
323 setup_distcc_environment(){
324 if [ -x /usr/bin/distcc ]
325 then
326 echo "Using DistCC for compilation ..."
327 export PATH=/usr/lib/distcc/bin:${PATH} || die "distcc: could not export new $PATH"
328
329 #export distcc as compiler
330 # export CC="distcc"
331 # export CXX=distcc
332
333 export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
334
335
336 #ccache + distcc together
337 if [ "${SMAGE_USE_CCACHE}" == "true" ]
338 then
339 if [ -x /usr/bin/ccache ]
340 then
341 echo "Preparing DistCC to work together with CCache ..."
342 #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix"
343 # export CC="ccache distcc"
344 # export CXX="ccache distcc"
345 fi
346 fi
347
348 #creating distcc tempdir
349 install -o distcc -g daemon -d ${DISTCC_DIR}
350 chmod 1777 ${DISTCC_DIR}
351 fi
352 }
353
354 setup_ccache_environment(){
355 if [ -x /usr/bin/ccache ]
356 then
357 echo "Using CCache for compilation ..."
358 export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
359 #unset CC CXX
360 fi
361 }
362
363 # print out our version
364 showversion
365 echo
366
367 if [ -z "$1" ]
368 then
369 echo "No .smage2 file given. Exiting."
370 echo
371 exit 1
372 fi
373
374 #updating smage2-scripts
375 if [ "$1" == "update" ]
376 then
377 if [ ! -d ${SOURCEDIR} ]
378 then
379 install -d ${SOURCEDIR}
380 fi
381 syncsmage2
382 exit 0
383 fi
384
385 #creates md5sums for smages to given dir
386 if [ "$1" == "calcmd5" ]
387 then
388 if [ $# -ge 3 ]
389 then
390 # overridable sourcedir
391 CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}"
392
393 SMAGENAME="$2"
394 MD5DIR="$3"
395 source ${SMAGENAME} || die "download source failed"
396
397 [ -z "${SRC_URI}" ] && die "Nothing declared to calculate."
398
399 # end of array
400 EOA=${#SRC_URI[*]}
401
402 [ ! -d ${MD5DIR} ] && install -d ${MD5DIR}
403
404 # clear md5sum file
405 MY_MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
406 echo -n > ${MY_MD5_FILE}
407
408 for ((i=0; i < EOA; i++))
409 do
410 MY_SRC_FILE="$(basename ${SRC_URI[${i}]})"
411 if [ -e "${CALC_SOURCEDIR}/${MY_SRC_FILE}" ]
412 then
413 echo "calculating $(basename ${MY_SRC_FILE}) ..."
414 ( cd ${CALC_SOURCEDIR}; md5sum "${MY_SRC_FILE}" ) >> ${MY_MD5_FILE}
415 else
416 echo "WARNING: File '$(basename ${MY_SRC_FILE}) not found in ${CALC_SOURCEDIR}."
417 fi
418 done
419
420 echo
421 echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
422 echo
423 else
424 echo "Usage: Calculating MD5 Sums:"
425 echo " $(basename $0) calcmd5 /path/to/SMAGENAME /path/to/MD5DIR"
426 echo
427 echo
428 echo "Export the CALC_SOURCEDIR variable to override current SOURCEDIRs."
429 echo
430 exit 1
431 fi
432
433 exit 0
434 fi
435
436 #download sources
437 if [ "$1" == "download" -a -n "$2" ]
438 then
439 showversion
440 if [ ! -d ${SMAGESCRIPTSDIR} ]
441 then
442 install -d ${SMAGESCRIPTSDIR}
443 fi
444
445 # get smage
446 SMAGENAME="$2"
447 MD5DIR="$(dirname ${SMAGENAME})/md5"
448 source ${SMAGENAME} || die "download source failed"
449
450 download_sources
451 exit 0
452 fi
453
454 if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]
455 then
456 die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
457 fi
458
459 if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]
460 then
461 die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."
462 fi
463
464 if [ -z "${SOURCEDIR}" ]
465 then
466 die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
467 fi
468
469 if [ -z "${SMAGESCRIPTSDIR}" ]
470 then
471 die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
472 fi
473
474 if [ -z "${SMAGE2RSYNC}" ]
475 then
476 echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
477 exit 1
478 fi
479
480 if [ -z "${BINDIR}" ]
481 then
482 die "no BINDIR variable found in /etc/mage.rc"
483 fi
484
485 if [ -z "${CHOST}" ]
486 then
487 die "no CHOST variable found in /etc/mage.rc"
488 fi
489
490 if [ -z "${CFLAGS}" ]
491 then
492 die "no CFLAGS variable found in /etc/mage.rc"
493 fi
494
495 if [ -z "${CXXFLAGS}" ]
496 then
497 die "no CXXFLAGS variable found in /etc/mage.rc"
498 fi
499
500
501 source ${SMAGENAME} || die "source failed"
502 PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"
503 MD5DIR="$(dirname ${SMAGENAME})/md5"
504
505 xtitle "Compiling ${PKGNAME}"
506 echo "Compiling ${PKGNAME}"
507
508 #download sources
509 download_sources
510
511 #fixes some issues with these functions
512 export -f src_prepare || die "src_prepare export failed"
513 export -f src_compile || die "src_compile export failed"
514 export -f src_install || die "src_install export failed"
515
516 #fixes some compile issues
517 export CHOST="${CHOST}" || die "CHOST export failed"
518 export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
519 export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
520 export BINDIR="${BINDIR}" || die "BINDIR export failed"
521 export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
522
523
524 #setup distcc
525 #distcc mus be setup *before* ccache, as ccache need to be before distcc in path
526 if [ "${SMAGE_USE_DISTCC}" == "true" ]
527 then
528 setup_distcc_environment
529 fi
530
531 #setup ccache
532 if [ "${SMAGE_USE_CCACHE}" == "true" ]
533 then
534 setup_ccache_environment
535 fi
536
537
538 # small sleep to show our settings
539 sleep 1
540
541 #debug
542 #echo "CC=${CC}"
543 #echo "CXX=${CXX}"
544 #echo "DISTCC_DIR=${DISTCC_DIR}"
545 #echo "PATH: ${PATH}"
546 #echo "--------------------------------------"
547 #env
548 #echo "--------------------------------------"
549 #read
550 #debug end
551
552 #cleans up build if a previously one exists
553 if [ -d ${BUILDDIR} ]
554 then
555 rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
556 fi
557 install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
558
559 #cleans up srcdir if a previously unpacked one exists
560 if [ -d ${SRCDIR} ]
561 then
562 rm -rf ${SRCDIR}
563 fi
564
565 #cleans up bindir if a previous build exists or creates a new one
566 if [ -d ${BINDIR} ]
567 then
568 rm -rf ${BINDIR}
569 fi
570 install -d ${BINDIR} || die "couldn't create \$BINDIR."
571
572 #cleans up package temp dir if a previous build exists
573 if [ -d ${BUILDDIR}/${PKGNAME} ]
574 then
575 rm -rf ${BUILDDIR}/${PKGNAME}
576 fi
577
578 #cleans up timestamp if one exists
579 if [ -f /var/tmp/timestamp ]
580 then
581 mage rmstamp
582 fi
583
584 src_prepare || die "src_prepare failed"
585 src_compile || die "src_compile failed"
586 src_install || die "src_install failed"
587
588
589 #compressing doc, info & man files
590 echo -e "Compressing man-pages ..."
591 if [ -d ${BUILDDIR}/builded/usr/share/man ]
592 then
593 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man
594 fi
595
596 echo -e "Compressing info-pages ..."
597 if [ -d ${BUILDDIR}/builded/usr/share/info ]
598 then
599 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info
600 fi
601
602 #the new buildpkg command
603 case ${NOPKGBUILD} in
604 true|TRUE|yes|y)
605 echo -e "NOPGKBUILD=true detected; Package will not be build ..."
606 ;;
607 *)
608 ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
609 echo -e "\nPackage ${PKGNAME} successfully builded.\n"
610 ;;
611 esac
612
613 #for sure
614 unset NOPKGBUILD
615
616 xtitleclean
617 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"

Properties

Name Value
svn:executable *