Magellan Linux

Contents of /branches/mage-next/src/smage2.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 427 - (show annotations) (download) (as text)
Fri Feb 23 14:42:17 2007 UTC (17 years, 2 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/smage2.sh
File MIME type: application/x-sh
File size: 26138 byte(s)
- ignore empty lines while fixing deps

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

Properties

Name Value
svn:executable *