Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *