Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 175 - (show annotations) (download) (as text)
Sun Jul 31 14:47:55 2005 UTC (18 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 14584 byte(s)
fixed version; typos and style

1 #!/bin/bash
2
3 # compiles/installs .smage2 source install scripts
4 # needs pkgbuild_dir (mage)
5
6 # SMAGE2
7 # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.18 2005-07-31 14:47:55 niro Exp $
8
9 #01.10.2004
10 # added ccache support
11 # added distcc support
12
13 ## setup ##
14 SMAGEVERSION=0.3.7-r1
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 # export default C locale
24 export LC_ALL=C
25
26 source /etc/mage.rc
27
28 showversion() {
29 echo -en "Magellan Source Install v${SMAGEVERSION} "
30 echo -e "-- Niels Rogalla (niro@magellan-linux.de)"
31 }
32
33 die() {
34 xtitleclean
35 echo "SMAGE failed: $@"
36 exit 1
37 }
38
39 xtitle() {
40 if [ ${TERM} == "xterm" ]
41 then
42 echo -ne "\033]0;[sMage: $@]\007"
43 fi
44 return 0
45 }
46
47 xtitleclean() {
48 if [ ${TERM} == "xterm" ]
49 then
50 echo -ne "\033]0;\007"
51 fi
52 return 0
53 }
54
55 syncsmage2() {
56 xtitle "Updating smage2-script tree ..."
57 local i
58 for i in ${SMAGE2RSYNC}
59 do
60 rsync \
61 --recursive \
62 --links \
63 --perms \
64 --times \
65 --devices \
66 --timeout=600 \
67 --verbose \
68 --compress \
69 --progress \
70 --stats \
71 --delete \
72 --delete-after \
73 ${i} ${SMAGESCRIPTSDIR}
74
75 if [ "$?" == "0" ]
76 then
77 break
78 else
79 continue
80 fi
81
82 done
83
84 #clean up backup files (foo~)
85 find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'
86
87 xtitleclean
88 }
89
90 # $1 filename
91 get_db_md5_sum() {
92 local DB_FILE
93 local MD5_FILE
94 local i
95
96 DB_ENTRY="$(basename $1)"
97 MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} ${SMAGESUFFIX})"
98
99 i="$(cat ${MD5_FILE}| grep ${DB_ENTRY} | cut -d' ' -f1)"
100
101 echo "${i}"
102 }
103
104 download_sources() {
105
106 [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
107
108 local EOA=${#SRC_URI[*]}
109 local my_SRC_URI
110 local my_SRC_URI_DEST
111 local my_SRC_URI_MIRROR
112 local my_SOURCEDIR
113 local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
114 local FETCHING
115 local i mirror
116
117
118 #install SRCDIR/PNAME if not exist
119 [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}
120
121 # check if FETCHING is needed
122 ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )
123 if [[ $? == 0 ]]
124 then
125 # md5's ok, not fetching needed
126 FETCHING=false
127 else
128 FETCHING=true
129 fi
130
131 for ((i=0; i < EOA; i++))
132 do
133 # url to file
134 my_SRC_URI="$(echo ${SRC_URI[${i}]} | cut -d' ' -f1)"
135
136 # subdir in sources dir; the my_SRCI_URI file goes to there
137 my_SRC_URI_DEST="$(echo ${SRC_URI[${i}]} | cut -d' ' -f2)"
138
139 # if my_src_uri_dest is not equal my_src_uri; than an other dir is used
140 if [[ ${my_SRC_URI_DEST} != ${my_SRC_URI} ]]
141 then
142 my_SOURCEDIR="${SOURCEDIR}/${PNAME}/${my_SRC_URI_DEST}"
143 else
144 my_SOURCEDIR="${SOURCEDIR}/${PNAME}"
145 fi
146
147 # if an mirrored file than replace first the mirror uri
148 if [ -n "$(echo ${my_SRC_URI} | grep 'mirror://')" ]
149 then
150 for mirror in ${MIRRORS}
151 do
152 my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|mirror:/|${mirror}/sources|g")"
153
154 #echo "DEBUG: ${MY_SRC_URI}"
155 if [[ ${FETCHING} == true ]]
156 then
157 echo "==> fetching ${my_SRC_URI_MIRROR}"
158 wget \
159 --passive-ftp \
160 --tries 3 \
161 --continue \
162 --progress bar \
163 --directory-prefix="${my_SOURCEDIR}" \
164 "${my_SRC_URI_MIRROR}"
165 if [ "$?" == "0" ]
166 then
167 break
168 else
169 continue
170 fi
171 fi
172 done
173 else
174 #echo "DEBUG: ${SRC_URI[${i}]}"
175 if [[ ${FETCHING} == true ]]
176 then
177 echo "==> fetching ${my_SRC_URI}"
178 wget \
179 --passive-ftp \
180 --tries 3 \
181 --continue \
182 --progress bar \
183 --directory-prefix="${my_SOURCEDIR}" \
184 "${my_SRC_URI}"
185 # only needed to run through a list of mirrors
186 # if [ "$?" == "0" ]
187 # then
188 # break
189 # else
190 # continue
191 # fi
192 fi
193 fi
194
195 # unset them to be shure
196 unset my_SRC_URI
197 unset my_SRC_URI_DEST
198 unset my_SRC_URI_MIRROR
199 unset my_SOURCEDIR
200 done
201
202 # recheck md5 sums
203 echo
204 echo ">== Checking MD5 sums:"
205 ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} ) || die "md5 failed"
206 echo
207
208 # not needed anymore
209 unset SRC_URI
210 }
211
212 # dummy function, used if that not exist in smage file
213 src_prepare() {
214 echo "no src_prepare defined"
215 sleep 2
216 return 0
217 }
218
219 # dummy function, used if that not exist in smage file
220 src_compile() {
221 echo "no src_compile defined"
222 sleep 2
223 return 0
224 }
225
226 # dummy function, used if that not exist in smage file
227 src_install() {
228 echo "no src_install defined"
229 sleep 2
230 return 0
231 }
232
233
234 build_mage_script() {
235 return 0
236 }
237
238 mconfigure() {
239 if [ -x ./configure ]
240 then
241 ./configure \
242 --prefix=/usr \
243 --host=${CHOST} \
244 --mandir=/usr/share/man \
245 --infodir=/usr/share/info \
246 --datadir=/usr/share \
247 --sysconfdir=/etc \
248 --localstatedir=/var/lib \
249 "$@" || die "mconfigure failed"
250 else
251 echo "configure is not an executable ..."
252 exit 1
253 fi
254 }
255
256 minstall() {
257 if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then
258 make prefix=${BINDIR}/usr \
259 datadir=${BINDIR}/usr/share \
260 infodir=${BINDIR}/usr/share/info \
261 localstatedir=${BINDIR}/var/lib \
262 mandir=${BINDIR}/usr/share/man \
263 sysconfdir=${BINDIR}/etc \
264 "$@" install || die "minstall failed"
265 else
266 die "no Makefile found"
267 fi
268 }
269
270 mmake() {
271 make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
272 }
273
274 munpack() {
275 local SRCFILE
276 local IFTAR
277 local DEST
278
279 SRCFILE=$1
280
281 if [ -z "$2" ]
282 then
283 DEST=${BUILDDIR}
284 else
285 DEST=$2
286 fi
287
288 case "${SRCFILE##*.}" in
289 bz2)
290 IFTAR="$(basename $SRCFILE .bz2)"
291 IFTAR="${IFTAR##*.}"
292 if [ "${IFTAR}" == "tar" ]
293 then
294 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
295 fi
296 ;;
297 gz)
298 IFTAR="$(basename $SRCFILE .gz)"
299 IFTAR="${IFTAR##*.}"
300 if [ "${IFTAR}" == "tar" ]
301 then
302 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
303 fi
304 ;;
305 tbz2)
306 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
307 ;;
308 tgz)
309 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
310 ;;
311 *)
312 die "munpack failed"
313 ;;
314 esac
315 }
316
317 mpatch() {
318 local PATCHOPTS
319 local PATCHFILE
320
321 PATCHOPTS=$1
322 PATCHFILE=$2
323
324 patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
325 }
326
327
328 minstalldocs() {
329 local docfiles
330
331 docfiles="$@"
332
333 if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
334 then
335 install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
336 fi
337
338 for i in ${docfiles}
339 do
340 cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
341 install -m 0644 ${SRCDIR}/${i}.gz \
342 ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs."
343 done
344 }
345
346 mstriplibs() {
347 local stripdir="$@"
348
349 [ -z "${stripdir}" ] && stripdir=${BINDIR}
350 find ${stripdir} | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
351 }
352
353 mstripbins() {
354 local stripdir="$@"
355
356 [ -z "${stripdir}" ] && stripdir=${BINDIR}
357 find ${stripdir} | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
358 }
359
360 sminclude() {
361 local i
362
363 if [ -n "$@" ]
364 then
365 for i in $@
366 do
367 echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
368 source ${SMAGESCRIPTSDIR}/include/${i}.sminc
369 done
370 fi
371 }
372
373 setup_distcc_environment(){
374 if [ -x /usr/bin/distcc ]
375 then
376 echo "Using DistCC for compilation ..."
377 export PATH=/usr/lib/distcc/bin:${PATH} || die "distcc: could not export new $PATH"
378
379 #export distcc as compiler
380 # export CC="distcc"
381 # export CXX=distcc
382
383 export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
384
385
386 #ccache + distcc together
387 if [ "${SMAGE_USE_CCACHE}" == "true" ]
388 then
389 if [ -x /usr/bin/ccache ]
390 then
391 echo "Preparing DistCC to work together with CCache ..."
392 #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix"
393 # export CC="ccache distcc"
394 # export CXX="ccache distcc"
395 fi
396 fi
397
398 #creating distcc tempdir
399 install -o distcc -g daemon -d ${DISTCC_DIR}
400 chmod 1777 ${DISTCC_DIR}
401 fi
402 }
403
404 setup_ccache_environment(){
405 if [ -x /usr/bin/ccache ]
406 then
407 echo "Using CCache for compilation ..."
408 export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
409 #unset CC CXX
410 fi
411 }
412
413 # print out our version
414 showversion
415 echo
416
417 if [ -z "$1" ]
418 then
419 echo "No .smage2 file given. Exiting."
420 echo
421 exit 1
422 fi
423
424 #updating smage2-scripts
425 if [ "$1" == "update" ]
426 then
427 if [ ! -d ${SOURCEDIR} ]
428 then
429 install -d ${SOURCEDIR}
430 fi
431 syncsmage2
432 exit 0
433 fi
434
435 #creates md5sums for smages to given dir
436 if [ "$1" == "calcmd5" ]
437 then
438 if [ $# -ge 3 ]
439 then
440 SMAGENAME="$2"
441 MD5DIR="$3"
442 source ${SMAGENAME} || die "download source failed"
443
444 # overridable sourcedir; must be declared after source of the smage2
445 CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}"
446
447 [ -z "${SRC_URI}" ] && die "Nothing declared to calculate."
448
449 # end of array
450 EOA=${#SRC_URI[*]}
451
452 [ ! -d ${MD5DIR} ] && install -d ${MD5DIR}
453
454 # clear md5sum file
455 MY_MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
456 echo -n > ${MY_MD5_FILE}
457
458 for ((i=0; i < EOA; i++))
459 do
460 # url to file
461 my_SRC_URI="$(echo ${SRC_URI[${i}]} | cut -d' ' -f1)"
462
463 # subdir in sources dir; the my_SRCI_URI file goes to there
464 my_SRC_URI_DEST="$(echo ${SRC_URI[${i}]} | cut -d' ' -f2)"
465
466 # if my_src_uri_dest is not equal my_src_uri; than an other dir is used
467 if [[ ${my_SRC_URI_DEST} != ${my_SRC_URI} ]]
468 then
469 MY_SRC_FILE="${my_SRC_URI_DEST}/$(basename ${SRC_URI[${i}]})"
470 else
471 MY_SRC_FILE="$(basename ${SRC_URI[${i}]})"
472 fi
473
474 if [ -e "${CALC_SOURCEDIR}/${MY_SRC_FILE}" ]
475 then
476 echo "calculating $(basename ${MY_SRC_FILE}) ..."
477 ( cd ${CALC_SOURCEDIR}; md5sum "${MY_SRC_FILE}" ) >> ${MY_MD5_FILE}
478 else
479 echo "WARNING: File '$(basename ${MY_SRC_FILE}) not found in ${CALC_SOURCEDIR}."
480 fi
481
482 # unset them to be shure
483 unset my_SRC_URI
484 unset my_SRC_URI_DEST
485 unset my_SRC_URI_MIRROR
486 unset my_SOURCEDIR
487 done
488
489 echo
490 echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
491 echo
492 else
493 echo "Usage: Calculating MD5 Sums:"
494 echo " $(basename $0) calcmd5 /path/to/SMAGENAME /path/to/MD5DIR"
495 echo
496 echo
497 echo "Export the CALC_SOURCEDIR variable to override current SOURCEDIRs."
498 echo
499 exit 1
500 fi
501
502 exit 0
503 fi
504
505 #download sources
506 if [ "$1" == "download" -a -n "$2" ]
507 then
508 if [ ! -d ${SMAGESCRIPTSDIR} ]
509 then
510 install -d ${SMAGESCRIPTSDIR}
511 fi
512
513 # get smage
514 SMAGENAME="$2"
515 MD5DIR="$(dirname ${SMAGENAME})/md5"
516 source ${SMAGENAME} || die "download source failed"
517
518 download_sources
519 exit 0
520 fi
521
522 if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]
523 then
524 die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
525 fi
526
527 if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]
528 then
529 die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."
530 fi
531
532 if [ -z "${SOURCEDIR}" ]
533 then
534 die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
535 fi
536
537 if [ -z "${SMAGESCRIPTSDIR}" ]
538 then
539 die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
540 fi
541
542 if [ -z "${SMAGE2RSYNC}" ]
543 then
544 echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
545 exit 1
546 fi
547
548 if [ -z "${BINDIR}" ]
549 then
550 die "no BINDIR variable found in /etc/mage.rc"
551 fi
552
553 if [ -z "${CHOST}" ]
554 then
555 die "no CHOST variable found in /etc/mage.rc"
556 fi
557
558 if [ -z "${CFLAGS}" ]
559 then
560 die "no CFLAGS variable found in /etc/mage.rc"
561 fi
562
563 if [ -z "${CXXFLAGS}" ]
564 then
565 die "no CXXFLAGS variable found in /etc/mage.rc"
566 fi
567
568
569 source ${SMAGENAME} || die "source failed"
570 PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"
571 MD5DIR="$(dirname ${SMAGENAME})/md5"
572
573 xtitle "Compiling ${PKGNAME}"
574 echo "Compiling ${PKGNAME}"
575
576 #download sources
577 download_sources
578
579 #fixes some issues with these functions
580 export -f src_prepare || die "src_prepare export failed"
581 export -f src_compile || die "src_compile export failed"
582 export -f src_install || die "src_install export failed"
583
584 #fixes some compile issues
585 export CHOST="${CHOST}" || die "CHOST export failed"
586 export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
587 export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
588 export BINDIR="${BINDIR}" || die "BINDIR export failed"
589 export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
590
591
592 #setup distcc
593 #distcc mus be setup *before* ccache, as ccache need to be before distcc in path
594 if [ "${SMAGE_USE_DISTCC}" == "true" ]
595 then
596 setup_distcc_environment
597 fi
598
599 #setup ccache
600 if [ "${SMAGE_USE_CCACHE}" == "true" ]
601 then
602 setup_ccache_environment
603 fi
604
605
606 # small sleep to show our settings
607 sleep 1
608
609 #debug
610 #echo "CC=${CC}"
611 #echo "CXX=${CXX}"
612 #echo "DISTCC_DIR=${DISTCC_DIR}"
613 #echo "PATH: ${PATH}"
614 #echo "--------------------------------------"
615 #env
616 #echo "--------------------------------------"
617 #read
618 #debug end
619
620 #cleans up build if a previously one exists
621 if [ -d ${BUILDDIR} ]
622 then
623 rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
624 fi
625 install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
626
627 #cleans up srcdir if a previously unpacked one exists
628 if [ -d ${SRCDIR} ]
629 then
630 rm -rf ${SRCDIR}
631 fi
632
633 #cleans up bindir if a previous build exists or creates a new one
634 if [ -d ${BINDIR} ]
635 then
636 rm -rf ${BINDIR}
637 fi
638 install -d ${BINDIR} || die "couldn't create \$BINDIR."
639
640 #cleans up package temp dir if a previous build exists
641 if [ -d ${BUILDDIR}/${PKGNAME} ]
642 then
643 rm -rf ${BUILDDIR}/${PKGNAME}
644 fi
645
646 #cleans up timestamp if one exists
647 if [ -f /var/tmp/timestamp ]
648 then
649 mage rmstamp
650 fi
651
652 src_prepare || die "src_prepare failed"
653 src_compile || die "src_compile failed"
654 src_install || die "src_install failed"
655
656
657 #compressing doc, info & man files
658 echo -e "Compressing man-pages ..."
659 if [ -d ${BUILDDIR}/builded/usr/share/man ]
660 then
661 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man
662 fi
663
664 echo -e "Compressing info-pages ..."
665 if [ -d ${BUILDDIR}/builded/usr/share/info ]
666 then
667 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info
668 fi
669
670 # stripping all bins and libs
671 case ${NOSTRIP} in
672 true|TRUE|yes|y)
673 echo -e "NOSTRIP=true detected; Package will not be stripped ..."
674 ;;
675 *)
676 echo -e "Stripping binaries ..."
677 mstripbins ${BINDIR}
678 echo -e "Stripping libraries ..."
679 mstriplibs ${BINDIR}
680 ;;
681 esac
682
683 #the new buildpkg command
684 case ${NOPKGBUILD} in
685 true|TRUE|yes|y)
686 echo -e "NOPGKBUILD=true detected; Package will not be build ..."
687 ;;
688 *)
689 ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
690 echo -e "\nPackage ${PKGNAME} successfully builded.\n"
691 ;;
692 esac
693
694 #for sure
695 unset NOPKGBUILD
696 unset NOSTRIP
697
698 xtitleclean
699 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"

Properties

Name Value
svn:executable *