Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *