Magellan Linux

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

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

revision 89 by niro, Tue Jun 28 20:34:48 2005 UTC revision 384 by niro, Mon Jul 17 20:44:44 2006 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.12 2005-06-28 20:34:48 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.43 2006-07-17 20:44:44 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  ## setup ##  ## setup ##
 SMAGEVERSION=0.3.6-r16  
14  PKGSUFFIX="mpk"  PKGSUFFIX="mpk"
15  SMAGENAME="$1"  SMAGENAME="$1"
16  SMAGESUFFIX="smage2"  SMAGESUFFIX="smage2"
 #SOURCEDIR="/bootstrap/sources"  
 #SMAGESCRIPTSDIR="/bootstrap/smage2-install-scripts"  
 #SMAGE2RSYNC="rsync://192.168.0.2/smage2-scripts"  
17  MLIBDIR=/usr/lib/mage  MLIBDIR=/usr/lib/mage
18    SMAGEVERSION="$( < ${MLIBDIR}/version)"
19    
20    ## only for tests -> normally in /etc/rc.d/init.d/functions
21    COLRED="\033[1;6m\033[31m"
22    COLGREEN="\033[1;6m\033[32m"
23    COLYELLOW="\033[1;6m\033[33m"
24    COLBLUE="\033[1;6m\033[34m"
25    COLMAGENTA="\033[1;6m\033[35m"
26    COLWHITE="\033[1;6m\033[37m"
27    COLGRAY="\033[0;6m\033[37m"
28    COLBOLD="\033[1m"
29    COLDEFAULT="\033[0m"
30    
31    if [[ ${NOCOLORS} = true ]]
32    then
33     COLRED=""
34     COLGREEN=""
35     COLYELLOW=""
36     COLBLUE=""
37     COLMAGENTA=""
38     COLWHITE=""
39     COLGRAY=""
40     COLBOLD=""
41     COLDEFAULT=""
42    fi
43    
44    # export default C locale
45    export LC_ALL=C
46    
47  source /etc/mage.rc  source /etc/mage.rc
48    
49  showversion() {  # set PKGDIR and BUILDDIR and BINDIR to MROOT
50    if [[ -n ${MROOT} ]]
51    then
52     export PKGDIR=${MROOT}/${PKGDIR}
53     export BUILDDIR=${MROOT}/${BUILDDIR}
54     export BINDIR=${MROOT}/${BINDIR}
55    fi
56    
57    showversion()
58    {
59   echo -en "Magellan Source Install v${SMAGEVERSION} "   echo -en "Magellan Source Install v${SMAGEVERSION} "
60   echo -e  "-- Niels Rogalla (niro@magellan-linux.de)"   echo -e  "-- Niels Rogalla (niro@magellan-linux.de)"
61  }  }
62    
63  die() {  die()
64    {
65   xtitleclean   xtitleclean
66   echo "SMAGE failed: $@"   echo "SMAGE failed: $@"
67   exit 1   exit 1
68  }  }
69    
70  xtitle() {  xtitle()
71   if [ ${TERM} == "xterm" ]  {
72     if [[ ${TERM} = xterm ]]
73   then   then
74   echo -ne "\033]0;[sMage: $@]\007"   echo -ne "\033]0;[sMage: $@]\007"
75   fi   fi
76   return 0   return 0
77  }  }
78    
79  xtitleclean() {  xtitleclean()
80   if [ ${TERM} == "xterm" ]  {
81     if [[ ${TERM} = xterm ]]
82   then   then
83   echo -ne "\033]0;\007"   echo -ne "\033]0;\007"
84   fi   fi
85   return 0   return 0
86  }  }
87    
88  syncsmage2() {  syncsmage2()
89    {
90   xtitle "Updating smage2-script tree ..."   xtitle "Updating smage2-script tree ..."
91   local i   local i
92   for i in ${SMAGE2RSYNC}   for i in ${SMAGE2RSYNC}
# Line 68  syncsmage2() { Line 105  syncsmage2() {
105   --delete \   --delete \
106   --delete-after \   --delete-after \
107   ${i} ${SMAGESCRIPTSDIR}   ${i} ${SMAGESCRIPTSDIR}
108    
109   if [ "$?" == "0" ]   if [[ $? = 0 ]]
110   then   then
111   break   break
112   else   else
113   continue   continue
114   fi   fi
115    
116   done   done
117    
118   #clean up backup files (foo~)   # clean up backup files (foo~)
119   find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'   find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'
120    
121   xtitleclean   xtitleclean
122  }  }
123    
124  # $1 filename  # $1 filename
125  get_db_md5_sum() {  get_db_md5_sum()
126    {
127   local DB_FILE   local DB_FILE
128   local MD5_FILE   local MD5_FILE
129   local i   local i
# Line 98  get_db_md5_sum() { Line 136  get_db_md5_sum() {
136   echo "${i}"   echo "${i}"
137  }  }
138    
139  download_sources() {  download_sources()
140    {
141    
142   [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0   [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
143    
# Line 110  download_sources() { Line 149  download_sources() {
149   local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"   local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
150   local FETCHING   local FETCHING
151   local i mirror   local i mirror
   
152    
153   #install SRCDIR/PNAME if not exist  
154     # install SRCDIR/PNAME if not exist
155   [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}   [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}
156    
157   # check if FETCHING is needed   # check if FETCHING is needed
158   ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )   ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )
159   if [[ $? == 0 ]]   if [[ $? = 0 ]]
160   then   then
161   # md5's ok, not fetching needed   # md5's ok, not fetching needed
162   FETCHING=false   FETCHING=false
163   else   else
164   FETCHING=true   FETCHING=true
165   fi   fi
166    
167   for ((i=0; i < EOA; i++))   for ((i=0; i < EOA; i++))
168   do   do
169   # url to file   # url to file
# Line 148  download_sources() { Line 187  download_sources() {
187   do   do
188   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")"
189    
190   #echo "DEBUG: ${MY_SRC_URI}"   if [[ ${FETCHING} = true ]]
  if [[ ${FETCHING} == true ]]  
191   then   then
192   echo "==> fetching ${my_SRC_URI_MIRROR}"   echo "==> fetching ${my_SRC_URI_MIRROR}"
193   wget \   wget \
# Line 159  download_sources() { Line 197  download_sources() {
197   --progress bar \   --progress bar \
198   --directory-prefix="${my_SOURCEDIR}" \   --directory-prefix="${my_SOURCEDIR}" \
199   "${my_SRC_URI_MIRROR}"   "${my_SRC_URI_MIRROR}"
200   if [ "$?" == "0" ]   if [[ $? = 0 ]]
201   then   then
202   break   break
203   else   else
# Line 168  download_sources() { Line 206  download_sources() {
206   fi   fi
207   done   done
208   else   else
209   #echo "DEBUG: ${SRC_URI[${i}]}"   if [[ ${FETCHING} = true ]]
  if [[ ${FETCHING} == true ]]  
210   then   then
211   echo "==> fetching ${my_SRC_URI}"   echo "==> fetching ${my_SRC_URI}"
212   wget \   wget \
# Line 179  download_sources() { Line 216  download_sources() {
216   --progress bar \   --progress bar \
217   --directory-prefix="${my_SOURCEDIR}" \   --directory-prefix="${my_SOURCEDIR}" \
218   "${my_SRC_URI}"   "${my_SRC_URI}"
 # only needed to run through a list of mirrors  
 # if [ "$?" == "0" ]  
 # then  
 # break  
 # else  
 # continue  
 # fi  
219   fi   fi
220   fi   fi
221    
222   # unset them to be shure   # unset them to be shure
223   unset my_SRC_URI   unset my_SRC_URI
224   unset my_SRC_URI_DEST   unset my_SRC_URI_DEST
# Line 207  download_sources() { Line 237  download_sources() {
237  }  }
238    
239  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
240  src_prepare() {  src_prepare()
241    {
242   echo "no src_prepare defined"   echo "no src_prepare defined"
243   sleep 2   sleep 2
244   return 0   return 0
245  }  }
246    
247  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
248  src_compile() {  src_compile()
249    {
250   echo "no src_compile defined"   echo "no src_compile defined"
251   sleep 2   sleep 2
252   return 0   return 0
253  }  }
254    
255  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
256  src_install() {  src_install()
257    {
258   echo "no src_install defined"   echo "no src_install defined"
259   sleep 2   sleep 2
260   return 0   return 0
261  }  }
262    
263    mlibdir()
264    {
265     local libdir=lib
266     [[ ${ARCH} = x86_64 ]] && libdir=lib64
267    
268  build_mage_script() {   echo "${libdir}"
  return 0  
269  }  }
270    
271  mconfigure() {  mconfigure()
272    {
273   if [ -x ./configure ]   if [ -x ./configure ]
274   then   then
275   ./configure \   ./configure \
276   --prefix=/usr \   --prefix=/usr \
277   --host=${CHOST} \   --host=${CHOST} \
278   --mandir=/usr/share/man \   --mandir=/usr/share/man \
279   --infodir=/usr/share/info \   --infodir=/usr/share/info \
280   --datadir=/usr/share \   --datadir=/usr/share \
281   --sysconfdir=/etc \   --sysconfdir=/etc \
282   --localstatedir=/var/lib \   --localstatedir=/var/lib \
283   "$@" || die "mconfigure failed"   --libdir=/usr/$(mlibdir) \
284     "$@" || die "mconfigure failed"
285   else   else
286   echo "configure is not an executable ..."   echo "configure is not an executable ..."
287   exit 1   exit 1
288   fi   fi
289  }  }
290    
291  minstall() {  minstall()
292   if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then  {
293     if [ -f ./[mM]akefile -o -f ./GNUmakefile ]
294     then
295   make prefix=${BINDIR}/usr \   make prefix=${BINDIR}/usr \
296   datadir=${BINDIR}/usr/share \   datadir=${BINDIR}/usr/share \
297   infodir=${BINDIR}/usr/share/info \   infodir=${BINDIR}/usr/share/info \
298   localstatedir=${BINDIR}/var/lib \   localstatedir=${BINDIR}/var/lib \
299   mandir=${BINDIR}/usr/share/man \   mandir=${BINDIR}/usr/share/man \
300   sysconfdir=${BINDIR}/etc \   sysconfdir=${BINDIR}/etc \
301     libdir=${BINDIR}/usr/$(mlibdir) \
302   "$@" install || die "minstall failed"   "$@" install || die "minstall failed"
303          else          else
304                  die "no Makefile found"                  die "no Makefile found"
305          fi          fi
306  }  }
307    
308  mmake() {  mmake()
309    {
310   make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"   make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
311  }  }
312    
313  munpack() {  munpack()
314    {
315   local SRCFILE   local SRCFILE
316   local IFTAR   local IFTAR
317   local DEST   local DEST
318    
319   SRCFILE=$1   SRCFILE=$1
320    
321   if [ -z "$2" ]   if [ -z "$2" ]
322   then   then
323   DEST=${BUILDDIR}   DEST=${BUILDDIR}
324   else   else
325   DEST=$2   DEST=$2
326   fi   fi
327    
328   case "${SRCFILE##*.}" in   case "${SRCFILE##*.}" in
329   bz2)   bz2)
330   IFTAR="$(basename $SRCFILE .bz2)"   IFTAR="$(basename $SRCFILE .bz2)"
331   IFTAR="${IFTAR##*.}"   IFTAR="${IFTAR##*.}"
332   if [ "${IFTAR}" == "tar" ]   if [[ ${IFTAR} = tar ]]
333   then   then
334   tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}   tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
335   fi   fi
# Line 294  munpack() { Line 337  munpack() {
337   gz)   gz)
338   IFTAR="$(basename $SRCFILE .gz)"   IFTAR="$(basename $SRCFILE .gz)"
339   IFTAR="${IFTAR##*.}"   IFTAR="${IFTAR##*.}"
340   if [ "${IFTAR}" == "tar" ]   if [[ ${IFTAR} = tar ]]
341   then   then
342   tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}   tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
343   fi   fi
# Line 311  munpack() { Line 354  munpack() {
354   esac   esac
355  }  }
356    
357  mpatch() {  mpatch()
358    {
359   local PATCHOPTS   local PATCHOPTS
360   local PATCHFILE   local PATCHFILE
361    
362   PATCHOPTS=$1   PATCHOPTS=$1
363   PATCHFILE=$2   PATCHFILE=$2
364    
365     echo -e "${COLBLUE}*** ${COLGREEN}Applying patch '${PATCHFILE}'${COLDEFAULT}"
366   patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}   patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
367  }  }
368    
369    
370  minstalldocs() {  minstalldocs()
371    {
372   local docfiles   local docfiles
   
373   docfiles="$@"   docfiles="$@"
374    
375   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
376   then   then
377   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
378   fi   fi
379    
380   for i in ${docfiles}   for i in ${docfiles}
381   do   do
382   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
# Line 340  minstalldocs() { Line 385  minstalldocs() {
385   done   done
386  }  }
387    
388  mstriplibs() {  mstriplibs()
389    {
390   local stripdir="$@"   local stripdir="$@"
391    
392   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
393   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
394  }  }
395    
396  mstripbins() {  mstripbins()
397    {
398   local stripdir="$@"   local stripdir="$@"
399    
400   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
401   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
402  }  }
403    
404  setup_distcc_environment(){  sminclude()
405    {
406     local i
407    
408     if [[ -n "$@" ]]
409     then
410     for i in $@
411     do
412     echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
413     source ${SMAGESCRIPTSDIR}/include/${i}.sminc
414     done
415     echo
416     fi
417    }
418    
419    setup_distcc_environment()
420    {
421   if [ -x /usr/bin/distcc ]   if [ -x /usr/bin/distcc ]
422   then   then
423   echo "Using DistCC for compilation ..."   echo "Using DistCC for compilation ..."
424   export PATH=/usr/lib/distcc/bin:${PATH} || die "distcc: could not export new $PATH"   export PATH=/usr/$(mlibdir)/distcc/bin:${PATH} || die "distcc: could not export new $PATH"
   
  #export distcc as compiler  
 # export CC="distcc"  
 # export CXX=distcc  
425    
426   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
427    
428     # creating distcc tempdir
  #ccache + distcc together  
  if [ "${SMAGE_USE_CCACHE}" == "true" ]  
  then  
  if [ -x /usr/bin/ccache ]  
  then  
  echo "Preparing DistCC to work together with CCache ..."  
  #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix"  
 # export CC="ccache distcc"  
 # export CXX="ccache distcc"  
  fi  
  fi  
   
  #creating distcc tempdir  
429   install -o distcc -g daemon -d ${DISTCC_DIR}   install -o distcc -g daemon -d ${DISTCC_DIR}
430   chmod 1777 ${DISTCC_DIR}   chmod 1777 ${DISTCC_DIR}
431   fi   fi
432  }  }
433    
434  setup_ccache_environment(){  setup_ccache_environment()
435    {
436   if [ -x /usr/bin/ccache ]   if [ -x /usr/bin/ccache ]
437   then   then
438   echo "Using CCache for compilation ..."   echo "Using CCache for compilation ..."
439   export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH"   export PATH=/usr/$(mlibdir)/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
440   #unset CC CXX   fi
441    }
442    
443    
444    # fixes given dependencies to match a MAGE_TARGET
445    # fix_mage_deps -target s/depend # <-- note -target !
446    fix_mage_deps()
447    {
448     local target="$1"
449     local depend="$2"
450     local NDEPEND
451     local sym dep cat pver pname
452    
453     # deps and provides are special
454     # they must be fixed to match the target
455    
456     # run this only if target and depend is not empty
457     if [ -n "${target}" ] && [ -n "${depend}" ]
458     then
459     # fix DEPEND
460     while read sym dep
461     do
462     cat="$(dirname ${dep})"
463     # change if not virtual
464     if [[ ${cat} = virtual ]]
465     then
466     pname="$(basename ${dep})"
467     else
468     # fix pver to target-pver
469     # to get pname-target-pver
470    
471     # doing it backwards !
472     pver="${dep##*-}"
473     # full pver
474     pname="$(basename ${dep/-${pver}/})${target}-${pver}"
475     fi
476    
477     # do not add empty lines
478     if [ -z "${NDEPEND}" ]
479     then
480     NDEPEND="${sym} ${cat}/${pname}"
481     else
482     NDEPEND="${NDEPEND}
483     ${sym} ${cat}/${pname}"
484     fi
485    
486     unset cat pname pver
487     done << EOF
488    ${depend}
489    EOF
490     # set NDEPEND to DEPEND
491     depend="${NDEPEND}"
492     fi
493    
494     echo "${depend}"
495    }
496    
497    # build_mage_script(): helper functions for regen_mage_tree()
498    # generates an mage file with given information in smage file
499    # needs at least:
500    #   PNAME                 name of pkg
501    #   PVER                  version
502    #   PBUILD                revision
503    #   PCATEGORIE            categorie of the pkg
504    #   STATE                 state of pkg stable|unstable|old
505    #   DESCRIPTION           va short description (opt)
506    #   HOMEPAGE              homepage (opt)
507    #   DEPEND                runtime dependencies (opt)
508    #   SDEPEND               add. needed deps to build the pkg (opt)
509    #   PROVIDE               provides a virtual (opt)
510    #
511    # special tags:
512    #   PKGTYPE               type of pkg
513    #   INHERITS              which functions get included
514    #   SPECIAL_FUNCTIONS     special functions wich should also be added
515    #                         warning: they get killed before the build starts !
516    #
517    #   MAGE_TREE_DEST        target destination of the generated tree
518    #   REGEN_MAGE_TREE       set to 'true' to enable this
519    #
520    # gets called with build_mage_script target
521    build_mage_script()
522    {
523     local magefile
524     local dest
525     local target
526     local sym
527     local depname
528    
529     # if MAGE_TREE_DEST not set use BUILDDIR
530     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
531    
532     # determinate which suffix this mage file should get, if any
533     [ -n "$1" ] && target="-$1"
534    
535     # name of magefile
536     magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage"
537    
538     # destination to magefile
539     dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}"
540    
541     # show what we are doing
542     echo "Generating Mage file:"
543     echo "  ${dest}"
544    
545     install -d "$(dirname ${dest})"
546     # now build the mage file
547     > ${dest}
548    
549     # header
550     echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.43 2006-07-17 20:44:44 niro Exp $' >> ${dest}
551     echo  >> ${dest}
552    
553     # pgkname and state
554     echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest}
555     echo "STATE=\"${STATE}\"" >> ${dest}
556     echo >> ${dest}
557    
558     # description and homepage
559     echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest}
560     echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest}
561     echo >> ${dest}
562    
563     # special tags and vars
564     echo "PKGTYPE=\"${PKGTYPE}\""  >> ${dest}
565    
566     # echo MAGE_TARGETS ## note -target is needed !
567     echo "MAGE_TARGETS=\"${target}\"" >> ${dest}
568     echo >> ${dest}
569    
570     # add special vars
571     if [ -n "${SPECIAL_VARS}" ]
572     then
573     local i
574     for i in ${SPECIAL_VARS}
575     do
576     # being tricky here :)
577     echo "${i}=\"$(eval echo \$${i})\"" >> ${dest}
578     done
579     echo  >> ${dest}
580     fi
581    
582     # add at least all includes
583     if [ -n "${INHERITS}" ]
584     then
585     echo -n "minclude"  >> ${dest}
586     local i
587     for i in ${INHERITS}
588     do
589     echo -n " ${i}"  >> ${dest}
590     done
591     echo  >> ${dest}
592     fi
593     echo >> ${dest}
594    
595     # deps and provides
596     echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest}
597     echo >> ${dest}
598     echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest}
599     echo >> ${dest}
600     echo "PROVIDE=\"${PROVIDE}\"" >> ${dest}
601     echo >> ${dest}
602    
603     # add special functions
604     if [ -n "${SPECIAL_FUNCTIONS}" ]
605     then
606     local i
607     for i in ${SPECIAL_FUNCTIONS}
608     do
609     # add to mage (quotes needed !)
610     typeset -f "${i}" >> ${dest}
611     echo >> ${dest}
612     # unset to be safe (quotes needed !)
613     #unset "${i}" <-- later to get every target built
614     done
615     echo  >> ${dest}
616     fi
617    
618     # pre|post-install|removes
619     typeset -f preinstall >> ${dest}
620     echo  >> ${dest}
621     typeset -f postinstall >> ${dest}
622     echo  >> ${dest}
623     typeset -f preremove >> ${dest}
624     echo  >> ${dest}
625     typeset -f postremove >> ${dest}
626     echo  >> ${dest}
627    }
628    
629    regen_mage_tree()
630    {
631     local i
632    
633     # build them only if requested
634     if [[ ${REGEN_MAGE_TREE} = true ]]
635     then
636     # run it without targets
637     if [ -z "${MAGE_TARGETS}" ]
638     then
639     echo
640     build_mage_script
641     echo
642     else
643    
644     # build for each target an mage file
645     # run it with several targets
646     for i in ${MAGE_TARGETS}
647     do
648     echo
649     build_mage_script "${i}"
650     echo
651     done
652     fi
653     fi
654    
655     # now unset all uneeded vars to be safe
656     # unset PKGNAME <-- don't do that; smage needs this var
657     # unset to be safe (quotes needed !)
658     for i in ${SPECIAL_FUNCTIONS}
659     do
660     unset "${i}"
661     done
662     unset SPECIAL_FUNCTIONS
663     for i in ${SPECIAL_VARS}
664     do
665     unset "${i}"
666     done
667     unset SPECIAL_VARS
668     unset STATE
669     unset DESCRIPTION
670     unset HOMEPAGE
671     unset PKGTYPE
672     unset INHERITS
673     unset DEPEND
674     unset SDEPEND
675     unset PROVIDE
676     unset preinstall
677     unset postinstall
678     unset preremove
679     unset postremove
680    }
681    
682    export_inherits()
683    {
684     local include="$1"
685     shift
686    
687     while [ "$1" ]
688     do
689     local functions="$1"
690    
691     # sanity checks
692     [ -z "${include}" ] && die "export_inherits(): \$include not given."
693     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
694    
695     eval "${functions}() { ${include}_${functions} ; }"
696    
697     # debug
698     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
699    
700     shift
701     done
702    }
703    
704    generate_package_md5sum()
705    {
706     local dest
707     local pcat
708     local pname
709     local pver
710     local pbuild
711     local parch
712     local target
713     local pkgname
714    
715     # very basic getops
716     for i in $*
717     do
718     case $1 in
719     --pcat|-c) shift; pcat="$1" ;;
720     --pname|-n) shift; pname="$1" ;;
721     --pver|-v) shift; pver="$1" ;;
722     --pbuild|-b) shift; pbuild="$1" ;;
723     --parch|a) shift; parch="$1" ;;
724     --target|t) shift; target="$1" ;;
725     esac
726     shift
727     done
728    
729     # sanity checks; abort if not given
730     [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given."
731     [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given."
732     [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given."
733     [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given."
734     [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given."
735    
736     # check needed global vars
737     [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set."
738     [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set."
739    
740     # fix target as it may be empty !
741     [ -n "${target}" ] && target="-${target}"
742    
743     # build pkgname
744     pkgname="${pname}${target}-${pver}-${parch}-${pbuild}"
745    
746     # build pkg-md5-sum only if requested
747     if [[ ${REGEN_MAGE_TREE} = true ]]
748     then
749     echo -n "Generating a md5sum for ${pkgname}.${PKGSUFFIX} ... "
750    
751     # abort if not exist
752     if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ]
753     then
754     echo "! exists"
755     return 0
756     fi
757    
758     # if MAGE_TREE_DEST not set use BUILDDIR
759     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
760    
761     # setup md5 dir
762     dest="${MAGE_TREE_DEST}/${pcat}/${pname}/md5"
763     install -d ${dest}
764    
765     # gen md5sum
766     ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \
767     > ${dest}/${pkgname}.md5
768     echo "done"
769   fi   fi
770  }  }
771    
# Line 405  then Line 780  then
780   exit 1   exit 1
781  fi  fi
782    
783  #updating smage2-scripts  # updating smage2-scripts
784  if [ "$1" == "update" ]  if [[ $1 = update ]]
785  then  then
786   if [ ! -d ${SOURCEDIR} ]   if [ ! -d ${SOURCEDIR} ]
787   then   then
# Line 416  then Line 791  then
791   exit 0   exit 0
792  fi  fi
793    
794  #creates md5sums for smages to given dir  # creates md5sums for smages to given dir
795  if [ "$1" == "calcmd5" ]  if [[ $1 = calcmd5 ]]
796  then  then
797   if [ $# -ge 3 ]   if [ $# -ge 3 ]
798   then   then
# Line 469  then Line 844  then
844   unset my_SRC_URI_MIRROR   unset my_SRC_URI_MIRROR
845   unset my_SOURCEDIR   unset my_SOURCEDIR
846   done   done
847    
848   echo   echo
849   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
850   echo   echo
# Line 482  then Line 857  then
857   echo   echo
858   exit 1   exit 1
859   fi   fi
860    
861   exit 0   exit 0
862  fi  fi
863    
864  #download sources  # download sources
865  if [ "$1" == "download" -a -n "$2" ]  if [ "$1" == "download" -a -n "$2" ]
866  then  then
  showversion  
867   if [ ! -d ${SMAGESCRIPTSDIR} ]   if [ ! -d ${SMAGESCRIPTSDIR} ]
868   then   then
869   install -d ${SMAGESCRIPTSDIR}   install -d ${SMAGESCRIPTSDIR}
# Line 504  then Line 878  then
878   exit 0   exit 0
879  fi  fi
880    
881  if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]  # regen-mage-tree
882  then  if [ "$1" == "only-regen-tree" -a -n "$2" ]
  die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."  
 fi  
   
 if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]  
 then  
  die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."  
 fi  
   
 if [ -z "${SOURCEDIR}" ]  
883  then  then
884   die "\$SOURCEDIR not found. Please setup your mage.rc correctly."   # set correct SMAGENAME
885  fi   SMAGENAME="$2"
886     MD5DIR="$(dirname ${SMAGENAME})/md5"
887  if [ -z "${SMAGESCRIPTSDIR}" ]   source ${SMAGENAME} || die "regen: smage2 not found"
 then  
  die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."  
 fi  
   
 if [ -z "${SMAGE2RSYNC}" ]  
 then  
  echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."  
  exit 1  
 fi  
   
 if [ -z "${BINDIR}" ]  
 then  
  die "no BINDIR variable found in /etc/mage.rc"  
 fi  
888    
889  if [ -z "${CHOST}" ]   regen_mage_tree
 then  
  die "no CHOST variable found in /etc/mage.rc"  
 fi  
890    
891  if [ -z "${CFLAGS}" ]   # build md5sum for existing packages
892  then   generate_package_md5sum \
893   die "no CFLAGS variable found in /etc/mage.rc"   --pcat "${PCATEGORIE}" \
894  fi   --pname "${PNAME}" \
895     --pver "${PVER}" \
896     --pbuild "${PBUILD}" \
897     --parch "${ARCH}" \
898     --target "${target}"
899    
900  if [ -z "${CXXFLAGS}" ]   exit 0
 then  
  die "no CXXFLAGS variable found in /etc/mage.rc"  
901  fi  fi
902    
903    [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
904    [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] &&
905     die "File '$(basename ${SMAGENAME})' is not a sMage v${SMAGEVERSION} file. Aborting."
906    [ -z "${SOURCEDIR}" ] && die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
907    [ -z "${SMAGESCRIPTSDIR}" ] && die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
908    [ -z "${SMAGE2RSYNC}" ] && die "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
909    [ -z "${BINDIR}" ] && die "no BINDIR variable found in /etc/mage.rc"
910    [ -z "${CHOST}" ] && die "no CHOST variable found in /etc/mage.rc"
911    [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in /etc/mage.rc"
912    [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in /etc/mage.rc"
913    
914  source ${SMAGENAME} || die "source failed"  source ${SMAGENAME} || die "source failed"
915  PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"  PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}"
916  MD5DIR="$(dirname ${SMAGENAME})/md5"  MD5DIR="$(dirname ${SMAGENAME})/md5"
917    
918  xtitle "Compiling ${PKGNAME}"  xtitle "Compiling ${PKGNAME}"
919  echo "Compiling ${PKGNAME}"  echo "Compiling ${PKGNAME}"
920    
921  #download sources  # auto regen mage tree if requested
922    regen_mage_tree
923    
924    # download sources
925  download_sources  download_sources
926    
927  #fixes some issues with these functions  # fixes some issues with these functions
928  export -f src_prepare || die "src_prepare export failed"  export -f src_prepare || die "src_prepare export failed"
929  export -f src_compile || die "src_compile export failed"  export -f src_compile || die "src_compile export failed"
930  export -f src_install || die "src_install export failed"  export -f src_install || die "src_install export failed"
931    
932  #fixes some compile issues  # fixes some compile issues
933  export CHOST="${CHOST}" || die "CHOST export failed"  export CHOST="${CHOST}" || die "CHOST export failed"
934  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
935  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
# Line 574  export BINDIR="${BINDIR}" || die "BINDIR Line 937  export BINDIR="${BINDIR}" || die "BINDIR
937  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
938    
939    
940  #setup distcc  # setup distcc
941  #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
942  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  
943    
944    # setup ccache
945    [[ ${SMAGE_USE_CCACHE} = true ]] && setup_ccache_environment
946    
947  # small sleep to show our settings  # small sleep to show our settings
948  sleep 1  sleep 1
949    
950  #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  
951  if [ -d ${BUILDDIR} ]  if [ -d ${BUILDDIR} ]
952  then  then
953   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
954  fi  fi
955  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
956    
957  #cleans up srcdir if a previously unpacked one exists  # cleans up srcdir if a previously unpacked one exists
958  if [ -d ${SRCDIR} ]  if [ -d ${SRCDIR} ]
959  then  then
960   rm -rf ${SRCDIR}   rm -rf ${SRCDIR}
961  fi  fi
962    
963  #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
964  if [ -d ${BINDIR} ]  if [ -d ${BINDIR} ]
965  then  then
966   rm -rf ${BINDIR}   rm -rf ${BINDIR}
967  fi  fi
968  install -d ${BINDIR} || die "couldn't create \$BINDIR."  install -d ${BINDIR} || die "couldn't create \$BINDIR."
969    
970  #cleans up package temp dir if a previous build exists  # cleans up package temp dir if a previous build exists
971  if [ -d ${BUILDDIR}/${PKGNAME} ]  if [ -d ${BUILDDIR}/${PKGNAME} ]
972  then  then
973   rm -rf ${BUILDDIR}/${PKGNAME}   rm -rf ${BUILDDIR}/${PKGNAME}
974  fi  fi
975    
976  #cleans up timestamp if one exists  # cleans up timestamp if one exists
977  if [ -f /var/tmp/timestamp ]  if [ -f /var/tmp/timestamp ]
978  then  then
979   mage rmstamp   mage rmstamp
# Line 639  src_compile || die "src_compile failed" Line 984  src_compile || die "src_compile failed"
984  src_install || die "src_install failed"  src_install || die "src_install failed"
985    
986    
987  #compressing doc, info & man files  # compressing doc, info & man files
988  echo -e "Compressing man-pages ..."  echo -e "Compressing man-pages ..."
989  if [ -d ${BUILDDIR}/builded/usr/share/man ]  if [ -d ${BUILDDIR}/builded/usr/share/man ]
990  then  then
# Line 665  case ${NOSTRIP} in Line 1010  case ${NOSTRIP} in
1010   ;;   ;;
1011  esac  esac
1012    
1013  #the new buildpkg command  # the new buildpkg command
1014  case ${NOPKGBUILD} in  case ${NOPKGBUILD} in
1015   true|TRUE|yes|y)   true|TRUE|yes|y)
1016   echo -e "NOPGKBUILD=true detected; Package will not be build ..."   echo -e "NOPGKBUILD=true detected; Package will not be build ..."
1017   ;;   ;;
1018   *)   *)
1019   ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"   # build several targets
1020   echo -e "\nPackage ${PKGNAME} successfully builded.\n"   if [ -n "${MAGE_TARGETS}" ]
1021     then
1022     for target in ${MAGE_TARGETS}
1023     do
1024     # check if an special target_pkgbuild exists
1025     if typeset -f ${target}_pkgbuild > /dev/null
1026     then
1027     # run it
1028     ${target}_pkgbuild
1029     fi
1030     # now create the target package
1031     ${MLIBDIR}/pkgbuild_dir.sh \
1032     "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1033     ${BINDIR} || die "target: ${target} package-build failed"
1034    
1035     # build pkg-md5-sum if requested
1036     generate_package_md5sum \
1037     --pcat "${PCATEGORIE}" \
1038     --pname "${PNAME}" \
1039     --pver "${PVER}" \
1040     --pbuild "${PBUILD}" \
1041     --parch "${ARCH}" \
1042     --target "${target}"
1043    
1044     echo -e "\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n"
1045     done
1046     else
1047     ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
1048    
1049     # build pkg-md5-sum if requested
1050     generate_package_md5sum \
1051     --pcat "${PCATEGORIE}" \
1052     --pname "${PNAME}" \
1053     --pver "${PVER}" \
1054     --pbuild "${PBUILD}" \
1055     --parch "${ARCH}"
1056    
1057     echo -e "\nPackage ${PKGNAME} successfully builded.\n"
1058     fi
1059   ;;   ;;
1060  esac  esac
1061    
1062  #for sure  # for sure
1063  unset NOPKGBUILD  unset NOPKGBUILD
1064  unset NOSTRIP  unset NOSTRIP
1065    
1066  xtitleclean  xtitleclean
 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"  

Legend:
Removed from v.89  
changed lines
  Added in v.384