Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 169 - (show annotations) (download) (as text)
Sun Jul 31 11:57:05 2005 UTC (18 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 14409 byte(s)
fixed locale issue; pkgs get not build or installed if the default system local ist another than LC_ALL=C

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.16 2005-07-31 11:57:05 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 setup_distcc_environment(){
361 if [ -x /usr/bin/distcc ]
362 then
363 echo "Using DistCC for compilation ..."
364 export PATH=/usr/lib/distcc/bin:${PATH} || die "distcc: could not export new $PATH"
365
366 #export distcc as compiler
367 # export CC="distcc"
368 # export CXX=distcc
369
370 export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
371
372
373 #ccache + distcc together
374 if [ "${SMAGE_USE_CCACHE}" == "true" ]
375 then
376 if [ -x /usr/bin/ccache ]
377 then
378 echo "Preparing DistCC to work together with CCache ..."
379 #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix"
380 # export CC="ccache distcc"
381 # export CXX="ccache distcc"
382 fi
383 fi
384
385 #creating distcc tempdir
386 install -o distcc -g daemon -d ${DISTCC_DIR}
387 chmod 1777 ${DISTCC_DIR}
388 fi
389 }
390
391 setup_ccache_environment(){
392 if [ -x /usr/bin/ccache ]
393 then
394 echo "Using CCache for compilation ..."
395 export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
396 #unset CC CXX
397 fi
398 }
399
400 # print out our version
401 showversion
402 echo
403
404 if [ -z "$1" ]
405 then
406 echo "No .smage2 file given. Exiting."
407 echo
408 exit 1
409 fi
410
411 #updating smage2-scripts
412 if [ "$1" == "update" ]
413 then
414 if [ ! -d ${SOURCEDIR} ]
415 then
416 install -d ${SOURCEDIR}
417 fi
418 syncsmage2
419 exit 0
420 fi
421
422 #creates md5sums for smages to given dir
423 if [ "$1" == "calcmd5" ]
424 then
425 if [ $# -ge 3 ]
426 then
427 SMAGENAME="$2"
428 MD5DIR="$3"
429 source ${SMAGENAME} || die "download source failed"
430
431 # overridable sourcedir; must be declared after source of the smage2
432 CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}"
433
434 [ -z "${SRC_URI}" ] && die "Nothing declared to calculate."
435
436 # end of array
437 EOA=${#SRC_URI[*]}
438
439 [ ! -d ${MD5DIR} ] && install -d ${MD5DIR}
440
441 # clear md5sum file
442 MY_MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
443 echo -n > ${MY_MD5_FILE}
444
445 for ((i=0; i < EOA; i++))
446 do
447 # url to file
448 my_SRC_URI="$(echo ${SRC_URI[${i}]} | cut -d' ' -f1)"
449
450 # subdir in sources dir; the my_SRCI_URI file goes to there
451 my_SRC_URI_DEST="$(echo ${SRC_URI[${i}]} | cut -d' ' -f2)"
452
453 # if my_src_uri_dest is not equal my_src_uri; than an other dir is used
454 if [[ ${my_SRC_URI_DEST} != ${my_SRC_URI} ]]
455 then
456 MY_SRC_FILE="${my_SRC_URI_DEST}/$(basename ${SRC_URI[${i}]})"
457 else
458 MY_SRC_FILE="$(basename ${SRC_URI[${i}]})"
459 fi
460
461 if [ -e "${CALC_SOURCEDIR}/${MY_SRC_FILE}" ]
462 then
463 echo "calculating $(basename ${MY_SRC_FILE}) ..."
464 ( cd ${CALC_SOURCEDIR}; md5sum "${MY_SRC_FILE}" ) >> ${MY_MD5_FILE}
465 else
466 echo "WARNING: File '$(basename ${MY_SRC_FILE}) not found in ${CALC_SOURCEDIR}."
467 fi
468
469 # unset them to be shure
470 unset my_SRC_URI
471 unset my_SRC_URI_DEST
472 unset my_SRC_URI_MIRROR
473 unset my_SOURCEDIR
474 done
475
476 echo
477 echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
478 echo
479 else
480 echo "Usage: Calculating MD5 Sums:"
481 echo " $(basename $0) calcmd5 /path/to/SMAGENAME /path/to/MD5DIR"
482 echo
483 echo
484 echo "Export the CALC_SOURCEDIR variable to override current SOURCEDIRs."
485 echo
486 exit 1
487 fi
488
489 exit 0
490 fi
491
492 #download sources
493 if [ "$1" == "download" -a -n "$2" ]
494 then
495 showversion
496 if [ ! -d ${SMAGESCRIPTSDIR} ]
497 then
498 install -d ${SMAGESCRIPTSDIR}
499 fi
500
501 # get smage
502 SMAGENAME="$2"
503 MD5DIR="$(dirname ${SMAGENAME})/md5"
504 source ${SMAGENAME} || die "download source failed"
505
506 download_sources
507 exit 0
508 fi
509
510 if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]
511 then
512 die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
513 fi
514
515 if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]
516 then
517 die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."
518 fi
519
520 if [ -z "${SOURCEDIR}" ]
521 then
522 die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
523 fi
524
525 if [ -z "${SMAGESCRIPTSDIR}" ]
526 then
527 die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
528 fi
529
530 if [ -z "${SMAGE2RSYNC}" ]
531 then
532 echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
533 exit 1
534 fi
535
536 if [ -z "${BINDIR}" ]
537 then
538 die "no BINDIR variable found in /etc/mage.rc"
539 fi
540
541 if [ -z "${CHOST}" ]
542 then
543 die "no CHOST variable found in /etc/mage.rc"
544 fi
545
546 if [ -z "${CFLAGS}" ]
547 then
548 die "no CFLAGS variable found in /etc/mage.rc"
549 fi
550
551 if [ -z "${CXXFLAGS}" ]
552 then
553 die "no CXXFLAGS variable found in /etc/mage.rc"
554 fi
555
556
557 source ${SMAGENAME} || die "source failed"
558 PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"
559 MD5DIR="$(dirname ${SMAGENAME})/md5"
560
561 xtitle "Compiling ${PKGNAME}"
562 echo "Compiling ${PKGNAME}"
563
564 #download sources
565 download_sources
566
567 #fixes some issues with these functions
568 export -f src_prepare || die "src_prepare export failed"
569 export -f src_compile || die "src_compile export failed"
570 export -f src_install || die "src_install export failed"
571
572 #fixes some compile issues
573 export CHOST="${CHOST}" || die "CHOST export failed"
574 export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
575 export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
576 export BINDIR="${BINDIR}" || die "BINDIR export failed"
577 export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
578
579
580 #setup distcc
581 #distcc mus be setup *before* ccache, as ccache need to be before distcc in path
582 if [ "${SMAGE_USE_DISTCC}" == "true" ]
583 then
584 setup_distcc_environment
585 fi
586
587 #setup ccache
588 if [ "${SMAGE_USE_CCACHE}" == "true" ]
589 then
590 setup_ccache_environment
591 fi
592
593
594 # small sleep to show our settings
595 sleep 1
596
597 #debug
598 #echo "CC=${CC}"
599 #echo "CXX=${CXX}"
600 #echo "DISTCC_DIR=${DISTCC_DIR}"
601 #echo "PATH: ${PATH}"
602 #echo "--------------------------------------"
603 #env
604 #echo "--------------------------------------"
605 #read
606 #debug end
607
608 #cleans up build if a previously one exists
609 if [ -d ${BUILDDIR} ]
610 then
611 rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
612 fi
613 install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
614
615 #cleans up srcdir if a previously unpacked one exists
616 if [ -d ${SRCDIR} ]
617 then
618 rm -rf ${SRCDIR}
619 fi
620
621 #cleans up bindir if a previous build exists or creates a new one
622 if [ -d ${BINDIR} ]
623 then
624 rm -rf ${BINDIR}
625 fi
626 install -d ${BINDIR} || die "couldn't create \$BINDIR."
627
628 #cleans up package temp dir if a previous build exists
629 if [ -d ${BUILDDIR}/${PKGNAME} ]
630 then
631 rm -rf ${BUILDDIR}/${PKGNAME}
632 fi
633
634 #cleans up timestamp if one exists
635 if [ -f /var/tmp/timestamp ]
636 then
637 mage rmstamp
638 fi
639
640 src_prepare || die "src_prepare failed"
641 src_compile || die "src_compile failed"
642 src_install || die "src_install failed"
643
644
645 #compressing doc, info & man files
646 echo -e "Compressing man-pages ..."
647 if [ -d ${BUILDDIR}/builded/usr/share/man ]
648 then
649 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man
650 fi
651
652 echo -e "Compressing info-pages ..."
653 if [ -d ${BUILDDIR}/builded/usr/share/info ]
654 then
655 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info
656 fi
657
658 # stripping all bins and libs
659 case ${NOSTRIP} in
660 true|TRUE|yes|y)
661 echo -e "NOSTRIP=true detected; Package will not be stripped ..."
662 ;;
663 *)
664 echo -e "Stripping binaries ..."
665 mstripbins ${BINDIR}
666 echo -e "Stripping libraries ..."
667 mstriplibs ${BINDIR}
668 ;;
669 esac
670
671 #the new buildpkg command
672 case ${NOPKGBUILD} in
673 true|TRUE|yes|y)
674 echo -e "NOPGKBUILD=true detected; Package will not be build ..."
675 ;;
676 *)
677 ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
678 echo -e "\nPackage ${PKGNAME} successfully builded.\n"
679 ;;
680 esac
681
682 #for sure
683 unset NOPKGBUILD
684 unset NOSTRIP
685
686 xtitleclean
687 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"

Properties

Name Value
svn:executable *