Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 66 - (show annotations) (download) (as text)
Wed Feb 16 17:50:54 2005 UTC (19 years, 2 months ago) by niro
File MIME type: application/x-sh
File size: 13513 byte(s)
rev bump to 0.3.6-r15; serveral fixes

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

Properties

Name Value
svn:executable *