Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 172 - (show annotations) (download) (as text)
Sun Jul 31 14:16:19 2005 UTC (18 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 14597 byte(s)
added sminclude function

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.17 2005-07-31 14:16:19 niro Exp $
8
9 #01.10.2004
10 # added ccache support
11 # added distcc support
12
13 ## setup ##
14 SMAGEVERSION=0.3.6-r19
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}.incl"
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 showversion
509 if [ ! -d ${SMAGESCRIPTSDIR} ]
510 then
511 install -d ${SMAGESCRIPTSDIR}
512 fi
513
514 # get smage
515 SMAGENAME="$2"
516 MD5DIR="$(dirname ${SMAGENAME})/md5"
517 source ${SMAGENAME} || die "download source failed"
518
519 download_sources
520 exit 0
521 fi
522
523 if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]
524 then
525 die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
526 fi
527
528 if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]
529 then
530 die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."
531 fi
532
533 if [ -z "${SOURCEDIR}" ]
534 then
535 die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
536 fi
537
538 if [ -z "${SMAGESCRIPTSDIR}" ]
539 then
540 die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
541 fi
542
543 if [ -z "${SMAGE2RSYNC}" ]
544 then
545 echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
546 exit 1
547 fi
548
549 if [ -z "${BINDIR}" ]
550 then
551 die "no BINDIR variable found in /etc/mage.rc"
552 fi
553
554 if [ -z "${CHOST}" ]
555 then
556 die "no CHOST variable found in /etc/mage.rc"
557 fi
558
559 if [ -z "${CFLAGS}" ]
560 then
561 die "no CFLAGS variable found in /etc/mage.rc"
562 fi
563
564 if [ -z "${CXXFLAGS}" ]
565 then
566 die "no CXXFLAGS variable found in /etc/mage.rc"
567 fi
568
569
570 source ${SMAGENAME} || die "source failed"
571 PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"
572 MD5DIR="$(dirname ${SMAGENAME})/md5"
573
574 xtitle "Compiling ${PKGNAME}"
575 echo "Compiling ${PKGNAME}"
576
577 #download sources
578 download_sources
579
580 #fixes some issues with these functions
581 export -f src_prepare || die "src_prepare export failed"
582 export -f src_compile || die "src_compile export failed"
583 export -f src_install || die "src_install export failed"
584
585 #fixes some compile issues
586 export CHOST="${CHOST}" || die "CHOST export failed"
587 export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
588 export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
589 export BINDIR="${BINDIR}" || die "BINDIR export failed"
590 export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
591
592
593 #setup distcc
594 #distcc mus be setup *before* ccache, as ccache need to be before distcc in path
595 if [ "${SMAGE_USE_DISTCC}" == "true" ]
596 then
597 setup_distcc_environment
598 fi
599
600 #setup ccache
601 if [ "${SMAGE_USE_CCACHE}" == "true" ]
602 then
603 setup_ccache_environment
604 fi
605
606
607 # small sleep to show our settings
608 sleep 1
609
610 #debug
611 #echo "CC=${CC}"
612 #echo "CXX=${CXX}"
613 #echo "DISTCC_DIR=${DISTCC_DIR}"
614 #echo "PATH: ${PATH}"
615 #echo "--------------------------------------"
616 #env
617 #echo "--------------------------------------"
618 #read
619 #debug end
620
621 #cleans up build if a previously one exists
622 if [ -d ${BUILDDIR} ]
623 then
624 rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
625 fi
626 install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
627
628 #cleans up srcdir if a previously unpacked one exists
629 if [ -d ${SRCDIR} ]
630 then
631 rm -rf ${SRCDIR}
632 fi
633
634 #cleans up bindir if a previous build exists or creates a new one
635 if [ -d ${BINDIR} ]
636 then
637 rm -rf ${BINDIR}
638 fi
639 install -d ${BINDIR} || die "couldn't create \$BINDIR."
640
641 #cleans up package temp dir if a previous build exists
642 if [ -d ${BUILDDIR}/${PKGNAME} ]
643 then
644 rm -rf ${BUILDDIR}/${PKGNAME}
645 fi
646
647 #cleans up timestamp if one exists
648 if [ -f /var/tmp/timestamp ]
649 then
650 mage rmstamp
651 fi
652
653 src_prepare || die "src_prepare failed"
654 src_compile || die "src_compile failed"
655 src_install || die "src_install failed"
656
657
658 #compressing doc, info & man files
659 echo -e "Compressing man-pages ..."
660 if [ -d ${BUILDDIR}/builded/usr/share/man ]
661 then
662 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man
663 fi
664
665 echo -e "Compressing info-pages ..."
666 if [ -d ${BUILDDIR}/builded/usr/share/info ]
667 then
668 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info
669 fi
670
671 # stripping all bins and libs
672 case ${NOSTRIP} in
673 true|TRUE|yes|y)
674 echo -e "NOSTRIP=true detected; Package will not be stripped ..."
675 ;;
676 *)
677 echo -e "Stripping binaries ..."
678 mstripbins ${BINDIR}
679 echo -e "Stripping libraries ..."
680 mstriplibs ${BINDIR}
681 ;;
682 esac
683
684 #the new buildpkg command
685 case ${NOPKGBUILD} in
686 true|TRUE|yes|y)
687 echo -e "NOPGKBUILD=true detected; Package will not be build ..."
688 ;;
689 *)
690 ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
691 echo -e "\nPackage ${PKGNAME} successfully builded.\n"
692 ;;
693 esac
694
695 #for sure
696 unset NOPKGBUILD
697 unset NOSTRIP
698
699 xtitleclean
700 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"

Properties

Name Value
svn:executable *