Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *