Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *