Magellan Linux

Annotation of /branches/mage-next/src/smage2.in

Parent Directory Parent Directory | Revision Log Revision Log


Revision 63 - (hide annotations) (download) (as text)
Wed Feb 16 01:00:39 2005 UTC (19 years, 2 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/smage2.sh
File MIME type: application/x-sh
File size: 12337 byte(s)
rev bump to 0.3.6-r13; fixed a bad typo that caused smage2 not to fail while the checksum test

1 niro 24 #!/bin/bash
2    
3     # compiles/installs .smage2 source install scripts
4     # needs pkgbuild_dir (mage)
5    
6     # SMAGE2
7 niro 63 # version: 0.3.6-r14
8 niro 24
9     #01.10.2004
10     # added ccache support
11     # added distcc support
12    
13     ## setup ##
14 niro 63 SMAGEVERSION=0.3.6-r14
15 niro 24 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 niro 59 # $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 niro 61 [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
104 niro 59
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 niro 63 ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} ) || die "md5 failed"
183 niro 59 echo
184    
185     # not needed anymore
186     unset SRC_URI
187     }
188    
189 niro 24 # 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 niro 59 # print out our version
364     showversion
365     echo
366    
367 niro 24 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 niro 59 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 niro 24 showversion
440     if [ ! -d ${SMAGESCRIPTSDIR} ]
441     then
442     install -d ${SMAGESCRIPTSDIR}
443     fi
444 niro 59
445     # get smage
446     SMAGENAME="$2"
447     MD5DIR="$(dirname ${SMAGENAME})/md5"
448     source ${SMAGENAME} || die "download source failed"
449    
450     download_sources
451 niro 24 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 niro 59 MD5DIR="$(dirname ${SMAGENAME})/md5"
504 niro 24
505     xtitle "Compiling ${PKGNAME}"
506 niro 59 echo "Compiling ${PKGNAME}"
507    
508     #download sources
509     download_sources
510    
511 niro 24 #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 *