Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.40  
changed lines
  Added in v.891