Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1594 - (show annotations) (download) (as text)
Thu Dec 29 15:21:25 2011 UTC (12 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 41424 byte(s)
-never unset PKGTYPE on regen for sake of build check
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 <-- don't do that either; smage needs this var
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 if [[ ${PKGTYPE} = virtual ]]
1444 then
1445 echo "virtual package detected; nothing will be build ..."
1446 # automatically set !pkgbuild here too
1447 msetfeature "!pkgbuild"
1448 else
1449 src_prepare | ${SMAGE_LOG_CMD}
1450 die_pipestatus 0 "src_prepare failed"
1451 step_by_step $_
1452
1453 src_compile | ${SMAGE_LOG_CMD}
1454 die_pipestatus 0 "src_compile failed"
1455 step_by_step $_
1456
1457 # only run checks if requested
1458 if mqueryfeature "!check"
1459 then
1460 echo "!check detected; src_check() will not be run!" | ${SMAGE_LOG_CMD}
1461 step_by_step src_check
1462 else
1463 src_check | ${SMAGE_LOG_CMD}
1464 die_pipestatus 0 "src_check failed"
1465 step_by_step $_
1466 fi
1467
1468 # build several subpackages
1469 if [[ -n ${SPLIT_PACKAGES} ]]
1470 then
1471 # save bindir & pname
1472 split_save_variables
1473 export SAVED_BINDIR="${BINDIR}"
1474 for subpackage in ${SPLIT_PACKAGES}
1475 do
1476 if typeset -f src_install_${subpackage} > /dev/null
1477 then
1478 # export subpackage bindir
1479 export BINDIR="${SAVED_BINDIR}_${subpackage}"
1480 # export PNAME, several internal function and include
1481 # rely on this variable
1482 export PNAME="${subpackage}"
1483
1484 echo
1485 echo -en "${COLBLUE}*** ${COLDEFAULT}"
1486 echo -en " Running ${COLGREEN}split src_install()${COLDEFAULT}"
1487 echo -en " for subpkg: ${COLBLUE}${PNAME}${COLDEFAULT}"
1488 echo -e " - basepkg: ${COLBLUE}${SPLIT_PACKAGE_BASE}${COLDEFAULT} ..."
1489
1490 src_install_${subpackage} | ${SMAGE_LOG_CMD}
1491 die_pipestatus 0 "src_install_${subpackage} failed"
1492 step_by_step $_
1493 fi
1494 done
1495 # restore bindir & pname
1496 split_restore_variables
1497 # unset all saved smage variables
1498 split_unset_variables
1499 else
1500 src_install | ${SMAGE_LOG_CMD}
1501 die_pipestatus 0 "src_install failed"
1502 step_by_step $_
1503 fi
1504 fi
1505
1506 # echo for sake of good-looking
1507 echo
1508
1509 if mqueryfeature "!compressdoc"
1510 then
1511 echo -e "!compressdoc detected; documentation will not be compressed ..."
1512 else
1513 # compressing doc, info & man files
1514 if [[ -n ${SPLIT_PACKAGES} ]]
1515 then
1516 for subpackage in ${SPLIT_PACKAGES}
1517 do
1518 mcompressdocs ${BINDIR}_${subpackage}
1519 done
1520 else
1521 mcompressdocs ${BINDIR}
1522 fi
1523 fi
1524
1525 if mqueryfeature "!libtool"
1526 then
1527 if [[ -n ${SPLIT_PACKAGES} ]]
1528 then
1529 for subpackage in ${SPLIT_PACKAGES}
1530 do
1531 echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives for '${subpackage}' ...${COLDEFAULT}"
1532 mstriplibtoolarchive ${BINDIR}_${subpackage}
1533 done
1534 else
1535 echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives ...${COLDEFAULT}"
1536 mstriplibtoolarchive ${BINDIR}
1537 fi
1538 fi
1539
1540 if mqueryfeature "purge"
1541 then
1542 if [[ -n ${SPLIT_PACKAGES} ]]
1543 then
1544 for subpackage in ${SPLIT_PACKAGES}
1545 do
1546 echo -e "${COLBLUE}===${COLGREEN} purging all purge targets in '${subpackage}' ...${COLDEFAULT}"
1547 mpurgetargets ${BINDIR}_${subpackage}
1548 done
1549 else
1550 echo -e "${COLBLUE}===${COLGREEN} purging all purge targets ...${COLDEFAULT}"
1551 mpurgetargets ${BINDIR}
1552 fi
1553 fi
1554
1555 # stripping all bins and libs
1556 if mqueryfeature "!strip"
1557 then
1558 echo -e "!strip detected; Package will not be stripped ..."
1559 else
1560 if [[ -n ${SPLIT_PACKAGES} ]]
1561 then
1562 for subpackage in ${SPLIT_PACKAGES}
1563 do
1564 echo -e "${COLBLUE}===${COLGREEN} stripping binaries for '${subpackage}' ...${COLDEFAULT}"
1565 mstripbins ${BINDIR}_${subpackage}
1566 echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries for '${subpackage}' ...${COLDEFAULT}"
1567 mstriplibs ${BINDIR}_${subpackage}
1568 echo -e "${COLBLUE}===${COLGREEN} stripping static libraries for '${subpackage}' ...${COLDEFAULT}"
1569 mstripstatic ${BINDIR}_${subpackage}
1570 done
1571 else
1572 echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}"
1573 mstripbins ${BINDIR}
1574 echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries ...${COLDEFAULT}"
1575 mstriplibs ${BINDIR}
1576 echo -e "${COLBLUE}===${COLGREEN} stripping static libraries ...${COLDEFAULT}"
1577 mstripstatic ${BINDIR}
1578 fi
1579 fi
1580
1581 if mqueryfeature "!buildpkg"
1582 then
1583 echo -e "!buildpkg detected; Package will not be build ..."
1584 else
1585 # build several targets
1586 if [[ -n ${MAGE_TARGETS} ]]
1587 then
1588 for target in ${MAGE_TARGETS}
1589 do
1590 # check if a special target_pkgbuild exists
1591 if typeset -f ${target}_pkgbuild > /dev/null
1592 then
1593 # run it
1594 ${target}_pkgbuild
1595 fi
1596 # now create the target package
1597 ${MLIBDIR}/pkgbuild_dir.sh \
1598 "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1599 ${BINDIR} || die "target: ${target} package-build failed"
1600
1601 # build pkg-md5-sum if requested
1602 generate_package_md5sum \
1603 --pcat "${PCATEGORIE}" \
1604 --pname "${PNAME}" \
1605 --pver "${PVER}" \
1606 --pbuild "${PBUILD}" \
1607 --parch "${ARCH}" \
1608 --target "${target}"
1609
1610 echo -e "${COLGREEN}\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}"
1611 done
1612
1613 # build several subpackages
1614 elif [[ -n ${SPLIT_PACKAGES} ]]
1615 then
1616 split_save_variables
1617 for subpackage in ${SPLIT_PACKAGES}
1618 do
1619 # get the right variables for the split
1620 export PNAME="${subpackage}"
1621 split_info_${PNAME}
1622
1623 # jump to next one if !buildpkg is set in split_info
1624 mqueryfeature "!buildpkg" && continue
1625
1626 # check if an special subpackage_pkgbuild exists
1627 if typeset -f ${PNAME}_pkgbuild > /dev/null
1628 then
1629 # run it
1630 ${PNAME}_pkgbuild
1631 fi
1632 # now create the target package
1633 ${MLIBDIR}/pkgbuild_dir.sh \
1634 "${PNAME}-${PVER}-${ARCH}-${PBUILD}" \
1635 "${BINDIR}_${PNAME}" || die "split_package: ${PNAME} package-build failed"
1636
1637 # build pkg-md5-sum if requested
1638 generate_package_md5sum \
1639 --pcat "${PCATEGORIE}" \
1640 --pname "${PNAME}" \
1641 --pver "${PVER}" \
1642 --pbuild "${PBUILD}" \
1643 --parch "${ARCH}"
1644
1645 echo -e "${COLGREEN}\nPackage ${PNAME}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}"
1646
1647 # restore smage environment
1648 split_restore_variables
1649 done
1650 # unset all saved smage variables
1651 split_unset_variables
1652
1653 else
1654 ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
1655
1656 # build pkg-md5-sum if requested
1657 generate_package_md5sum \
1658 --pcat "${PCATEGORIE}" \
1659 --pname "${PNAME}" \
1660 --pver "${PVER}" \
1661 --pbuild "${PBUILD}" \
1662 --parch "${ARCH}"
1663
1664 echo -e "${COLGREEN}\nPackage ${PKGNAME} successfully builded.\n${COLDEFAULT}"
1665 fi
1666
1667 # build src-pkg-tarball if requested
1668 mqueryfeature "srcpkg" && source_pkg_build ${SMAGENAME}
1669 fi
1670
1671 if mqueryfeature "buildlog"
1672 then
1673 bzip2 -9f /var/log/smage/${PKGNAME}.log
1674 else
1675 [[ -f /var/log/smage/${PKGNAME}.log ]] && rm /var/log/smage/${PKGNAME}.log
1676 fi
1677
1678 xtitleclean

Properties

Name Value
svn:executable *