Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1436 - (hide annotations) (download) (as text)
Mon Jul 25 11:59:49 2011 UTC (12 years, 9 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/smage2.sh
File MIME type: application/x-sh
File size: 41140 byte(s)
-better pre/postinstrall, pre/postremove function support with split_packages. include preinstall_${subpackage} as preinstall function when declared
1 niro 24 #!/bin/bash
2    
3     # compiles/installs .smage2 source install scripts
4     # needs pkgbuild_dir (mage)
5    
6     # SMAGE2
7 niro 635 # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.62 2007-11-28 10:47:50 niro Exp $
8 niro 24
9     #01.10.2004
10     # added ccache support
11     # added distcc support
12    
13 niro 419 # set default user mage.rc
14     : ${MAGERC="/etc/mage.rc"}
15    
16 niro 24 ## setup ##
17     PKGSUFFIX="mpk"
18 niro 403 SRCPKGSUFFIX="mpks"
19 niro 24 SMAGENAME="$1"
20     SMAGESUFFIX="smage2"
21     MLIBDIR=/usr/lib/mage
22 niro 186 SMAGEVERSION="$( < ${MLIBDIR}/version)"
23 niro 24
24 niro 351 ## only for tests -> normally in /etc/rc.d/init.d/functions
25     COLRED="\033[1;6m\033[31m"
26     COLGREEN="\033[1;6m\033[32m"
27     COLYELLOW="\033[1;6m\033[33m"
28     COLBLUE="\033[1;6m\033[34m"
29     COLMAGENTA="\033[1;6m\033[35m"
30     COLWHITE="\033[1;6m\033[37m"
31     COLGRAY="\033[0;6m\033[37m"
32     COLBOLD="\033[1m"
33     COLDEFAULT="\033[0m"
34    
35     if [[ ${NOCOLORS} = true ]]
36     then
37     COLRED=""
38     COLGREEN=""
39     COLYELLOW=""
40     COLBLUE=""
41     COLMAGENTA=""
42     COLWHITE=""
43     COLGRAY=""
44     COLBOLD=""
45     COLDEFAULT=""
46     fi
47    
48 niro 169 # export default C locale
49     export LC_ALL=C
50    
51 niro 439 source /etc/mage.rc.global
52 niro 419 source ${MAGERC}
53 niro 1273 source ${MLIBDIR}/mage4.functions.sh
54 niro 24
55 niro 347 # set PKGDIR and BUILDDIR and BINDIR to MROOT
56     if [[ -n ${MROOT} ]]
57     then
58     export PKGDIR=${MROOT}/${PKGDIR}
59     export BUILDDIR=${MROOT}/${BUILDDIR}
60     export BINDIR=${MROOT}/${BINDIR}
61     fi
62    
63 niro 1346 # sources the smage file and uses state from distribution file if exist
64     # may helpful for repository support later on
65     smagesource()
66     {
67     local file="$1"
68     local mystate
69     local mycodename
70    
71     source ${file}
72    
73     [[ -n ${STATE} ]] && mystate="${STATE}"
74 niro 1349
75     # do not overide if local state was broken or disabled!
76     case ${STATE} in
77     broken) return ;;
78     disabled) return ;;
79     esac
80    
81 niro 1346 if [ -f ${SMAGESCRIPTSDIR}/distribution ]
82     then
83     source ${SMAGESCRIPTSDIR}/distribution
84     [[ -n ${STATE} ]] && mystate="${STATE}"
85     fi
86     # now switch state and export it
87     STATE="${mystate}"
88     }
89    
90 niro 306 showversion()
91     {
92 niro 24 echo -en "Magellan Source Install v${SMAGEVERSION} "
93     echo -e "-- Niels Rogalla (niro@magellan-linux.de)"
94     }
95    
96 niro 306 die()
97     {
98 niro 24 xtitleclean
99 niro 413 echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT}
100 niro 24 echo "SMAGE failed: $@"
101     exit 1
102     }
103    
104 niro 941 die_pipestatus()
105     {
106 niro 943 # the status change if we do any parameter declarations!!
107     # dont do this anymore, keep this in mind!
108     #
109     # local pos="$1"
110     # local comment="$2"
111     #
112     # [ ${PIPESTATUS[${pos}]} -ne 0 ] && die "${comment}"
113     #
114     [ ${PIPESTATUS[$1]} -ne 0 ] && die "$2"
115 niro 941 }
116    
117 niro 306 xtitle()
118     {
119     if [[ ${TERM} = xterm ]]
120 niro 24 then
121     echo -ne "\033]0;[sMage: $@]\007"
122     fi
123     return 0
124     }
125    
126 niro 306 xtitleclean()
127     {
128     if [[ ${TERM} = xterm ]]
129 niro 24 then
130     echo -ne "\033]0;\007"
131     fi
132     return 0
133     }
134    
135 niro 306 syncsmage2()
136     {
137 niro 24 xtitle "Updating smage2-script tree ..."
138     local i
139     for i in ${SMAGE2RSYNC}
140     do
141 niro 386 rsync ${RSYNC_FETCH_OPTIONS} ${i} ${SMAGESCRIPTSDIR}
142 niro 306 if [[ $? = 0 ]]
143 niro 24 then
144     break
145     else
146     continue
147     fi
148     done
149 niro 306
150     # clean up backup files (foo~)
151 niro 24 find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'
152 niro 306
153 niro 24 xtitleclean
154     }
155    
156 niro 59 # $1 filename
157 niro 306 get_db_md5_sum()
158     {
159 niro 59 local DB_FILE
160     local MD5_FILE
161     local i
162    
163     DB_ENTRY="$(basename $1)"
164     MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} ${SMAGESUFFIX})"
165    
166     i="$(cat ${MD5_FILE}| grep ${DB_ENTRY} | cut -d' ' -f1)"
167    
168     echo "${i}"
169     }
170    
171 niro 306 download_sources()
172     {
173 niro 59
174 niro 61 [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
175 niro 59
176     local EOA=${#SRC_URI[*]}
177 niro 66 local my_SRC_URI
178     local my_SRC_URI_DEST
179     local my_SRC_URI_MIRROR
180     local my_SOURCEDIR
181 niro 59 local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
182     local FETCHING
183     local i mirror
184 niro 1273 local wget_opts
185 niro 59
186 niro 1273 # filter wget command if busybox was found
187     wget_opts="$(busybox_filter_wget_options ${WGET_FETCH_OPTIONS})"
188 niro 306
189     # install SRCDIR/PNAME if not exist
190 niro 59 [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}
191    
192     # check if FETCHING is needed
193 niro 1273 ( cd ${SOURCEDIR}/${PNAME}; md5sum -c ${DB_MD5_SUM_FILE} &> /dev/null )
194 niro 306 if [[ $? = 0 ]]
195 niro 59 then
196 niro 439 # md5's ok, no fetching needed
197 niro 59 FETCHING=false
198     else
199     FETCHING=true
200     fi
201 niro 306
202 niro 59 for ((i=0; i < EOA; i++))
203     do
204 niro 66 # url to file
205     my_SRC_URI="$(echo ${SRC_URI[${i}]} | cut -d' ' -f1)"
206 niro 59
207 niro 66 # subdir in sources dir; the my_SRCI_URI file goes to there
208     my_SRC_URI_DEST="$(echo ${SRC_URI[${i}]} | cut -d' ' -f2)"
209    
210     # if my_src_uri_dest is not equal my_src_uri; than an other dir is used
211     if [[ ${my_SRC_URI_DEST} != ${my_SRC_URI} ]]
212     then
213     my_SOURCEDIR="${SOURCEDIR}/${PNAME}/${my_SRC_URI_DEST}"
214     else
215     my_SOURCEDIR="${SOURCEDIR}/${PNAME}"
216     fi
217    
218 niro 885 # create the SOURCEDIR
219     install -d ${my_SOURCEDIR}
220    
221 niro 59 # if an mirrored file than replace first the mirror uri
222 niro 439 if [[ -n $(echo ${my_SRC_URI} | grep 'mirror://') ]]
223 niro 59 then
224     for mirror in ${MIRRORS}
225     do
226 niro 66 my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|mirror:/|${mirror}/sources|g")"
227 niro 59
228 niro 306 if [[ ${FETCHING} = true ]]
229 niro 59 then
230 niro 439 echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}"
231 niro 59 wget \
232 niro 1273 ${wget_opts} \
233 niro 883 --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \
234 niro 66 "${my_SRC_URI_MIRROR}"
235 niro 306 if [[ $? = 0 ]]
236 niro 59 then
237     break
238     else
239     continue
240     fi
241     fi
242     done
243 niro 439 elif [[ -n $(echo ${my_SRC_URI} | grep 'sourceforge://') ]]
244     then
245     for mirror in ${SOURCEFORGE_MIRRORS}
246     do
247     my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|sourceforge:/|${mirror}|g")"
248    
249     if [[ ${FETCHING} = true ]]
250     then
251     echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}"
252     wget \
253 niro 1273 ${wget_opts} \
254 niro 883 --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \
255 niro 439 "${my_SRC_URI_MIRROR}"
256     if [[ $? = 0 ]]
257     then
258     break
259     else
260     continue
261     fi
262     fi
263     done
264     elif [[ -n $(echo ${my_SRC_URI} | grep 'gnu://') ]]
265     then
266     for mirror in ${GNU_MIRRORS}
267     do
268     my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|gnu:/|${mirror}|g")"
269    
270     if [[ ${FETCHING} = true ]]
271     then
272     echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}"
273     wget \
274 niro 1273 ${wget_opts} \
275 niro 883 --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \
276 niro 439 "${my_SRC_URI_MIRROR}"
277     if [[ $? = 0 ]]
278     then
279     break
280     else
281     continue
282     fi
283     fi
284     done
285 niro 459 elif [[ -n $(echo ${my_SRC_URI} | grep 'kde://') ]]
286     then
287     for mirror in ${KDE_MIRRORS}
288     do
289     my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|kde:/|${mirror}|g")"
290    
291     if [[ ${FETCHING} = true ]]
292     then
293     echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}"
294     wget \
295 niro 1273 ${wget_opts} \
296 niro 883 --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \
297 niro 459 "${my_SRC_URI_MIRROR}"
298     if [[ $? = 0 ]]
299     then
300     break
301     else
302     continue
303     fi
304     fi
305     done
306     elif [[ -n $(echo ${my_SRC_URI} | grep 'gnome://') ]]
307     then
308     for mirror in ${GNOME_MIRRORS}
309     do
310     my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|gnome:/|${mirror}|g")"
311    
312     if [[ ${FETCHING} = true ]]
313     then
314     echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}"
315     wget \
316 niro 1273 ${wget_opts} \
317 niro 883 --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \
318 niro 459 "${my_SRC_URI_MIRROR}"
319     if [[ $? = 0 ]]
320     then
321     break
322     else
323     continue
324     fi
325     fi
326     done
327 niro 59 else
328 niro 306 if [[ ${FETCHING} = true ]]
329 niro 59 then
330 niro 439 echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI}${COLDEFAULT}"
331 niro 59 wget \
332 niro 1273 ${wget_opts} \
333 niro 883 --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI})" \
334 niro 66 "${my_SRC_URI}"
335 niro 59 fi
336     fi
337 niro 306
338 niro 66 # unset them to be shure
339     unset my_SRC_URI
340     unset my_SRC_URI_DEST
341     unset my_SRC_URI_MIRROR
342     unset my_SOURCEDIR
343 niro 59 done
344    
345     # recheck md5 sums
346     echo
347 niro 439 echo -e "${COLBLUE}===${COLGREEN} Checking MD5 sums:${COLDEFAULT}"
348 niro 1273 ( cd ${SOURCEDIR}/${PNAME}; md5sum -c ${DB_MD5_SUM_FILE} ) || die "md5 failed"
349 niro 59 echo
350    
351     # not needed anymore
352     unset SRC_URI
353     }
354    
355 niro 24 # dummy function, used if that not exist in smage file
356 niro 306 src_prepare()
357     {
358 niro 24 echo "no src_prepare defined"
359     sleep 2
360     return 0
361     }
362    
363     # dummy function, used if that not exist in smage file
364 niro 306 src_compile()
365     {
366 niro 24 echo "no src_compile defined"
367     sleep 2
368     return 0
369     }
370    
371     # dummy function, used if that not exist in smage file
372 niro 306 src_install()
373     {
374 niro 24 echo "no src_install defined"
375     sleep 2
376     return 0
377     }
378    
379 niro 351 mlibdir()
380     {
381     local libdir=lib
382     [[ ${ARCH} = x86_64 ]] && libdir=lib64
383    
384     echo "${libdir}"
385     }
386    
387 niro 306 mconfigure()
388     {
389 niro 24 if [ -x ./configure ]
390     then
391 niro 306 ./configure \
392     --prefix=/usr \
393     --host=${CHOST} \
394 niro 833 --build=${CHOST} \
395 niro 306 --mandir=/usr/share/man \
396     --infodir=/usr/share/info \
397     --datadir=/usr/share \
398     --sysconfdir=/etc \
399     --localstatedir=/var/lib \
400 niro 351 --libdir=/usr/$(mlibdir) \
401 niro 306 "$@" || die "mconfigure failed"
402 niro 24 else
403     echo "configure is not an executable ..."
404     exit 1
405     fi
406     }
407    
408 niro 306 minstall()
409     {
410     if [ -f ./[mM]akefile -o -f ./GNUmakefile ]
411     then
412 niro 24 make prefix=${BINDIR}/usr \
413     datadir=${BINDIR}/usr/share \
414     infodir=${BINDIR}/usr/share/info \
415     localstatedir=${BINDIR}/var/lib \
416     mandir=${BINDIR}/usr/share/man \
417     sysconfdir=${BINDIR}/etc \
418 niro 351 libdir=${BINDIR}/usr/$(mlibdir) \
419 niro 24 "$@" install || die "minstall failed"
420     else
421     die "no Makefile found"
422     fi
423     }
424    
425 niro 306 mmake()
426     {
427 niro 24 make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
428     }
429    
430 niro 306 munpack()
431     {
432 niro 24 local SRCFILE
433     local IFTAR
434     local DEST
435    
436     SRCFILE=$1
437 niro 306
438 niro 597 if [[ -z $2 ]]
439 niro 24 then
440     DEST=${BUILDDIR}
441     else
442     DEST=$2
443     fi
444 niro 306
445 niro 411 [[ ! -d ${DEST} ]] && install -d ${DEST}
446    
447 niro 24 case "${SRCFILE##*.}" in
448     bz2)
449     IFTAR="$(basename $SRCFILE .bz2)"
450     IFTAR="${IFTAR##*.}"
451 niro 306 if [[ ${IFTAR} = tar ]]
452 niro 24 then
453 niro 597 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.bz2 unpack failed."
454     else
455     pushd ${DEST} > /dev/null
456     bzcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .bz2) || die ".bz2 unpack failed."
457     popd > /dev/null
458 niro 24 fi
459     ;;
460     gz)
461     IFTAR="$(basename $SRCFILE .gz)"
462     IFTAR="${IFTAR##*.}"
463 niro 306 if [[ ${IFTAR} = tar ]]
464 niro 24 then
465 niro 597 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.gz unpack failed."
466     else
467     pushd ${DEST} > /dev/null
468     zcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .gz) || die ".gz unpack failed."
469     popd > /dev/null
470 niro 24 fi
471     ;;
472 niro 1351 xz)
473     IFTAR="$(basename $SRCFILE .xz)"
474     IFTAR="${IFTAR##*.}"
475     if [[ ${IFTAR} = tar ]]
476     then
477     tar --no-same-owner -xvJf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.xz unpack failed."
478     else
479     pushd ${DEST} > /dev/null
480     xzcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .xz) || die ".xz unpack failed."
481     popd > /dev/null
482     fi
483     ;;
484 niro 600 tbz2|mpks|mpk)
485 niro 597 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tbz2 unpack failed."
486 niro 24 ;;
487     tgz)
488 niro 597 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tgz unpack failed."
489 niro 24 ;;
490 niro 1351 txz|mpkzs|mpkz)
491     tar --no-same-owner -xvJf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".txz unpack failed."
492     ;;
493 niro 597 rar)
494     unrar x ${SOURCEDIR}/${PNAME}/${SRCFILE} ${DEST} || die ".rar unpack failed."
495     ;;
496 niro 600 zip|xpi)
497 niro 597 unzip ${SOURCEDIR}/${PNAME}/${SRCFILE} -d ${DEST} || die ".zip unpack failed."
498     ;;
499     rpm)
500 niro 635 pushd ${DEST} > /dev/null
501 niro 597 rpm2targz ${SOURCEDIR}/${PNAME}/${SRCFILE} || die "rpm2targz: .rpm unpack failed."
502 niro 602 tar --no-same-owner -xvzf ${SRCFILE/.rpm/.tar.gz} || die "tar: .rpm unpack failed."
503 niro 635 if [[ -f ${DEST}/${SRCFILE/.rpm/.tar.gz} ]]
504 niro 602 then
505 niro 635 rm ${DEST}/${SRCFILE/.rpm/.tar.gz}
506 niro 602 fi
507 niro 597 ;;
508 niro 24 *)
509     die "munpack failed"
510     ;;
511     esac
512     }
513    
514 niro 306 mpatch()
515     {
516 niro 24 local PATCHOPTS
517     local PATCHFILE
518 niro 447 local i
519 niro 24
520     PATCHOPTS=$1
521     PATCHFILE=$2
522    
523 niro 447 if [[ -z $2 ]]
524     then
525     PATCHFILE=$1
526    
527     ## patch level auto-detection, get patch level
528     for ((i=0; i < 10; i++))
529     do
530     patch --dry-run -Np${i} -i ${SOURCEDIR}/${PNAME}/${PATCHFILE} > /dev/null
531     if [[ $? = 0 ]]
532     then
533     PATCHOPTS="-Np${i}"
534     break
535     fi
536     done
537     fi
538    
539 niro 384 echo -e "${COLBLUE}*** ${COLGREEN}Applying patch '${PATCHFILE}'${COLDEFAULT}"
540 niro 24 patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
541     }
542    
543 niro 497 mlibtoolize()
544     {
545     local opts="$@"
546 niro 1435 [[ -z ${opts} ]] && opts="--verbose --install --force"
547 niro 24
548 niro 497 libtoolize ${opts} || die "running: mlibtoolize ${opts}"
549     }
550    
551 niro 1291 mautoreconf()
552     {
553     local opts="$@"
554     [[ -z ${opts} ]] && opts="--verbose --install --force"
555    
556     autoreconf ${opts} || die "running: mautoreconf ${opts}"
557     }
558    
559 niro 306 minstalldocs()
560     {
561 niro 24 local docfiles
562     docfiles="$@"
563 niro 306
564 niro 24 if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
565     then
566     install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
567     fi
568 niro 306
569 niro 953 local i
570 niro 24 for i in ${docfiles}
571     do
572 niro 953 if [ -f ${i} ]
573     then
574     cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
575     install -m 0644 ${SRCDIR}/${i}.gz \
576     ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs."
577     fi
578 niro 24 done
579     }
580    
581 niro 306 mstriplibs()
582     {
583 niro 79 local stripdir="$@"
584    
585     [ -z "${stripdir}" ] && stripdir=${BINDIR}
586     find ${stripdir} | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
587     }
588    
589 niro 306 mstripbins()
590     {
591 niro 79 local stripdir="$@"
592    
593     [ -z "${stripdir}" ] && stripdir=${BINDIR}
594     find ${stripdir} | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
595     }
596    
597 niro 943 mcompressdocs()
598     {
599     local bindir="$@"
600    
601     if [ -d ${bindir}/usr/share/man ]
602     then
603     echo -e "${COLBLUE}===${COLGREEN} compressing man-pages ...${COLDEFAULT}"
604     ${MLIBDIR}/compressdoc -g -9 ${bindir}/usr/share/man
605     fi
606    
607     if [ -d ${bindir}/usr/share/info ]
608     then
609     echo -e "${COLBLUE}===${COLGREEN} compressing info-pages ...${COLDEFAULT}"
610     ${MLIBDIR}/compressdoc -g -9 ${bindir}/usr/share/info
611     fi
612     }
613    
614 niro 306 sminclude()
615     {
616 niro 172 local i
617    
618 niro 183 if [[ -n "$@" ]]
619 niro 172 then
620     for i in $@
621     do
622 niro 175 echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
623 niro 172 source ${SMAGESCRIPTSDIR}/include/${i}.sminc
624     done
625 niro 177 echo
626 niro 172 fi
627     }
628    
629 niro 306 setup_distcc_environment()
630     {
631 niro 24 if [ -x /usr/bin/distcc ]
632     then
633 niro 441 echo -e "${COLBLUE}---${COLGREEN} Using DistCC for compilation ...${COLDEFAULT}"
634 niro 351 export PATH=/usr/$(mlibdir)/distcc/bin:${PATH} || die "distcc: could not export new $PATH"
635 niro 24
636     export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
637    
638 niro 306 # creating distcc tempdir
639 niro 24 install -o distcc -g daemon -d ${DISTCC_DIR}
640     chmod 1777 ${DISTCC_DIR}
641     fi
642     }
643    
644 niro 306 setup_ccache_environment()
645     {
646 niro 24 if [ -x /usr/bin/ccache ]
647     then
648 niro 441 echo -e "${COLBLUE}---${COLGREEN} Using CCache for compilation ...${COLDEFAULT}"
649 niro 351 export PATH=/usr/$(mlibdir)/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
650 niro 24 fi
651     }
652    
653 niro 193
654     # fixes given dependencies to match a MAGE_TARGET
655 niro 198 # fix_mage_deps -target s/depend # <-- note -target !
656 niro 306 fix_mage_deps()
657     {
658 niro 193 local target="$1"
659     local depend="$2"
660     local NDEPEND
661     local sym dep cat pver pname
662    
663     # deps and provides are special
664     # they must be fixed to match the target
665    
666     # run this only if target and depend is not empty
667     if [ -n "${target}" ] && [ -n "${depend}" ]
668     then
669     # fix DEPEND
670     while read sym dep
671     do
672 niro 427 # ignore empty lines
673     [[ -z ${dep} ]] && continue
674    
675 niro 193 cat="$(dirname ${dep})"
676 niro 199 # change if not virtual
677 niro 200 if [[ ${cat} = virtual ]]
678 niro 199 then
679 niro 200 pname="$(basename ${dep})"
680     else
681 niro 199 # fix pver to target-pver
682     # to get pname-target-pver
683 niro 193
684 niro 199 # doing it backwards !
685     pver="${dep##*-}"
686 niro 200 # full pver
687     pname="$(basename ${dep/-${pver}/})${target}-${pver}"
688 niro 199 fi
689 niro 193
690     # do not add empty lines
691     if [ -z "${NDEPEND}" ]
692     then
693 niro 200 NDEPEND="${sym} ${cat}/${pname}"
694 niro 193 else
695     NDEPEND="${NDEPEND}
696 niro 201 ${sym} ${cat}/${pname}"
697 niro 193 fi
698    
699     unset cat pname pver
700     done << EOF
701     ${depend}
702     EOF
703     # set NDEPEND to DEPEND
704     depend="${NDEPEND}"
705     fi
706    
707     echo "${depend}"
708     }
709    
710 niro 192 # build_mage_script(): helper functions for regen_mage_tree()
711 niro 191 # generates an mage file with given information in smage file
712     # needs at least:
713     # PNAME name of pkg
714     # PVER version
715     # PBUILD revision
716     # PCATEGORIE categorie of the pkg
717     # STATE state of pkg stable|unstable|old
718     # DESCRIPTION va short description (opt)
719     # HOMEPAGE homepage (opt)
720     # DEPEND runtime dependencies (opt)
721     # SDEPEND add. needed deps to build the pkg (opt)
722     # PROVIDE provides a virtual (opt)
723     #
724     # special tags:
725     # PKGTYPE type of pkg
726     # INHERITS which functions get included
727 niro 832 # SPECIAL_FUNCTIONS special functions which should also be added
728 niro 191 # warning: they get killed before the build starts !
729 niro 943 # SPLIT_PACKAGES names of all subpackages which are splitted from parent
730     # SPLIT_PACKAGE_BASE base package name for splitpackages
731     # (only in the resulting magefile}
732 niro 191 #
733     # MAGE_TREE_DEST target destination of the generated tree
734     # REGEN_MAGE_TREE set to 'true' to enable this
735 niro 193 #
736 niro 195 # gets called with build_mage_script target
737 niro 192 build_mage_script()
738 niro 191 {
739     local magefile
740     local dest
741 niro 193 local target
742 niro 943 local split_pkg_base
743 niro 191 local sym
744     local depname
745    
746     # if MAGE_TREE_DEST not set use BUILDDIR
747     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
748    
749     # determinate which suffix this mage file should get, if any
750 niro 943 [[ $1 = --target ]] && shift && target="-$1"
751 niro 191
752 niro 943 # mark package as splitpackage
753     [[ $1 = --split-pkg-base ]] && shift && split_pkg_base="$1"
754    
755 niro 191 # name of magefile
756 niro 193 magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage"
757 niro 191
758     # destination to magefile
759 niro 193 dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}"
760 niro 191
761     # show what we are doing
762 niro 439 echo -e "${COLBLUE}===${COLGREEN} generating mage file:${COLDEFAULT}"
763     echo "${dest}"
764 niro 191
765     install -d "$(dirname ${dest})"
766     # now build the mage file
767     > ${dest}
768    
769     # pgkname and state
770 niro 193 echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest}
771 niro 191 echo "STATE=\"${STATE}\"" >> ${dest}
772    
773     # description and homepage
774     echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest}
775     echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest}
776    
777 niro 196 # special tags and vars
778 niro 191 echo "PKGTYPE=\"${PKGTYPE}\"" >> ${dest}
779 niro 214
780     # echo MAGE_TARGETS ## note -target is needed !
781     echo "MAGE_TARGETS=\"${target}\"" >> ${dest}
782    
783 niro 943 # split package base
784     echo "SPLIT_PACKAGE_BASE=\"${split_pkg_base}\"" >> ${dest}
785    
786 niro 197 # add special vars
787     if [ -n "${SPECIAL_VARS}" ]
788 niro 191 then
789     local i
790 niro 197 for i in ${SPECIAL_VARS}
791 niro 191 do
792 niro 197 # being tricky here :)
793     echo "${i}=\"$(eval echo \$${i})\"" >> ${dest}
794 niro 191 done
795     fi
796 niro 214
797 niro 197 # add at least all includes
798     if [ -n "${INHERITS}" ]
799 niro 196 then
800 niro 197 echo -n "minclude" >> ${dest}
801 niro 196 local i
802 niro 197 for i in ${INHERITS}
803 niro 196 do
804 niro 197 echo -n " ${i}" >> ${dest}
805 niro 196 done
806 niro 1351 # a CRLF is needed here!
807     echo >> ${dest}
808 niro 196 fi
809    
810 niro 191 # deps and provides
811 niro 193 echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest}
812     echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest}
813 niro 191 echo "PROVIDE=\"${PROVIDE}\"" >> ${dest}
814    
815     # add special functions
816     if [ -n "${SPECIAL_FUNCTIONS}" ]
817     then
818     local i
819     for i in ${SPECIAL_FUNCTIONS}
820     do
821     # add to mage (quotes needed !)
822     typeset -f "${i}" >> ${dest}
823     # unset to be safe (quotes needed !)
824 niro 192 #unset "${i}" <-- later to get every target built
825 niro 191 done
826     fi
827    
828     # pre|post-install|removes
829     typeset -f preinstall >> ${dest}
830     typeset -f postinstall >> ${dest}
831     typeset -f preremove >> ${dest}
832     typeset -f postremove >> ${dest}
833     }
834    
835     regen_mage_tree()
836     {
837 niro 1436 local subpackage
838 niro 191
839     # build them only if requested
840     if [[ ${REGEN_MAGE_TREE} = true ]]
841     then
842 niro 195 # run it without targets
843 niro 943 if [[ -n ${MAGE_TARGETS} ]]
844 niro 195 then
845 niro 943 # build for each target a mage file
846     # run it with several targets
847 niro 191 echo
848 niro 1436 for subpackage in ${MAGE_TARGETS}
849 niro 943 do
850 niro 1436 build_mage_script --target "${subpackage}"
851 niro 943 done
852 niro 191 echo
853 niro 195
854 niro 943 # run it for splitpackages
855     elif [[ -n ${SPLIT_PACKAGES} ]]
856     then
857     local split_pkg_base="${PNAME}"
858     # save smage environment
859     split_save_variables
860     # build for each subpackage a mage file
861 niro 195 # run it with several targets
862 niro 943 echo
863 niro 1436 for subpackage in ${SPLIT_PACKAGES}
864 niro 195 do
865 niro 943 # get the right variables for the split
866 niro 1436 export PNAME="${subpackage}"
867     split_info_${subpackage}
868     # get the preinstall etc
869     split_export_inherits ${subpackage}
870 niro 943 build_mage_script --split-pkg-base "${split_pkg_base}"
871 niro 1436 # delete split preinstall etc
872     split_delete_inherits ${subpackage}
873 niro 951 # restore smage environment
874     split_restore_variables
875 niro 195 done
876 niro 943 echo
877 niro 951 # unset all saved smage variables
878     split_unset_variables
879 niro 943
880     else
881     echo
882     build_mage_script
883     echo
884 niro 195 fi
885 niro 191 fi
886    
887     # now unset all uneeded vars to be safe
888 niro 192 # unset PKGNAME <-- don't do that; smage needs this var
889     # unset to be safe (quotes needed !)
890 niro 477 # for i in ${SPECIAL_FUNCTIONS}
891     # do
892     # unset "${i}"
893     # done
894 niro 192 unset SPECIAL_FUNCTIONS
895 niro 477 # for i in ${SPECIAL_VARS}
896     # do
897     # unset "${i}"
898     # done
899 niro 194 unset SPECIAL_VARS
900 niro 191 unset STATE
901     unset DESCRIPTION
902     unset HOMEPAGE
903     unset PKGTYPE
904     unset INHERITS
905     unset DEPEND
906     unset SDEPEND
907     unset PROVIDE
908     unset preinstall
909     unset postinstall
910     unset preremove
911     unset postremove
912     }
913    
914 niro 943 split_save_variables()
915     {
916     export SAVED_PNAME="${PNAME}"
917     export SAVED_PVER="${PVER}"
918     export SAVED_PBUILD="${PBUILD}"
919     export SAVED_PCATEGORIE="${PCATEGORIE}"
920     export SAVED_DESCRIPTION="${DESCRIPTION}"
921     export SAVED_HOMEPAGE="${HOMEPAGE}"
922     export SAVED_SPECIAL_VARS="${SPECIAL_VARS}"
923     export SAVED_STATE="${STATE}"
924     export SAVED_PKGTYPE="${PKGTYPE}"
925     export SAVED_INHERITS="${INHERITS}"
926     export SAVED_DEPEND="${DEPEND}"
927     export SAVED_SDEPEND="${SDEPEND}"
928     export SAVED_PROVIDE="${PROVIDE}"
929 niro 945 export SAVED_NOPKGBUILD="${NOPKGBUILD}"
930 niro 943
931 niro 945 # bindir too
932     export SAVED_BINDIR="${BINDIR}"
933    
934     # export the SPLIT_PACKAGE_BASE
935     export SPLIT_PACKAGE_BASE="${SAVED_PNAME}"
936    
937 niro 943 # functions
938     if [[ ! -z $(typeset -f preinstall) ]]
939     then
940     # rename the old one
941     local saved_preinstall
942     saved_preinstall=SAVED_$(typeset -f preinstall)
943     eval "${saved_preinstall}"
944     export -f SAVED_preinstall
945     fi
946    
947     if [[ ! -z $(typeset -f postinstall) ]]
948     then
949     # rename the old one
950     local saved_postinstall
951     saved_postinstall=SAVED_$(typeset -f postinstall)
952     eval "${saved_postinstall}"
953     export -f SAVED_postinstall
954     fi
955    
956     if [[ ! -z $(typeset -f preremove) ]]
957     then
958     # rename the old one
959     local saved_preremove
960     saved_preremove=SAVED_$(typeset -f preremove)
961     eval "${saved_preremove}"
962     export -f SAVED_preremove
963     fi
964    
965     if [[ ! -z $(typeset -f postremove) ]]
966     then
967     # rename the old one
968     local saved_postremove
969     saved_postremove=SAVED_$(typeset -f postremove)
970     eval "${saved_postremove}"
971     export -f SAVED_postremove
972     fi
973     }
974    
975     split_restore_variables()
976     {
977     export PNAME="${SAVED_PNAME}"
978     export PVER="${SAVED_PVER}"
979     export PBUILD="${SAVED_PBUILD}"
980     export PCATEGORIE="${SAVED_PCATEGORIE}"
981     export DESCRIPTION="${SAVED_DESCRIPTION}"
982     export HOMEPAGE="${SAVED_HOMEPAGE}"
983     export SPECIAL_VARS="${SAVED_SPECIAL_VARS}"
984     export STATE="${SAVED_STATE}"
985     export PKGTYPE="${SAVED_PKGTYPE}"
986     export INHERITS="${SAVED_INHERITS}"
987     export DEPEND="${SAVED_DEPEND}"
988     export SDEPEND="${SAVED_SDEPEND}"
989     export PROVIDE="${SAVED_PROVIDE}"
990 niro 945 export NOPKGBUILD="${SAVED_NOPKGBUILD}"
991 niro 943
992 niro 945 # bindir too
993     export BINDIR="${SAVED_BINDIR}"
994    
995 niro 943 # functions
996     if [[ ! -z $(typeset -f SAVED_preinstall) ]]
997     then
998     # rename the old one
999     local saved_preinstall
1000     saved_preinstall=$(typeset -f SAVED_preinstall)
1001     eval "${saved_preinstall/SAVED_/}"
1002     export -f preinstall
1003     fi
1004    
1005     if [[ ! -z $(typeset -f SAVED_postinstall) ]]
1006     then
1007     # rename the old one
1008     local saved_postinstall
1009     saved_postinstall=$(typeset -f SAVED_postinstall)
1010     eval "${saved_postinstall/SAVED_/}"
1011     export -f postinstall
1012     fi
1013    
1014     if [[ ! -z $(typeset -f SAVED_preremove) ]]
1015     then
1016     # rename the old one
1017     local saved_preremove
1018     saved_preremove=$(typeset -f SAVED_preremove)
1019     eval "${saved_preremove/SAVED_/}"
1020     export -f preremove
1021     fi
1022    
1023     if [[ ! -z $(typeset -f SAVED_postremove) ]]
1024     then
1025     # rename the old one
1026     local saved_postremove
1027     saved_postremove=$(typeset -f SAVED_postremove)
1028     eval "${saved_postremove/SAVED_/}"
1029     export -f postremove
1030     fi
1031 niro 951 }
1032 niro 943
1033 niro 951 split_unset_variables()
1034     {
1035 niro 943 # unset saved vars; not needed anymore
1036     unset SAVED_PNAME
1037     unset SAVED_PVER
1038     unset SAVED_PBUILD
1039     unset SAVED_PCATEGORIE
1040     unset SAVED_DESCRIPTION
1041     unset SAVED_HOMEPAGE
1042     unset SAVED_SPECIAL_VARS
1043     unset SAVED_STATE
1044     unset SAVED_PKGTYPE
1045     unset SAVED_INHERITS
1046     unset SAVED_DEPEND
1047     unset SAVED_SDEPEND
1048     unset SAVED_PROVIDE
1049 niro 945 unset SAVED_BINDIR
1050     unset SAVED_NOPKGBUILD
1051     unset SPLIT_PACKAGE_BASE
1052 niro 943 unset -f SAVED_preinstall
1053     unset -f SAVED_postinstall
1054     unset -f SAVED_preremove
1055     unset -f SAVED_postremove
1056     }
1057    
1058 niro 1436 split_export_inherits()
1059     {
1060     local subpackage="$1"
1061     local func
1062     local newfunc
1063    
1064     for func in preinstall postinstall preremove postremove
1065     do
1066     if [[ ! -z $(typeset -f ${func}_${subpackage}) ]]
1067     then
1068     newfunc=$(typeset -f ${func}_${subpackage})
1069     newfunc="${newfunc/_${subpackage} (/ (}"
1070     eval "${newfunc}"
1071     fi
1072     done
1073     }
1074    
1075     split_delete_inherits()
1076     {
1077     local subpackage="$1"
1078     local func
1079    
1080     for func in preinstall postinstall preremove postremove
1081     do
1082     if [[ ! -z $(typeset -f ${func}_${subpackage}) ]]
1083     then
1084     unset -f ${func}
1085     fi
1086     done
1087     }
1088    
1089 niro 253 export_inherits()
1090     {
1091     local include="$1"
1092     shift
1093    
1094     while [ "$1" ]
1095     do
1096     local functions="$1"
1097    
1098     # sanity checks
1099     [ -z "${include}" ] && die "export_inherits(): \$include not given."
1100     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
1101    
1102     eval "${functions}() { ${include}_${functions} ; }"
1103    
1104     # debug
1105     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
1106    
1107     shift
1108     done
1109     }
1110    
1111 niro 255 generate_package_md5sum()
1112     {
1113     local dest
1114     local pcat
1115     local pname
1116     local pver
1117     local pbuild
1118     local parch
1119     local target
1120     local pkgname
1121    
1122     # very basic getops
1123     for i in $*
1124     do
1125     case $1 in
1126     --pcat|-c) shift; pcat="$1" ;;
1127     --pname|-n) shift; pname="$1" ;;
1128     --pver|-v) shift; pver="$1" ;;
1129     --pbuild|-b) shift; pbuild="$1" ;;
1130     --parch|a) shift; parch="$1" ;;
1131     --target|t) shift; target="$1" ;;
1132     esac
1133     shift
1134     done
1135    
1136     # sanity checks; abort if not given
1137     [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given."
1138     [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given."
1139     [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given."
1140     [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given."
1141     [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given."
1142    
1143     # check needed global vars
1144     [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set."
1145     [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set."
1146    
1147     # fix target as it may be empty !
1148     [ -n "${target}" ] && target="-${target}"
1149    
1150 niro 890
1151 niro 255 # build pkgname
1152     pkgname="${pname}${target}-${pver}-${parch}-${pbuild}"
1153    
1154     # build pkg-md5-sum only if requested
1155     if [[ ${REGEN_MAGE_TREE} = true ]]
1156     then
1157 niro 439 echo -ne "${COLBLUE}===${COLGREEN} generating md5's for ${pkgname}.${PKGSUFFIX} ... ${COLDEFAULT}"
1158 niro 255
1159     # abort if not exist
1160     if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ]
1161     then
1162 niro 439 echo -e "${COLRED}! exists${COLDEFAULT}"
1163 niro 255 return 0
1164     fi
1165    
1166     # if MAGE_TREE_DEST not set use BUILDDIR
1167     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
1168    
1169     # setup md5 dir
1170 niro 891 dest="${MAGE_TREE_DEST}/${pcat}/${pname}${target}/md5"
1171 niro 255 install -d ${dest}
1172    
1173     # gen md5sum
1174     ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \
1175 niro 256 > ${dest}/${pkgname}.md5
1176 niro 439 echo -e "${COLGREEN}done${COLDEFAULT}"
1177 niro 255 fi
1178     }
1179    
1180 niro 403 source_pkg_build()
1181     {
1182     if [[ ${PKGTYPE} = virtual ]]
1183     then
1184     echo "Virtual package detected; src-pkg-tarball not necessary ..."
1185     return 0
1186     fi
1187    
1188     if [[ ! -d ${SOURCEDIR}/${PNAME} ]]
1189     then
1190     echo "No SRC_URI defined; src-pkg-tarball not necessary ..."
1191     return 0
1192     fi
1193    
1194 niro 419 [ -z "${SRCPKGDIR}" ] && die "\$SRCPKGDIR not found. Please setup your ${MAGERC} correctly."
1195 niro 406
1196 niro 403 echo -e "${COLGREEN}Creating source package tarball ... ${COLDEFAULT}"
1197 niro 412
1198     # include the smage2 file
1199     cp ${SMAGENAME} ${SOURCEDIR}/${PNAME}
1200    
1201 niro 403 ( cd ${SOURCEDIR}; tar cvjf ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${PNAME}; )
1202 niro 406 [[ ! -d ${SRCPKGDIR} ]] && install -d ${SRCPKGDIR}
1203     mv ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${SRCPKGDIR}/${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}
1204 niro 403
1205     echo -e "${COLGREEN}Source package ${COLBLUE}${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} ${COLGREEN}successfully builded.${COLDEFAULT}"
1206     }
1207    
1208 niro 859 step_by_step()
1209     {
1210     if [[ ${STEP_BY_STEP} = true ]]
1211     then
1212 niro 945 echo -e "${COLRED}Step-by-step enabled! Paused after $1.${COLDEFAULT}"
1213 niro 859 echo "Press [enter] to continue"
1214     read
1215     fi
1216     }
1217 niro 403
1218 niro 859
1219 niro 59 # print out our version
1220     showversion
1221     echo
1222    
1223 niro 24 if [ -z "$1" ]
1224     then
1225     echo "No .smage2 file given. Exiting."
1226     echo
1227     exit 1
1228     fi
1229    
1230 niro 192 # updating smage2-scripts
1231 niro 306 if [[ $1 = update ]]
1232 niro 24 then
1233 niro 59 if [ ! -d ${SOURCEDIR} ]
1234     then
1235     install -d ${SOURCEDIR}
1236     fi
1237     syncsmage2
1238     exit 0
1239     fi
1240    
1241 niro 192 # creates md5sums for smages to given dir
1242 niro 306 if [[ $1 = calcmd5 ]]
1243 niro 59 then
1244 niro 1207 if [ $# -ge 2 ]
1245 niro 59 then
1246     SMAGENAME="$2"
1247     MD5DIR="$3"
1248 niro 1207 [[ -z ${MD5DIR} ]] && MD5DIR="$(dirname ${SMAGENAME})/md5"
1249    
1250 niro 1346 smagesource ${SMAGENAME} || die "download source failed"
1251 niro 59
1252 niro 66 # overridable sourcedir; must be declared after source of the smage2
1253     CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}"
1254    
1255 niro 59 [ -z "${SRC_URI}" ] && die "Nothing declared to calculate."
1256    
1257     # end of array
1258     EOA=${#SRC_URI[*]}
1259    
1260     [ ! -d ${MD5DIR} ] && install -d ${MD5DIR}
1261    
1262     # clear md5sum file
1263     MY_MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
1264     echo -n > ${MY_MD5_FILE}
1265    
1266     for ((i=0; i < EOA; i++))
1267     do
1268 niro 66 # url to file
1269     my_SRC_URI="$(echo ${SRC_URI[${i}]} | cut -d' ' -f1)"
1270    
1271     # subdir in sources dir; the my_SRCI_URI file goes to there
1272     my_SRC_URI_DEST="$(echo ${SRC_URI[${i}]} | cut -d' ' -f2)"
1273    
1274     # if my_src_uri_dest is not equal my_src_uri; than an other dir is used
1275     if [[ ${my_SRC_URI_DEST} != ${my_SRC_URI} ]]
1276     then
1277     MY_SRC_FILE="${my_SRC_URI_DEST}/$(basename ${SRC_URI[${i}]})"
1278     else
1279     MY_SRC_FILE="$(basename ${SRC_URI[${i}]})"
1280     fi
1281    
1282 niro 59 if [ -e "${CALC_SOURCEDIR}/${MY_SRC_FILE}" ]
1283     then
1284     echo "calculating $(basename ${MY_SRC_FILE}) ..."
1285     ( cd ${CALC_SOURCEDIR}; md5sum "${MY_SRC_FILE}" ) >> ${MY_MD5_FILE}
1286     else
1287     echo "WARNING: File '$(basename ${MY_SRC_FILE}) not found in ${CALC_SOURCEDIR}."
1288     fi
1289 niro 66
1290     # unset them to be shure
1291     unset my_SRC_URI
1292     unset my_SRC_URI_DEST
1293     unset my_SRC_URI_MIRROR
1294     unset my_SOURCEDIR
1295 niro 59 done
1296 niro 306
1297 niro 59 echo
1298     echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
1299     echo
1300     else
1301     echo "Usage: Calculating MD5 Sums:"
1302 niro 1207 echo " $(basename $0) calcmd5 /path/to/SMAGENAME [/path/to/MD5DIR]"
1303 niro 59 echo
1304     echo
1305     echo "Export the CALC_SOURCEDIR variable to override current SOURCEDIRs."
1306     echo
1307     exit 1
1308     fi
1309 niro 306
1310 niro 59 exit 0
1311     fi
1312    
1313 niro 192 # download sources
1314 niro 59 if [ "$1" == "download" -a -n "$2" ]
1315     then
1316 niro 24 if [ ! -d ${SMAGESCRIPTSDIR} ]
1317     then
1318     install -d ${SMAGESCRIPTSDIR}
1319     fi
1320 niro 59
1321     # get smage
1322     SMAGENAME="$2"
1323     MD5DIR="$(dirname ${SMAGENAME})/md5"
1324 niro 1346 smagesource ${SMAGENAME} || die "download source failed"
1325 niro 59
1326     download_sources
1327 niro 24 exit 0
1328     fi
1329    
1330 niro 202 # regen-mage-tree
1331     if [ "$1" == "only-regen-tree" -a -n "$2" ]
1332     then
1333     # set correct SMAGENAME
1334     SMAGENAME="$2"
1335     MD5DIR="$(dirname ${SMAGENAME})/md5"
1336 niro 1346 smagesource ${SMAGENAME} || die "regen: smage2 not found"
1337 niro 202
1338     regen_mage_tree
1339 niro 255
1340 niro 890 # build several targets
1341 niro 943 if [[ -n ${MAGE_TARGETS} ]]
1342 niro 890 then
1343     for target in ${MAGE_TARGETS}
1344     do
1345     # build md5sum for existing packages
1346     generate_package_md5sum \
1347     --pcat "${PCATEGORIE}" \
1348     --pname "${PNAME}" \
1349     --pver "${PVER}" \
1350     --pbuild "${PBUILD}" \
1351     --parch "${ARCH}" \
1352     --target "${target}"
1353     done
1354 niro 943
1355     # build several subpackages
1356     elif [[ -n ${SPLIT_PACKAGES} ]]
1357     then
1358     split_save_variables
1359 niro 964 for subpackage in ${SPLIT_PACKAGES}
1360 niro 943 do
1361     # get the right variables for the split
1362     export PNAME="${subpackage}"
1363     split_info_${subpackage}
1364     # build md5sum for existing packages
1365     generate_package_md5sum \
1366     --pcat "${PCATEGORIE}" \
1367     --pname "${PNAME}" \
1368     --pver "${PVER}" \
1369     --pbuild "${PBUILD}" \
1370     --parch "${ARCH}"
1371 niro 951 # restore smage environment
1372     split_restore_variables
1373 niro 943 done
1374 niro 951 # unset all saved smage variables
1375     split_unset_variables
1376 niro 943
1377 niro 890 else
1378     # build md5sum for existing packages
1379     generate_package_md5sum \
1380     --pcat "${PCATEGORIE}" \
1381     --pname "${PNAME}" \
1382     --pver "${PVER}" \
1383     --pbuild "${PBUILD}" \
1384 niro 943 --parch "${ARCH}"
1385 niro 890 fi
1386 niro 255
1387 niro 202 exit 0
1388     fi
1389    
1390 niro 412 if [ "$1" == "--create-src-tarball" -a -n "$2" ]
1391 niro 403 then
1392     # set correct SMAGENAME
1393     SMAGENAME="$2"
1394     MD5DIR="$(dirname ${SMAGENAME})/md5"
1395    
1396 niro 412 echo -e "${COLGREEN}create-src-tarball called for ${COLBLUE}${SMAGENAME}${COLGREEN} ...${COLDEFAULT}"
1397 niro 403
1398 niro 1346 smagesource ${SMAGENAME} || die "regen: smage2 not found"
1399 niro 403
1400     if [[ -d ${SOURCEDIR}/${PNAME} ]]
1401     then
1402     echo -e "${COLGREEN}Deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
1403     rm -rf ${SOURCEDIR}/${PKGNAME}
1404     fi
1405    
1406     download_sources
1407     source_pkg_build ${SMAGENAME}
1408     exit 0
1409     fi
1410    
1411 niro 406 if [ "$1" == "--src-tarball" -a -n "$2" ] || [ "$1" == "-st" -a -n "$2" ]
1412 niro 403 then
1413 niro 412 SRCPKGTARBALL="${2}"
1414 niro 403 USE_SRC_PKG_TARBALL=true
1415    
1416 niro 412 # abort if given file is not a source pkg
1417     [[ ${SRCPKGTARBALL##*.} != ${SRCPKGSUFFIX} ]] && die "${SRCPKGTARBALL} is not a valid src-pkg file."
1418    
1419     # set correct SMAGENAME; use the one that the src_pkg provide
1420     # /path/to/SOURCEDIR/PNAME/SMAGENAME
1421     SMAGENAME="${SOURCEDIR}/$(basename ${SRCPKGTARBALL%-*-*})/$(basename ${SRCPKGTARBALL} .${SRCPKGSUFFIX}).${SMAGESUFFIX}"
1422    
1423 niro 403 echo -e "${COLGREEN}Using src-tarball ${COLBLUE}${SRCPKGTARBALL}${COLGREEN} ...${COLDEFAULT}"
1424    
1425     [[ ! -d ${SOURCEDIR} ]] && install -d ${SOURCEDIR}
1426    
1427     # unpack srctarball
1428     [[ ! -f ${SRCPKGTARBALL} ]] && die "Error: ${SRCPKGTARBALL} does not exist. Aborting."
1429    
1430     tar xvjf ${SRCPKGTARBALL} -C ${SOURCEDIR} || die "Error unpackung src-tarball ${SRCPKGTARBALL}"
1431 niro 412
1432     [[ ! -f ${SMAGENAME} ]] && die "Included smage2 file in src-tarball not found: ${SMAGENAME}"
1433 niro 403 fi
1434    
1435    
1436 niro 306 [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
1437     [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] &&
1438     die "File '$(basename ${SMAGENAME})' is not a sMage v${SMAGEVERSION} file. Aborting."
1439 niro 419 [ -z "${SOURCEDIR}" ] && die "\$SOURCEDIR not found. Please setup your ${MAGERC} correctly."
1440     [ -z "${SMAGESCRIPTSDIR}" ] && die "\$SMAGESCRIPTSDIR not found. Please setup your ${MAGERC} correctly."
1441     [ -z "${SMAGE2RSYNC}" ] && die "\$SMAGE2RSYNC not found. Please setup your ${MAGERC} correctly."
1442     [ -z "${BINDIR}" ] && die "no BINDIR variable found in ${MAGERC}"
1443     [ -z "${CHOST}" ] && die "no CHOST variable found in ${MAGERC}"
1444     [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in ${MAGERC}"
1445     [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in ${MAGERC}"
1446 niro 24
1447 niro 1346 smagesource ${SMAGENAME} || die "source failed"
1448 niro 255 PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}"
1449 niro 59 MD5DIR="$(dirname ${SMAGENAME})/md5"
1450 niro 941 SMAGE_LOG_CMD="tee -a /var/log/smage/${PKGNAME}.log"
1451 niro 24
1452     xtitle "Compiling ${PKGNAME}"
1453 niro 439 echo -e "${COLGREEN}Compiling ${PKGNAME}${COLDEFAULT}"
1454 niro 59
1455 niro 191 # auto regen mage tree if requested
1456     regen_mage_tree
1457    
1458 niro 403 if [[ ${CREATE_SRC_PKG_TARBALL} = true ]]
1459     then
1460     if [[ -d ${SOURCEDIR}/${PNAME} ]]
1461     then
1462 niro 441 echo -e "${COLBLUE}===${COLGREEN} deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
1463 niro 408 rm -rf ${SOURCEDIR}/${PNAME}
1464 niro 403 fi
1465     fi
1466    
1467 niro 192 # download sources
1468 niro 403 [[ ${USE_SRC_PKG_TARBALL} != true ]] && download_sources
1469 niro 59
1470 niro 192 # fixes some issues with these functions
1471 niro 24 export -f src_prepare || die "src_prepare export failed"
1472     export -f src_compile || die "src_compile export failed"
1473     export -f src_install || die "src_install export failed"
1474    
1475 niro 192 # fixes some compile issues
1476 niro 24 export CHOST="${CHOST}" || die "CHOST export failed"
1477     export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
1478     export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
1479     export BINDIR="${BINDIR}" || die "BINDIR export failed"
1480     export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
1481    
1482    
1483 niro 192 # setup distcc
1484 niro 351 # setup for distcc goes *before* ccache, so ccache comes before distcc in path
1485 niro 306 [[ ${SMAGE_USE_DISTCC} = true ]] && setup_distcc_environment
1486 niro 24
1487 niro 192 # setup ccache
1488 niro 306 [[ ${SMAGE_USE_CCACHE} = true ]] && setup_ccache_environment
1489 niro 24
1490     # small sleep to show our settings
1491     sleep 1
1492    
1493 niro 192 # cleans up build if a previously one exists
1494 niro 24 if [ -d ${BUILDDIR} ]
1495     then
1496     rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
1497     fi
1498     install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
1499    
1500 niro 192 # cleans up srcdir if a previously unpacked one exists
1501 niro 24 if [ -d ${SRCDIR} ]
1502     then
1503     rm -rf ${SRCDIR}
1504     fi
1505    
1506 niro 192 # cleans up bindir if a previous build exists or creates a new one
1507 niro 24 if [ -d ${BINDIR} ]
1508     then
1509     rm -rf ${BINDIR}
1510     fi
1511     install -d ${BINDIR} || die "couldn't create \$BINDIR."
1512    
1513 niro 192 # cleans up package temp dir if a previous build exists
1514 niro 24 if [ -d ${BUILDDIR}/${PKGNAME} ]
1515     then
1516     rm -rf ${BUILDDIR}/${PKGNAME}
1517     fi
1518    
1519 niro 192 # cleans up timestamp if one exists
1520 niro 24 if [ -f /var/tmp/timestamp ]
1521     then
1522     mage rmstamp
1523     fi
1524    
1525 niro 875 # setup build loggins
1526     [[ ! -d /var/log/smage ]] && install -d /var/log/smage
1527     echo -e "### Build started on $(date) ###\n" > /var/log/smage/${PKGNAME}.log
1528    
1529 niro 941 src_prepare | ${SMAGE_LOG_CMD}
1530     die_pipestatus 0 "src_prepare failed"
1531 niro 859 step_by_step $_
1532 niro 941
1533     src_compile | ${SMAGE_LOG_CMD}
1534     die_pipestatus 0 "src_compile failed"
1535 niro 859 step_by_step $_
1536 niro 941
1537 niro 943 # build several subpackages
1538     if [[ -n ${SPLIT_PACKAGES} ]]
1539     then
1540 niro 945 # save bindir & pname
1541     split_save_variables
1542 niro 943 export SAVED_BINDIR="${BINDIR}"
1543     for subpackage in ${SPLIT_PACKAGES}
1544     do
1545     if typeset -f src_install_${subpackage} > /dev/null
1546     then
1547     # export subpackage bindir
1548     export BINDIR="${SAVED_BINDIR}_${subpackage}"
1549 niro 945 # export PNAME, several internal function and include
1550     # rely on this variable
1551     export PNAME="${subpackage}"
1552    
1553     echo
1554     echo -en "${COLBLUE}*** ${COLDEFAULT}"
1555     echo -en " Running ${COLGREEN}split src_install()${COLDEFAULT}"
1556     echo -en " for subpkg: ${COLBLUE}${PNAME}${COLDEFAULT}"
1557     echo -e " - basepkg: ${COLBLUE}${SPLIT_PACKAGE_BASE}${COLDEFAULT} ..."
1558    
1559 niro 943 src_install_${subpackage} | ${SMAGE_LOG_CMD}
1560     die_pipestatus 0 "src_install_${subpackage} failed"
1561     step_by_step $_
1562     fi
1563     done
1564 niro 945 # restore bindir & pname
1565     split_restore_variables
1566 niro 951 # unset all saved smage variables
1567     split_unset_variables
1568 niro 943 else
1569     src_install | ${SMAGE_LOG_CMD}
1570     die_pipestatus 0 "src_install failed"
1571     step_by_step $_
1572     fi
1573 niro 24
1574 niro 192 # compressing doc, info & man files
1575 niro 943 if [[ -n ${SPLIT_PACKAGES} ]]
1576 niro 24 then
1577 niro 964 for subpackage in ${SPLIT_PACKAGES}
1578 niro 943 do
1579     mcompressdocs ${BINDIR}_${subpackage}
1580     done
1581     else
1582     mcompressdocs ${BINDIR}
1583 niro 24 fi
1584    
1585    
1586 niro 79 # stripping all bins and libs
1587     case ${NOSTRIP} in
1588     true|TRUE|yes|y)
1589     echo -e "NOSTRIP=true detected; Package will not be stripped ..."
1590     ;;
1591     *)
1592 niro 943 if [[ -n ${SPLIT_PACKAGES} ]]
1593     then
1594 niro 964 for subpackage in ${SPLIT_PACKAGES}
1595 niro 943 do
1596 niro 1082 echo -e "${COLBLUE}===${COLGREEN} stripping binaries for '${subpackage}' ...${COLDEFAULT}"
1597 niro 943 mstripbins ${BINDIR}_${subpackage}
1598 niro 1082 echo -e "${COLBLUE}===${COLGREEN} stripping libraries for '${subpackage}' ...${COLDEFAULT}"
1599 niro 943 mstriplibs ${BINDIR}_${subpackage}
1600     done
1601     else
1602     echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}"
1603     mstripbins ${BINDIR}
1604     echo -e "${COLBLUE}===${COLGREEN} stripping libraries ...${COLDEFAULT}"
1605     mstriplibs ${BINDIR}
1606     fi
1607 niro 79 ;;
1608     esac
1609    
1610 niro 192 # the new buildpkg command
1611 niro 24 case ${NOPKGBUILD} in
1612     true|TRUE|yes|y)
1613     echo -e "NOPGKBUILD=true detected; Package will not be build ..."
1614     ;;
1615 niro 192 *)
1616 niro 306 # build several targets
1617 niro 943 if [[ -n ${MAGE_TARGETS} ]]
1618 niro 192 then
1619     for target in ${MAGE_TARGETS}
1620     do
1621     # check if an special target_pkgbuild exists
1622     if typeset -f ${target}_pkgbuild > /dev/null
1623     then
1624     # run it
1625     ${target}_pkgbuild
1626     fi
1627     # now create the target package
1628     ${MLIBDIR}/pkgbuild_dir.sh \
1629 niro 255 "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1630 niro 192 ${BINDIR} || die "target: ${target} package-build failed"
1631 niro 255
1632     # build pkg-md5-sum if requested
1633     generate_package_md5sum \
1634     --pcat "${PCATEGORIE}" \
1635     --pname "${PNAME}" \
1636     --pver "${PVER}" \
1637     --pbuild "${PBUILD}" \
1638     --parch "${ARCH}" \
1639     --target "${target}"
1640    
1641 niro 439 echo -e "${COLGREEN}\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}"
1642 niro 192 done
1643 niro 943
1644     # build several subpackages
1645     elif [[ -n ${SPLIT_PACKAGES} ]]
1646     then
1647     split_save_variables
1648     for subpackage in ${SPLIT_PACKAGES}
1649     do
1650     # get the right variables for the split
1651     export PNAME="${subpackage}"
1652     split_info_${PNAME}
1653    
1654 niro 947 # jump to next one if NOPKGBUILD is set in split_info
1655     case ${NOPKGBUILD} in
1656     true|TRUE|yes|y) continue ;;
1657     esac
1658    
1659 niro 943 # check if an special subpackage_pkgbuild exists
1660     if typeset -f ${PNAME}_pkgbuild > /dev/null
1661     then
1662     # run it
1663     ${PNAME}_pkgbuild
1664     fi
1665     # now create the target package
1666     ${MLIBDIR}/pkgbuild_dir.sh \
1667     "${PNAME}-${PVER}-${ARCH}-${PBUILD}" \
1668     "${BINDIR}_${PNAME}" || die "split_package: ${PNAME} package-build failed"
1669    
1670     # build pkg-md5-sum if requested
1671     generate_package_md5sum \
1672     --pcat "${PCATEGORIE}" \
1673     --pname "${PNAME}" \
1674     --pver "${PVER}" \
1675     --pbuild "${PBUILD}" \
1676     --parch "${ARCH}"
1677    
1678     echo -e "${COLGREEN}\nPackage ${PNAME}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}"
1679 niro 951
1680     # restore smage environment
1681     split_restore_variables
1682 niro 943 done
1683 niro 951 # unset all saved smage variables
1684     split_unset_variables
1685 niro 943
1686 niro 192 else
1687     ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
1688 niro 255
1689     # build pkg-md5-sum if requested
1690     generate_package_md5sum \
1691     --pcat "${PCATEGORIE}" \
1692     --pname "${PNAME}" \
1693     --pver "${PVER}" \
1694     --pbuild "${PBUILD}" \
1695     --parch "${ARCH}"
1696    
1697 niro 439 echo -e "${COLGREEN}\nPackage ${PKGNAME} successfully builded.\n${COLDEFAULT}"
1698 niro 192 fi
1699 niro 403
1700     # build src-pkg-tarball if requested
1701     [[ ${CREATE_SRC_PKG_TARBALL} = true ]] && source_pkg_build ${SMAGENAME}
1702 niro 24 ;;
1703     esac
1704    
1705 niro 875 if [[ ${SMAGE_BUILD_LOGGING} != false ]]
1706     then
1707     bzip2 -9f /var/log/smage/${PKGNAME}.log
1708     else
1709     [[ -f /var/log/smage/${PKGNAME}.log ]] && rm /var/log/smage/${PKGNAME}.log
1710     fi
1711    
1712 niro 192 # for sure
1713 niro 24 unset NOPKGBUILD
1714 niro 85 unset NOSTRIP
1715 niro 351
1716 niro 24 xtitleclean

Properties

Name Value
svn:executable *