Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *