Magellan Linux

Diff of /branches/mage-next/src/smage2.in

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

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

Legend:
Removed from v.79  
changed lines
  Added in v.1081