Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 66 - (hide 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 niro 24 #!/bin/bash
2    
3     # compiles/installs .smage2 source install scripts
4     # needs pkgbuild_dir (mage)
5    
6     # SMAGE2
7 niro 66 # version: 0.3.6-r15
8 niro 24
9     #01.10.2004
10     # added ccache support
11     # added distcc support
12    
13     ## setup ##
14 niro 66 SMAGEVERSION=0.3.6-r15
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 niro 66 local my_SRC_URI
107     local my_SRC_URI_DEST
108     local my_SRC_URI_MIRROR
109     local my_SOURCEDIR
110 niro 59 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 niro 66 ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )
120 niro 59 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 niro 66 # url to file
131     my_SRC_URI="$(echo ${SRC_URI[${i}]} | cut -d' ' -f1)"
132 niro 59
133 niro 66 # 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 niro 59 # if an mirrored file than replace first the mirror uri
145 niro 66 if [ -n "$(echo ${my_SRC_URI} | grep 'mirror://')" ]
146 niro 59 then
147     for mirror in ${MIRRORS}
148     do
149 niro 66 my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|mirror:/|${mirror}/sources|g")"
150 niro 59
151     #echo "DEBUG: ${MY_SRC_URI}"
152     if [[ ${FETCHING} == true ]]
153     then
154 niro 66 echo "==> fetching ${my_SRC_URI_MIRROR}"
155 niro 59 wget \
156     --passive-ftp \
157     --tries 3 \
158     --continue \
159     --progress bar \
160 niro 66 --directory-prefix="${my_SOURCEDIR}" \
161     "${my_SRC_URI_MIRROR}"
162 niro 59 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 niro 66 echo "==> fetching ${my_SRC_URI}"
175 niro 59 wget \
176     --passive-ftp \
177     --tries 3 \
178     --continue \
179     --progress bar \
180 niro 66 --directory-prefix="${my_SOURCEDIR}" \
181     "${my_SRC_URI}"
182 niro 59 if [ "$?" == "0" ]
183     then
184     break
185     else
186     continue
187     fi
188     fi
189     fi
190 niro 66
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 niro 59 done
197    
198     # recheck md5 sums
199     echo
200     echo ">== Checking MD5 sums:"
201 niro 63 ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} ) || die "md5 failed"
202 niro 59 echo
203    
204     # not needed anymore
205     unset SRC_URI
206     }
207    
208 niro 24 # 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 niro 59 # print out our version
383     showversion
384     echo
385    
386 niro 24 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 niro 59 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 niro 66 # overridable sourcedir; must be declared after source of the smage2
414     CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}"
415    
416 niro 59 [ -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 niro 66 # 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 niro 59 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 niro 66
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 niro 59 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 niro 24 showversion
478     if [ ! -d ${SMAGESCRIPTSDIR} ]
479     then
480     install -d ${SMAGESCRIPTSDIR}
481     fi
482 niro 59
483     # get smage
484     SMAGENAME="$2"
485     MD5DIR="$(dirname ${SMAGENAME})/md5"
486     source ${SMAGENAME} || die "download source failed"
487    
488     download_sources
489 niro 24 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 niro 59 MD5DIR="$(dirname ${SMAGENAME})/md5"
542 niro 24
543     xtitle "Compiling ${PKGNAME}"
544 niro 59 echo "Compiling ${PKGNAME}"
545    
546     #download sources
547     download_sources
548    
549 niro 24 #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 *