Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *