Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 597 - (show annotations) (download) (as text)
Mon Nov 5 16:47:10 2007 UTC (16 years, 5 months ago) by niro
File MIME type: application/x-sh
File size: 30375 byte(s)
-support more unpack methods: .rar .zip .gz .bz2 .rpm

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.59 2007-11-05 16:47:10 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 --mandir=/usr/share/man \
366 --infodir=/usr/share/info \
367 --datadir=/usr/share \
368 --sysconfdir=/etc \
369 --localstatedir=/var/lib \
370 --libdir=/usr/$(mlibdir) \
371 "$@" || die "mconfigure failed"
372 else
373 echo "configure is not an executable ..."
374 exit 1
375 fi
376 }
377
378 minstall()
379 {
380 if [ -f ./[mM]akefile -o -f ./GNUmakefile ]
381 then
382 make prefix=${BINDIR}/usr \
383 datadir=${BINDIR}/usr/share \
384 infodir=${BINDIR}/usr/share/info \
385 localstatedir=${BINDIR}/var/lib \
386 mandir=${BINDIR}/usr/share/man \
387 sysconfdir=${BINDIR}/etc \
388 libdir=${BINDIR}/usr/$(mlibdir) \
389 "$@" install || die "minstall failed"
390 else
391 die "no Makefile found"
392 fi
393 }
394
395 mmake()
396 {
397 make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
398 }
399
400 munpack()
401 {
402 local SRCFILE
403 local IFTAR
404 local DEST
405
406 SRCFILE=$1
407
408 if [[ -z $2 ]]
409 then
410 DEST=${BUILDDIR}
411 else
412 DEST=$2
413 fi
414
415 [[ ! -d ${DEST} ]] && install -d ${DEST}
416
417 case "${SRCFILE##*.}" in
418 bz2)
419 IFTAR="$(basename $SRCFILE .bz2)"
420 IFTAR="${IFTAR##*.}"
421 if [[ ${IFTAR} = tar ]]
422 then
423 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.bz2 unpack failed."
424 else
425 pushd ${DEST} > /dev/null
426 bzcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .bz2) || die ".bz2 unpack failed."
427 popd > /dev/null
428 fi
429 ;;
430 gz)
431 IFTAR="$(basename $SRCFILE .gz)"
432 IFTAR="${IFTAR##*.}"
433 if [[ ${IFTAR} = tar ]]
434 then
435 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.gz unpack failed."
436 else
437 pushd ${DEST} > /dev/null
438 zcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .gz) || die ".gz unpack failed."
439 popd > /dev/null
440 fi
441 ;;
442 tbz2)
443 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tbz2 unpack failed."
444 ;;
445 tgz)
446 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tgz unpack failed."
447 ;;
448 rar)
449 unrar x ${SOURCEDIR}/${PNAME}/${SRCFILE} ${DEST} || die ".rar unpack failed."
450 ;;
451 zip)
452 unzip ${SOURCEDIR}/${PNAME}/${SRCFILE} -d ${DEST} || die ".zip unpack failed."
453 ;;
454 rpm)
455 pushd ${BUILDDIR} > /dev/null
456 rpm2targz ${SOURCEDIR}/${PNAME}/${SRCFILE} || die "rpm2targz: .rpm unpack failed."
457 tar --no-same-owner -xvzf ${SRCFILE/.rpm/.tar.gz/} || die "tar: .rpm unpack failed."
458 [[ -f ${BUILDDIR}/${SRCFILE/.rpm/.tar.gz/} ]] && rm ${BUILDDIR}/${SRCFILE/.rpm/.tar.gz/}
459 ;;
460 *)
461 die "munpack failed"
462 ;;
463 esac
464 }
465
466 mpatch()
467 {
468 local PATCHOPTS
469 local PATCHFILE
470 local i
471
472 PATCHOPTS=$1
473 PATCHFILE=$2
474
475 if [[ -z $2 ]]
476 then
477 PATCHFILE=$1
478
479 ## patch level auto-detection, get patch level
480 for ((i=0; i < 10; i++))
481 do
482 patch --dry-run -Np${i} -i ${SOURCEDIR}/${PNAME}/${PATCHFILE} > /dev/null
483 if [[ $? = 0 ]]
484 then
485 PATCHOPTS="-Np${i}"
486 break
487 fi
488 done
489 fi
490
491 echo -e "${COLBLUE}*** ${COLGREEN}Applying patch '${PATCHFILE}'${COLDEFAULT}"
492 patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
493 }
494
495 mlibtoolize()
496 {
497 local opts="$@"
498 [[ -z ${opts} ]] && opts="--copy --force"
499
500 libtoolize ${opts} || die "running: mlibtoolize ${opts}"
501 }
502
503 minstalldocs()
504 {
505 local docfiles
506 docfiles="$@"
507
508 if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
509 then
510 install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
511 fi
512
513 for i in ${docfiles}
514 do
515 cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
516 install -m 0644 ${SRCDIR}/${i}.gz \
517 ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs."
518 done
519 }
520
521 mstriplibs()
522 {
523 local stripdir="$@"
524
525 [ -z "${stripdir}" ] && stripdir=${BINDIR}
526 find ${stripdir} | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
527 }
528
529 mstripbins()
530 {
531 local stripdir="$@"
532
533 [ -z "${stripdir}" ] && stripdir=${BINDIR}
534 find ${stripdir} | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
535 }
536
537 sminclude()
538 {
539 local i
540
541 if [[ -n "$@" ]]
542 then
543 for i in $@
544 do
545 echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
546 source ${SMAGESCRIPTSDIR}/include/${i}.sminc
547 done
548 echo
549 fi
550 }
551
552 setup_distcc_environment()
553 {
554 if [ -x /usr/bin/distcc ]
555 then
556 echo -e "${COLBLUE}---${COLGREEN} Using DistCC for compilation ...${COLDEFAULT}"
557 export PATH=/usr/$(mlibdir)/distcc/bin:${PATH} || die "distcc: could not export new $PATH"
558
559 export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
560
561 # creating distcc tempdir
562 install -o distcc -g daemon -d ${DISTCC_DIR}
563 chmod 1777 ${DISTCC_DIR}
564 fi
565 }
566
567 setup_ccache_environment()
568 {
569 if [ -x /usr/bin/ccache ]
570 then
571 echo -e "${COLBLUE}---${COLGREEN} Using CCache for compilation ...${COLDEFAULT}"
572 export PATH=/usr/$(mlibdir)/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
573 fi
574 }
575
576
577 # fixes given dependencies to match a MAGE_TARGET
578 # fix_mage_deps -target s/depend # <-- note -target !
579 fix_mage_deps()
580 {
581 local target="$1"
582 local depend="$2"
583 local NDEPEND
584 local sym dep cat pver pname
585
586 # deps and provides are special
587 # they must be fixed to match the target
588
589 # run this only if target and depend is not empty
590 if [ -n "${target}" ] && [ -n "${depend}" ]
591 then
592 # fix DEPEND
593 while read sym dep
594 do
595 # ignore empty lines
596 [[ -z ${dep} ]] && continue
597
598 cat="$(dirname ${dep})"
599 # change if not virtual
600 if [[ ${cat} = virtual ]]
601 then
602 pname="$(basename ${dep})"
603 else
604 # fix pver to target-pver
605 # to get pname-target-pver
606
607 # doing it backwards !
608 pver="${dep##*-}"
609 # full pver
610 pname="$(basename ${dep/-${pver}/})${target}-${pver}"
611 fi
612
613 # do not add empty lines
614 if [ -z "${NDEPEND}" ]
615 then
616 NDEPEND="${sym} ${cat}/${pname}"
617 else
618 NDEPEND="${NDEPEND}
619 ${sym} ${cat}/${pname}"
620 fi
621
622 unset cat pname pver
623 done << EOF
624 ${depend}
625 EOF
626 # set NDEPEND to DEPEND
627 depend="${NDEPEND}"
628 fi
629
630 echo "${depend}"
631 }
632
633 # build_mage_script(): helper functions for regen_mage_tree()
634 # generates an mage file with given information in smage file
635 # needs at least:
636 # PNAME name of pkg
637 # PVER version
638 # PBUILD revision
639 # PCATEGORIE categorie of the pkg
640 # STATE state of pkg stable|unstable|old
641 # DESCRIPTION va short description (opt)
642 # HOMEPAGE homepage (opt)
643 # DEPEND runtime dependencies (opt)
644 # SDEPEND add. needed deps to build the pkg (opt)
645 # PROVIDE provides a virtual (opt)
646 #
647 # special tags:
648 # PKGTYPE type of pkg
649 # INHERITS which functions get included
650 # SPECIAL_FUNCTIONS special functions wich should also be added
651 # warning: they get killed before the build starts !
652 #
653 # MAGE_TREE_DEST target destination of the generated tree
654 # REGEN_MAGE_TREE set to 'true' to enable this
655 #
656 # gets called with build_mage_script target
657 build_mage_script()
658 {
659 local magefile
660 local dest
661 local target
662 local sym
663 local depname
664
665 # if MAGE_TREE_DEST not set use BUILDDIR
666 : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
667
668 # determinate which suffix this mage file should get, if any
669 [ -n "$1" ] && target="-$1"
670
671 # name of magefile
672 magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage"
673
674 # destination to magefile
675 dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}"
676
677 # show what we are doing
678 echo -e "${COLBLUE}===${COLGREEN} generating mage file:${COLDEFAULT}"
679 echo "${dest}"
680
681 install -d "$(dirname ${dest})"
682 # now build the mage file
683 > ${dest}
684
685 # header
686 echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.59 2007-11-05 16:47:10 niro Exp $' >> ${dest}
687 echo >> ${dest}
688
689 # pgkname and state
690 echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest}
691 echo "STATE=\"${STATE}\"" >> ${dest}
692 echo >> ${dest}
693
694 # description and homepage
695 echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest}
696 echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest}
697 echo >> ${dest}
698
699 # special tags and vars
700 echo "PKGTYPE=\"${PKGTYPE}\"" >> ${dest}
701
702 # echo MAGE_TARGETS ## note -target is needed !
703 echo "MAGE_TARGETS=\"${target}\"" >> ${dest}
704 echo >> ${dest}
705
706 # add special vars
707 if [ -n "${SPECIAL_VARS}" ]
708 then
709 local i
710 for i in ${SPECIAL_VARS}
711 do
712 # being tricky here :)
713 echo "${i}=\"$(eval echo \$${i})\"" >> ${dest}
714 done
715 echo >> ${dest}
716 fi
717
718 # add at least all includes
719 if [ -n "${INHERITS}" ]
720 then
721 echo -n "minclude" >> ${dest}
722 local i
723 for i in ${INHERITS}
724 do
725 echo -n " ${i}" >> ${dest}
726 done
727 echo >> ${dest}
728 fi
729 echo >> ${dest}
730
731 # deps and provides
732 echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest}
733 echo >> ${dest}
734 echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest}
735 echo >> ${dest}
736 echo "PROVIDE=\"${PROVIDE}\"" >> ${dest}
737 echo >> ${dest}
738
739 # add special functions
740 if [ -n "${SPECIAL_FUNCTIONS}" ]
741 then
742 local i
743 for i in ${SPECIAL_FUNCTIONS}
744 do
745 # add to mage (quotes needed !)
746 typeset -f "${i}" >> ${dest}
747 echo >> ${dest}
748 # unset to be safe (quotes needed !)
749 #unset "${i}" <-- later to get every target built
750 done
751 echo >> ${dest}
752 fi
753
754 # pre|post-install|removes
755 typeset -f preinstall >> ${dest}
756 echo >> ${dest}
757 typeset -f postinstall >> ${dest}
758 echo >> ${dest}
759 typeset -f preremove >> ${dest}
760 echo >> ${dest}
761 typeset -f postremove >> ${dest}
762 echo >> ${dest}
763 }
764
765 regen_mage_tree()
766 {
767 local i
768
769 # build them only if requested
770 if [[ ${REGEN_MAGE_TREE} = true ]]
771 then
772 # run it without targets
773 if [ -z "${MAGE_TARGETS}" ]
774 then
775 echo
776 build_mage_script
777 echo
778 else
779
780 # build for each target an mage file
781 # run it with several targets
782 for i in ${MAGE_TARGETS}
783 do
784 echo
785 build_mage_script "${i}"
786 echo
787 done
788 fi
789 fi
790
791 # now unset all uneeded vars to be safe
792 # unset PKGNAME <-- don't do that; smage needs this var
793 # unset to be safe (quotes needed !)
794 # for i in ${SPECIAL_FUNCTIONS}
795 # do
796 # unset "${i}"
797 # done
798 unset SPECIAL_FUNCTIONS
799 # for i in ${SPECIAL_VARS}
800 # do
801 # unset "${i}"
802 # done
803 unset SPECIAL_VARS
804 unset STATE
805 unset DESCRIPTION
806 unset HOMEPAGE
807 unset PKGTYPE
808 unset INHERITS
809 unset DEPEND
810 unset SDEPEND
811 unset PROVIDE
812 unset preinstall
813 unset postinstall
814 unset preremove
815 unset postremove
816 }
817
818 export_inherits()
819 {
820 local include="$1"
821 shift
822
823 while [ "$1" ]
824 do
825 local functions="$1"
826
827 # sanity checks
828 [ -z "${include}" ] && die "export_inherits(): \$include not given."
829 [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
830
831 eval "${functions}() { ${include}_${functions} ; }"
832
833 # debug
834 [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
835
836 shift
837 done
838 }
839
840 generate_package_md5sum()
841 {
842 local dest
843 local pcat
844 local pname
845 local pver
846 local pbuild
847 local parch
848 local target
849 local pkgname
850
851 # very basic getops
852 for i in $*
853 do
854 case $1 in
855 --pcat|-c) shift; pcat="$1" ;;
856 --pname|-n) shift; pname="$1" ;;
857 --pver|-v) shift; pver="$1" ;;
858 --pbuild|-b) shift; pbuild="$1" ;;
859 --parch|a) shift; parch="$1" ;;
860 --target|t) shift; target="$1" ;;
861 esac
862 shift
863 done
864
865 # sanity checks; abort if not given
866 [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given."
867 [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given."
868 [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given."
869 [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given."
870 [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given."
871
872 # check needed global vars
873 [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set."
874 [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set."
875
876 # fix target as it may be empty !
877 [ -n "${target}" ] && target="-${target}"
878
879 # build pkgname
880 pkgname="${pname}${target}-${pver}-${parch}-${pbuild}"
881
882 # build pkg-md5-sum only if requested
883 if [[ ${REGEN_MAGE_TREE} = true ]]
884 then
885 echo -ne "${COLBLUE}===${COLGREEN} generating md5's for ${pkgname}.${PKGSUFFIX} ... ${COLDEFAULT}"
886
887 # abort if not exist
888 if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ]
889 then
890 echo -e "${COLRED}! exists${COLDEFAULT}"
891 return 0
892 fi
893
894 # if MAGE_TREE_DEST not set use BUILDDIR
895 : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
896
897 # setup md5 dir
898 dest="${MAGE_TREE_DEST}/${pcat}/${pname}/md5"
899 install -d ${dest}
900
901 # gen md5sum
902 ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \
903 > ${dest}/${pkgname}.md5
904 echo -e "${COLGREEN}done${COLDEFAULT}"
905 fi
906 }
907
908 source_pkg_build()
909 {
910 if [[ ${PKGTYPE} = virtual ]]
911 then
912 echo "Virtual package detected; src-pkg-tarball not necessary ..."
913 return 0
914 fi
915
916 if [[ ! -d ${SOURCEDIR}/${PNAME} ]]
917 then
918 echo "No SRC_URI defined; src-pkg-tarball not necessary ..."
919 return 0
920 fi
921
922 [ -z "${SRCPKGDIR}" ] && die "\$SRCPKGDIR not found. Please setup your ${MAGERC} correctly."
923
924 echo -e "${COLGREEN}Creating source package tarball ... ${COLDEFAULT}"
925
926 # include the smage2 file
927 cp ${SMAGENAME} ${SOURCEDIR}/${PNAME}
928
929 ( cd ${SOURCEDIR}; tar cvjf ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${PNAME}; )
930 [[ ! -d ${SRCPKGDIR} ]] && install -d ${SRCPKGDIR}
931 mv ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${SRCPKGDIR}/${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}
932
933 echo -e "${COLGREEN}Source package ${COLBLUE}${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} ${COLGREEN}successfully builded.${COLDEFAULT}"
934 }
935
936
937 # print out our version
938 showversion
939 echo
940
941 if [ -z "$1" ]
942 then
943 echo "No .smage2 file given. Exiting."
944 echo
945 exit 1
946 fi
947
948 # updating smage2-scripts
949 if [[ $1 = update ]]
950 then
951 if [ ! -d ${SOURCEDIR} ]
952 then
953 install -d ${SOURCEDIR}
954 fi
955 syncsmage2
956 exit 0
957 fi
958
959 # creates md5sums for smages to given dir
960 if [[ $1 = calcmd5 ]]
961 then
962 if [ $# -ge 3 ]
963 then
964 SMAGENAME="$2"
965 MD5DIR="$3"
966 source ${SMAGENAME} || die "download source failed"
967
968 # overridable sourcedir; must be declared after source of the smage2
969 CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}"
970
971 [ -z "${SRC_URI}" ] && die "Nothing declared to calculate."
972
973 # end of array
974 EOA=${#SRC_URI[*]}
975
976 [ ! -d ${MD5DIR} ] && install -d ${MD5DIR}
977
978 # clear md5sum file
979 MY_MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
980 echo -n > ${MY_MD5_FILE}
981
982 for ((i=0; i < EOA; i++))
983 do
984 # url to file
985 my_SRC_URI="$(echo ${SRC_URI[${i}]} | cut -d' ' -f1)"
986
987 # subdir in sources dir; the my_SRCI_URI file goes to there
988 my_SRC_URI_DEST="$(echo ${SRC_URI[${i}]} | cut -d' ' -f2)"
989
990 # if my_src_uri_dest is not equal my_src_uri; than an other dir is used
991 if [[ ${my_SRC_URI_DEST} != ${my_SRC_URI} ]]
992 then
993 MY_SRC_FILE="${my_SRC_URI_DEST}/$(basename ${SRC_URI[${i}]})"
994 else
995 MY_SRC_FILE="$(basename ${SRC_URI[${i}]})"
996 fi
997
998 if [ -e "${CALC_SOURCEDIR}/${MY_SRC_FILE}" ]
999 then
1000 echo "calculating $(basename ${MY_SRC_FILE}) ..."
1001 ( cd ${CALC_SOURCEDIR}; md5sum "${MY_SRC_FILE}" ) >> ${MY_MD5_FILE}
1002 else
1003 echo "WARNING: File '$(basename ${MY_SRC_FILE}) not found in ${CALC_SOURCEDIR}."
1004 fi
1005
1006 # unset them to be shure
1007 unset my_SRC_URI
1008 unset my_SRC_URI_DEST
1009 unset my_SRC_URI_MIRROR
1010 unset my_SOURCEDIR
1011 done
1012
1013 echo
1014 echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
1015 echo
1016 else
1017 echo "Usage: Calculating MD5 Sums:"
1018 echo " $(basename $0) calcmd5 /path/to/SMAGENAME /path/to/MD5DIR"
1019 echo
1020 echo
1021 echo "Export the CALC_SOURCEDIR variable to override current SOURCEDIRs."
1022 echo
1023 exit 1
1024 fi
1025
1026 exit 0
1027 fi
1028
1029 # download sources
1030 if [ "$1" == "download" -a -n "$2" ]
1031 then
1032 if [ ! -d ${SMAGESCRIPTSDIR} ]
1033 then
1034 install -d ${SMAGESCRIPTSDIR}
1035 fi
1036
1037 # get smage
1038 SMAGENAME="$2"
1039 MD5DIR="$(dirname ${SMAGENAME})/md5"
1040 source ${SMAGENAME} || die "download source failed"
1041
1042 download_sources
1043 exit 0
1044 fi
1045
1046 # regen-mage-tree
1047 if [ "$1" == "only-regen-tree" -a -n "$2" ]
1048 then
1049 # set correct SMAGENAME
1050 SMAGENAME="$2"
1051 MD5DIR="$(dirname ${SMAGENAME})/md5"
1052 source ${SMAGENAME} || die "regen: smage2 not found"
1053
1054 regen_mage_tree
1055
1056 # build md5sum for existing packages
1057 generate_package_md5sum \
1058 --pcat "${PCATEGORIE}" \
1059 --pname "${PNAME}" \
1060 --pver "${PVER}" \
1061 --pbuild "${PBUILD}" \
1062 --parch "${ARCH}" \
1063 --target "${target}"
1064
1065 exit 0
1066 fi
1067
1068 if [ "$1" == "--create-src-tarball" -a -n "$2" ]
1069 then
1070 # set correct SMAGENAME
1071 SMAGENAME="$2"
1072 MD5DIR="$(dirname ${SMAGENAME})/md5"
1073
1074 echo -e "${COLGREEN}create-src-tarball called for ${COLBLUE}${SMAGENAME}${COLGREEN} ...${COLDEFAULT}"
1075
1076 source ${SMAGENAME} || die "regen: smage2 not found"
1077
1078 if [[ -d ${SOURCEDIR}/${PNAME} ]]
1079 then
1080 echo -e "${COLGREEN}Deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
1081 rm -rf ${SOURCEDIR}/${PKGNAME}
1082 fi
1083
1084 download_sources
1085 source_pkg_build ${SMAGENAME}
1086 exit 0
1087 fi
1088
1089 if [ "$1" == "--src-tarball" -a -n "$2" ] || [ "$1" == "-st" -a -n "$2" ]
1090 then
1091 SRCPKGTARBALL="${2}"
1092 USE_SRC_PKG_TARBALL=true
1093
1094 # abort if given file is not a source pkg
1095 [[ ${SRCPKGTARBALL##*.} != ${SRCPKGSUFFIX} ]] && die "${SRCPKGTARBALL} is not a valid src-pkg file."
1096
1097 # set correct SMAGENAME; use the one that the src_pkg provide
1098 # /path/to/SOURCEDIR/PNAME/SMAGENAME
1099 SMAGENAME="${SOURCEDIR}/$(basename ${SRCPKGTARBALL%-*-*})/$(basename ${SRCPKGTARBALL} .${SRCPKGSUFFIX}).${SMAGESUFFIX}"
1100
1101 echo -e "${COLGREEN}Using src-tarball ${COLBLUE}${SRCPKGTARBALL}${COLGREEN} ...${COLDEFAULT}"
1102
1103 [[ ! -d ${SOURCEDIR} ]] && install -d ${SOURCEDIR}
1104
1105 # unpack srctarball
1106 [[ ! -f ${SRCPKGTARBALL} ]] && die "Error: ${SRCPKGTARBALL} does not exist. Aborting."
1107
1108 tar xvjf ${SRCPKGTARBALL} -C ${SOURCEDIR} || die "Error unpackung src-tarball ${SRCPKGTARBALL}"
1109
1110 [[ ! -f ${SMAGENAME} ]] && die "Included smage2 file in src-tarball not found: ${SMAGENAME}"
1111 fi
1112
1113
1114 [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
1115 [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] &&
1116 die "File '$(basename ${SMAGENAME})' is not a sMage v${SMAGEVERSION} file. Aborting."
1117 [ -z "${SOURCEDIR}" ] && die "\$SOURCEDIR not found. Please setup your ${MAGERC} correctly."
1118 [ -z "${SMAGESCRIPTSDIR}" ] && die "\$SMAGESCRIPTSDIR not found. Please setup your ${MAGERC} correctly."
1119 [ -z "${SMAGE2RSYNC}" ] && die "\$SMAGE2RSYNC not found. Please setup your ${MAGERC} correctly."
1120 [ -z "${BINDIR}" ] && die "no BINDIR variable found in ${MAGERC}"
1121 [ -z "${CHOST}" ] && die "no CHOST variable found in ${MAGERC}"
1122 [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in ${MAGERC}"
1123 [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in ${MAGERC}"
1124
1125 source ${SMAGENAME} || die "source failed"
1126 PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}"
1127 MD5DIR="$(dirname ${SMAGENAME})/md5"
1128
1129 xtitle "Compiling ${PKGNAME}"
1130 echo -e "${COLGREEN}Compiling ${PKGNAME}${COLDEFAULT}"
1131
1132 # auto regen mage tree if requested
1133 regen_mage_tree
1134
1135 if [[ ${CREATE_SRC_PKG_TARBALL} = true ]]
1136 then
1137 if [[ -d ${SOURCEDIR}/${PNAME} ]]
1138 then
1139 echo -e "${COLBLUE}===${COLGREEN} deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
1140 rm -rf ${SOURCEDIR}/${PNAME}
1141 fi
1142 fi
1143
1144 # download sources
1145 [[ ${USE_SRC_PKG_TARBALL} != true ]] && download_sources
1146
1147 # fixes some issues with these functions
1148 export -f src_prepare || die "src_prepare export failed"
1149 export -f src_compile || die "src_compile export failed"
1150 export -f src_install || die "src_install export failed"
1151
1152 # fixes some compile issues
1153 export CHOST="${CHOST}" || die "CHOST export failed"
1154 export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
1155 export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
1156 export BINDIR="${BINDIR}" || die "BINDIR export failed"
1157 export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
1158
1159
1160 # setup distcc
1161 # setup for distcc goes *before* ccache, so ccache comes before distcc in path
1162 [[ ${SMAGE_USE_DISTCC} = true ]] && setup_distcc_environment
1163
1164 # setup ccache
1165 [[ ${SMAGE_USE_CCACHE} = true ]] && setup_ccache_environment
1166
1167 # small sleep to show our settings
1168 sleep 1
1169
1170 # cleans up build if a previously one exists
1171 if [ -d ${BUILDDIR} ]
1172 then
1173 rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
1174 fi
1175 install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
1176
1177 # cleans up srcdir if a previously unpacked one exists
1178 if [ -d ${SRCDIR} ]
1179 then
1180 rm -rf ${SRCDIR}
1181 fi
1182
1183 # cleans up bindir if a previous build exists or creates a new one
1184 if [ -d ${BINDIR} ]
1185 then
1186 rm -rf ${BINDIR}
1187 fi
1188 install -d ${BINDIR} || die "couldn't create \$BINDIR."
1189
1190 # cleans up package temp dir if a previous build exists
1191 if [ -d ${BUILDDIR}/${PKGNAME} ]
1192 then
1193 rm -rf ${BUILDDIR}/${PKGNAME}
1194 fi
1195
1196 # cleans up timestamp if one exists
1197 if [ -f /var/tmp/timestamp ]
1198 then
1199 mage rmstamp
1200 fi
1201
1202 src_prepare || die "src_prepare failed"
1203 src_compile || die "src_compile failed"
1204 src_install || die "src_install failed"
1205
1206
1207 # compressing doc, info & man files
1208 if [ -d ${BUILDDIR}/builded/usr/share/man ]
1209 then
1210 echo -e "${COLBLUE}===${COLGREEN} compressing man-pages ...${COLDEFAULT}"
1211 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man
1212 fi
1213
1214 if [ -d ${BUILDDIR}/builded/usr/share/info ]
1215 then
1216 echo -e "${COLBLUE}===${COLGREEN} compressing info-pages ...${COLDEFAULT}"
1217 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info
1218 fi
1219
1220 # stripping all bins and libs
1221 case ${NOSTRIP} in
1222 true|TRUE|yes|y)
1223 echo -e "NOSTRIP=true detected; Package will not be stripped ..."
1224 ;;
1225 *)
1226 echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}"
1227 mstripbins ${BINDIR}
1228 echo -e "${COLBLUE}===${COLGREEN} stripping libraries ...${COLDEFAULT}"
1229 mstriplibs ${BINDIR}
1230 ;;
1231 esac
1232
1233 # the new buildpkg command
1234 case ${NOPKGBUILD} in
1235 true|TRUE|yes|y)
1236 echo -e "NOPGKBUILD=true detected; Package will not be build ..."
1237 ;;
1238 *)
1239 # build several targets
1240 if [ -n "${MAGE_TARGETS}" ]
1241 then
1242 for target in ${MAGE_TARGETS}
1243 do
1244 # check if an special target_pkgbuild exists
1245 if typeset -f ${target}_pkgbuild > /dev/null
1246 then
1247 # run it
1248 ${target}_pkgbuild
1249 fi
1250 # now create the target package
1251 ${MLIBDIR}/pkgbuild_dir.sh \
1252 "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1253 ${BINDIR} || die "target: ${target} package-build failed"
1254
1255 # build pkg-md5-sum if requested
1256 generate_package_md5sum \
1257 --pcat "${PCATEGORIE}" \
1258 --pname "${PNAME}" \
1259 --pver "${PVER}" \
1260 --pbuild "${PBUILD}" \
1261 --parch "${ARCH}" \
1262 --target "${target}"
1263
1264 echo -e "${COLGREEN}\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}"
1265 done
1266 else
1267 ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
1268
1269 # build pkg-md5-sum if requested
1270 generate_package_md5sum \
1271 --pcat "${PCATEGORIE}" \
1272 --pname "${PNAME}" \
1273 --pver "${PVER}" \
1274 --pbuild "${PBUILD}" \
1275 --parch "${ARCH}"
1276
1277 echo -e "${COLGREEN}\nPackage ${PKGNAME} successfully builded.\n${COLDEFAULT}"
1278 fi
1279
1280 # build src-pkg-tarball if requested
1281 [[ ${CREATE_SRC_PKG_TARBALL} = true ]] && source_pkg_build ${SMAGENAME}
1282 ;;
1283 esac
1284
1285 # for sure
1286 unset NOPKGBUILD
1287 unset NOSTRIP
1288
1289 xtitleclean

Properties

Name Value
svn:executable *