Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 386 - (show annotations) (download) (as text)
Mon Jul 17 20:52:38 2006 UTC (17 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 23118 byte(s)
using variable rsync fetch options via mage.rc

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

Properties

Name Value
svn:executable *