Magellan Linux

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

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

revision 172 by niro, Sun Jul 31 14:16:19 2005 UTC revision 351 by niro, Wed Mar 22 17:45:49 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.17 2005-07-31 14:16:19 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.42 2006-03-22 17:45:49 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-r19  
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  # export default C locale
45  export LC_ALL=C  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 71  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 101  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 113  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 151  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 162  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 171  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 182  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 210  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 297  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 314  munpack() { Line 354  munpack() {
354   esac   esac
355  }  }
356    
357  mpatch() {  mpatch()
358    {
359   local PATCHOPTS   local PATCHOPTS
360   local PATCHFILE   local PATCHFILE
361    
# Line 325  mpatch() { Line 366  mpatch() {
366  }  }
367    
368    
369  minstalldocs() {  minstalldocs()
370    {
371   local docfiles   local docfiles
   
372   docfiles="$@"   docfiles="$@"
373    
374   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
375   then   then
376   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
377   fi   fi
378    
379   for i in ${docfiles}   for i in ${docfiles}
380   do   do
381   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
# Line 343  minstalldocs() { Line 384  minstalldocs() {
384   done   done
385  }  }
386    
387  mstriplibs() {  mstriplibs()
388    {
389   local stripdir="$@"   local stripdir="$@"
390    
391   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
392   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
393  }  }
394    
395  mstripbins() {  mstripbins()
396    {
397   local stripdir="$@"   local stripdir="$@"
398    
399   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
400   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
401  }  }
402    
403  sminclude() {  sminclude()
404    {
405   local i   local i
406    
407   if [ -n "$@" ]   if [[ -n "$@" ]]
408   then   then
409   for i in $@   for i in $@
410   do   do
411   echo "--- including ${SMAGESCRIPTSDIR}/include/${i}.incl"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
412   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
413   done   done
414     echo
415   fi   fi
416  }  }
417    
418  setup_distcc_environment(){  setup_distcc_environment()
419    {
420   if [ -x /usr/bin/distcc ]   if [ -x /usr/bin/distcc ]
421   then   then
422   echo "Using DistCC for compilation ..."   echo "Using DistCC for compilation ..."
423   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  
424    
425   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
426    
427     # 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  
428   install -o distcc -g daemon -d ${DISTCC_DIR}   install -o distcc -g daemon -d ${DISTCC_DIR}
429   chmod 1777 ${DISTCC_DIR}   chmod 1777 ${DISTCC_DIR}
430   fi   fi
431  }  }
432    
433  setup_ccache_environment(){  setup_ccache_environment()
434    {
435   if [ -x /usr/bin/ccache ]   if [ -x /usr/bin/ccache ]
436   then   then
437   echo "Using CCache for compilation ..."   echo "Using CCache for compilation ..."
438   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"
439   #unset CC CXX   fi
440    }
441    
442    
443    # fixes given dependencies to match a MAGE_TARGET
444    # fix_mage_deps -target s/depend # <-- note -target !
445    fix_mage_deps()
446    {
447     local target="$1"
448     local depend="$2"
449     local NDEPEND
450     local sym dep cat pver pname
451    
452     # deps and provides are special
453     # they must be fixed to match the target
454    
455     # run this only if target and depend is not empty
456     if [ -n "${target}" ] && [ -n "${depend}" ]
457     then
458     # fix DEPEND
459     while read sym dep
460     do
461     cat="$(dirname ${dep})"
462     # change if not virtual
463     if [[ ${cat} = virtual ]]
464     then
465     pname="$(basename ${dep})"
466     else
467     # fix pver to target-pver
468     # to get pname-target-pver
469    
470     # doing it backwards !
471     pver="${dep##*-}"
472     # full pver
473     pname="$(basename ${dep/-${pver}/})${target}-${pver}"
474     fi
475    
476     # do not add empty lines
477     if [ -z "${NDEPEND}" ]
478     then
479     NDEPEND="${sym} ${cat}/${pname}"
480     else
481     NDEPEND="${NDEPEND}
482     ${sym} ${cat}/${pname}"
483     fi
484    
485     unset cat pname pver
486     done << EOF
487    ${depend}
488    EOF
489     # set NDEPEND to DEPEND
490     depend="${NDEPEND}"
491     fi
492    
493     echo "${depend}"
494    }
495    
496    # build_mage_script(): helper functions for regen_mage_tree()
497    # generates an mage file with given information in smage file
498    # needs at least:
499    #   PNAME                 name of pkg
500    #   PVER                  version
501    #   PBUILD                revision
502    #   PCATEGORIE            categorie of the pkg
503    #   STATE                 state of pkg stable|unstable|old
504    #   DESCRIPTION           va short description (opt)
505    #   HOMEPAGE              homepage (opt)
506    #   DEPEND                runtime dependencies (opt)
507    #   SDEPEND               add. needed deps to build the pkg (opt)
508    #   PROVIDE               provides a virtual (opt)
509    #
510    # special tags:
511    #   PKGTYPE               type of pkg
512    #   INHERITS              which functions get included
513    #   SPECIAL_FUNCTIONS     special functions wich should also be added
514    #                         warning: they get killed before the build starts !
515    #
516    #   MAGE_TREE_DEST        target destination of the generated tree
517    #   REGEN_MAGE_TREE       set to 'true' to enable this
518    #
519    # gets called with build_mage_script target
520    build_mage_script()
521    {
522     local magefile
523     local dest
524     local target
525     local sym
526     local depname
527    
528     # if MAGE_TREE_DEST not set use BUILDDIR
529     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
530    
531     # determinate which suffix this mage file should get, if any
532     [ -n "$1" ] && target="-$1"
533    
534     # name of magefile
535     magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage"
536    
537     # destination to magefile
538     dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}"
539    
540     # show what we are doing
541     echo "Generating Mage file:"
542     echo "  ${dest}"
543    
544     install -d "$(dirname ${dest})"
545     # now build the mage file
546     > ${dest}
547    
548     # header
549     echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.42 2006-03-22 17:45:49 niro Exp $' >> ${dest}
550     echo  >> ${dest}
551    
552     # pgkname and state
553     echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest}
554     echo "STATE=\"${STATE}\"" >> ${dest}
555     echo >> ${dest}
556    
557     # description and homepage
558     echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest}
559     echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest}
560     echo >> ${dest}
561    
562     # special tags and vars
563     echo "PKGTYPE=\"${PKGTYPE}\""  >> ${dest}
564    
565     # echo MAGE_TARGETS ## note -target is needed !
566     echo "MAGE_TARGETS=\"${target}\"" >> ${dest}
567     echo >> ${dest}
568    
569     # add special vars
570     if [ -n "${SPECIAL_VARS}" ]
571     then
572     local i
573     for i in ${SPECIAL_VARS}
574     do
575     # being tricky here :)
576     echo "${i}=\"$(eval echo \$${i})\"" >> ${dest}
577     done
578     echo  >> ${dest}
579     fi
580    
581     # add at least all includes
582     if [ -n "${INHERITS}" ]
583     then
584     echo -n "minclude"  >> ${dest}
585     local i
586     for i in ${INHERITS}
587     do
588     echo -n " ${i}"  >> ${dest}
589     done
590     echo  >> ${dest}
591     fi
592     echo >> ${dest}
593    
594     # deps and provides
595     echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest}
596     echo >> ${dest}
597     echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest}
598     echo >> ${dest}
599     echo "PROVIDE=\"${PROVIDE}\"" >> ${dest}
600     echo >> ${dest}
601    
602     # add special functions
603     if [ -n "${SPECIAL_FUNCTIONS}" ]
604     then
605     local i
606     for i in ${SPECIAL_FUNCTIONS}
607     do
608     # add to mage (quotes needed !)
609     typeset -f "${i}" >> ${dest}
610     echo >> ${dest}
611     # unset to be safe (quotes needed !)
612     #unset "${i}" <-- later to get every target built
613     done
614     echo  >> ${dest}
615     fi
616    
617     # pre|post-install|removes
618     typeset -f preinstall >> ${dest}
619     echo  >> ${dest}
620     typeset -f postinstall >> ${dest}
621     echo  >> ${dest}
622     typeset -f preremove >> ${dest}
623     echo  >> ${dest}
624     typeset -f postremove >> ${dest}
625     echo  >> ${dest}
626    }
627    
628    regen_mage_tree()
629    {
630     local i
631    
632     # build them only if requested
633     if [[ ${REGEN_MAGE_TREE} = true ]]
634     then
635     # run it without targets
636     if [ -z "${MAGE_TARGETS}" ]
637     then
638     echo
639     build_mage_script
640     echo
641     else
642    
643     # build for each target an mage file
644     # run it with several targets
645     for i in ${MAGE_TARGETS}
646     do
647     echo
648     build_mage_script "${i}"
649     echo
650     done
651     fi
652     fi
653    
654     # now unset all uneeded vars to be safe
655     # unset PKGNAME <-- don't do that; smage needs this var
656     # unset to be safe (quotes needed !)
657     for i in ${SPECIAL_FUNCTIONS}
658     do
659     unset "${i}"
660     done
661     unset SPECIAL_FUNCTIONS
662     for i in ${SPECIAL_VARS}
663     do
664     unset "${i}"
665     done
666     unset SPECIAL_VARS
667     unset STATE
668     unset DESCRIPTION
669     unset HOMEPAGE
670     unset PKGTYPE
671     unset INHERITS
672     unset DEPEND
673     unset SDEPEND
674     unset PROVIDE
675     unset preinstall
676     unset postinstall
677     unset preremove
678     unset postremove
679    }
680    
681    export_inherits()
682    {
683     local include="$1"
684     shift
685    
686     while [ "$1" ]
687     do
688     local functions="$1"
689    
690     # sanity checks
691     [ -z "${include}" ] && die "export_inherits(): \$include not given."
692     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
693    
694     eval "${functions}() { ${include}_${functions} ; }"
695    
696     # debug
697     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
698    
699     shift
700     done
701    }
702    
703    generate_package_md5sum()
704    {
705     local dest
706     local pcat
707     local pname
708     local pver
709     local pbuild
710     local parch
711     local target
712     local pkgname
713    
714     # very basic getops
715     for i in $*
716     do
717     case $1 in
718     --pcat|-c) shift; pcat="$1" ;;
719     --pname|-n) shift; pname="$1" ;;
720     --pver|-v) shift; pver="$1" ;;
721     --pbuild|-b) shift; pbuild="$1" ;;
722     --parch|a) shift; parch="$1" ;;
723     --target|t) shift; target="$1" ;;
724     esac
725     shift
726     done
727    
728     # sanity checks; abort if not given
729     [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given."
730     [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given."
731     [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given."
732     [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given."
733     [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given."
734    
735     # check needed global vars
736     [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set."
737     [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set."
738    
739     # fix target as it may be empty !
740     [ -n "${target}" ] && target="-${target}"
741    
742     # build pkgname
743     pkgname="${pname}${target}-${pver}-${parch}-${pbuild}"
744    
745     # build pkg-md5-sum only if requested
746     if [[ ${REGEN_MAGE_TREE} = true ]]
747     then
748     echo -n "Generating a md5sum for ${pkgname}.${PKGSUFFIX} ... "
749    
750     # abort if not exist
751     if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ]
752     then
753     echo "! exists"
754     return 0
755     fi
756    
757     # if MAGE_TREE_DEST not set use BUILDDIR
758     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
759    
760     # setup md5 dir
761     dest="${MAGE_TREE_DEST}/${pcat}/${pname}/md5"
762     install -d ${dest}
763    
764     # gen md5sum
765     ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \
766     > ${dest}/${pkgname}.md5
767     echo "done"
768   fi   fi
769  }  }
770    
# Line 421  then Line 779  then
779   exit 1   exit 1
780  fi  fi
781    
782  #updating smage2-scripts  # updating smage2-scripts
783  if [ "$1" == "update" ]  if [[ $1 = update ]]
784  then  then
785   if [ ! -d ${SOURCEDIR} ]   if [ ! -d ${SOURCEDIR} ]
786   then   then
# Line 432  then Line 790  then
790   exit 0   exit 0
791  fi  fi
792    
793  #creates md5sums for smages to given dir  # creates md5sums for smages to given dir
794  if [ "$1" == "calcmd5" ]  if [[ $1 = calcmd5 ]]
795  then  then
796   if [ $# -ge 3 ]   if [ $# -ge 3 ]
797   then   then
# Line 485  then Line 843  then
843   unset my_SRC_URI_MIRROR   unset my_SRC_URI_MIRROR
844   unset my_SOURCEDIR   unset my_SOURCEDIR
845   done   done
846    
847   echo   echo
848   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
849   echo   echo
# Line 498  then Line 856  then
856   echo   echo
857   exit 1   exit 1
858   fi   fi
859    
860   exit 0   exit 0
861  fi  fi
862    
863  #download sources  # download sources
864  if [ "$1" == "download" -a -n "$2" ]  if [ "$1" == "download" -a -n "$2" ]
865  then  then
  showversion  
866   if [ ! -d ${SMAGESCRIPTSDIR} ]   if [ ! -d ${SMAGESCRIPTSDIR} ]
867   then   then
868   install -d ${SMAGESCRIPTSDIR}   install -d ${SMAGESCRIPTSDIR}
# Line 520  then Line 877  then
877   exit 0   exit 0
878  fi  fi
879    
880  if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]  # regen-mage-tree
881  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}" ]  
 then  
  die "\$SOURCEDIR not found. Please setup your mage.rc correctly."  
 fi  
   
 if [ -z "${SMAGESCRIPTSDIR}" ]  
 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}" ]  
882  then  then
883   die "no BINDIR variable found in /etc/mage.rc"   # set correct SMAGENAME
884  fi   SMAGENAME="$2"
885     MD5DIR="$(dirname ${SMAGENAME})/md5"
886     source ${SMAGENAME} || die "regen: smage2 not found"
887    
888  if [ -z "${CHOST}" ]   regen_mage_tree
 then  
  die "no CHOST variable found in /etc/mage.rc"  
 fi  
889    
890  if [ -z "${CFLAGS}" ]   # build md5sum for existing packages
891  then   generate_package_md5sum \
892   die "no CFLAGS variable found in /etc/mage.rc"   --pcat "${PCATEGORIE}" \
893  fi   --pname "${PNAME}" \
894     --pver "${PVER}" \
895     --pbuild "${PBUILD}" \
896     --parch "${ARCH}" \
897     --target "${target}"
898    
899  if [ -z "${CXXFLAGS}" ]   exit 0
 then  
  die "no CXXFLAGS variable found in /etc/mage.rc"  
900  fi  fi
901    
902    [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
903    [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] &&
904     die "File '$(basename ${SMAGENAME})' is not a sMage v${SMAGEVERSION} file. Aborting."
905    [ -z "${SOURCEDIR}" ] && die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
906    [ -z "${SMAGESCRIPTSDIR}" ] && die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
907    [ -z "${SMAGE2RSYNC}" ] && die "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
908    [ -z "${BINDIR}" ] && die "no BINDIR variable found in /etc/mage.rc"
909    [ -z "${CHOST}" ] && die "no CHOST variable found in /etc/mage.rc"
910    [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in /etc/mage.rc"
911    [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in /etc/mage.rc"
912    
913  source ${SMAGENAME} || die "source failed"  source ${SMAGENAME} || die "source failed"
914  PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"  PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}"
915  MD5DIR="$(dirname ${SMAGENAME})/md5"  MD5DIR="$(dirname ${SMAGENAME})/md5"
916    
917  xtitle "Compiling ${PKGNAME}"  xtitle "Compiling ${PKGNAME}"
918  echo "Compiling ${PKGNAME}"  echo "Compiling ${PKGNAME}"
919    
920  #download sources  # auto regen mage tree if requested
921    regen_mage_tree
922    
923    # download sources
924  download_sources  download_sources
925    
926  #fixes some issues with these functions  # fixes some issues with these functions
927  export -f src_prepare || die "src_prepare export failed"  export -f src_prepare || die "src_prepare export failed"
928  export -f src_compile || die "src_compile export failed"  export -f src_compile || die "src_compile export failed"
929  export -f src_install || die "src_install export failed"  export -f src_install || die "src_install export failed"
930    
931  #fixes some compile issues  # fixes some compile issues
932  export CHOST="${CHOST}" || die "CHOST export failed"  export CHOST="${CHOST}" || die "CHOST export failed"
933  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
934  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
# Line 590  export BINDIR="${BINDIR}" || die "BINDIR Line 936  export BINDIR="${BINDIR}" || die "BINDIR
936  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
937    
938    
939  #setup distcc  # setup distcc
940  #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
941  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  
942    
943    # setup ccache
944    [[ ${SMAGE_USE_CCACHE} = true ]] && setup_ccache_environment
945    
946  # small sleep to show our settings  # small sleep to show our settings
947  sleep 1  sleep 1
948    
949  #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  
950  if [ -d ${BUILDDIR} ]  if [ -d ${BUILDDIR} ]
951  then  then
952   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
953  fi  fi
954  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
955    
956  #cleans up srcdir if a previously unpacked one exists  # cleans up srcdir if a previously unpacked one exists
957  if [ -d ${SRCDIR} ]  if [ -d ${SRCDIR} ]
958  then  then
959   rm -rf ${SRCDIR}   rm -rf ${SRCDIR}
960  fi  fi
961    
962  #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
963  if [ -d ${BINDIR} ]  if [ -d ${BINDIR} ]
964  then  then
965   rm -rf ${BINDIR}   rm -rf ${BINDIR}
966  fi  fi
967  install -d ${BINDIR} || die "couldn't create \$BINDIR."  install -d ${BINDIR} || die "couldn't create \$BINDIR."
968    
969  #cleans up package temp dir if a previous build exists  # cleans up package temp dir if a previous build exists
970  if [ -d ${BUILDDIR}/${PKGNAME} ]  if [ -d ${BUILDDIR}/${PKGNAME} ]
971  then  then
972   rm -rf ${BUILDDIR}/${PKGNAME}   rm -rf ${BUILDDIR}/${PKGNAME}
973  fi  fi
974    
975  #cleans up timestamp if one exists  # cleans up timestamp if one exists
976  if [ -f /var/tmp/timestamp ]  if [ -f /var/tmp/timestamp ]
977  then  then
978   mage rmstamp   mage rmstamp
# Line 655  src_compile || die "src_compile failed" Line 983  src_compile || die "src_compile failed"
983  src_install || die "src_install failed"  src_install || die "src_install failed"
984    
985    
986  #compressing doc, info & man files  # compressing doc, info & man files
987  echo -e "Compressing man-pages ..."  echo -e "Compressing man-pages ..."
988  if [ -d ${BUILDDIR}/builded/usr/share/man ]  if [ -d ${BUILDDIR}/builded/usr/share/man ]
989  then  then
# Line 681  case ${NOSTRIP} in Line 1009  case ${NOSTRIP} in
1009   ;;   ;;
1010  esac  esac
1011    
1012  #the new buildpkg command  # the new buildpkg command
1013  case ${NOPKGBUILD} in  case ${NOPKGBUILD} in
1014   true|TRUE|yes|y)   true|TRUE|yes|y)
1015   echo -e "NOPGKBUILD=true detected; Package will not be build ..."   echo -e "NOPGKBUILD=true detected; Package will not be build ..."
1016   ;;   ;;
1017   *)   *)
1018   ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"   # build several targets
1019   echo -e "\nPackage ${PKGNAME} successfully builded.\n"   if [ -n "${MAGE_TARGETS}" ]
1020     then
1021     for target in ${MAGE_TARGETS}
1022     do
1023     # check if an special target_pkgbuild exists
1024     if typeset -f ${target}_pkgbuild > /dev/null
1025     then
1026     # run it
1027     ${target}_pkgbuild
1028     fi
1029     # now create the target package
1030     ${MLIBDIR}/pkgbuild_dir.sh \
1031     "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1032     ${BINDIR} || die "target: ${target} package-build failed"
1033    
1034     # build pkg-md5-sum if requested
1035     generate_package_md5sum \
1036     --pcat "${PCATEGORIE}" \
1037     --pname "${PNAME}" \
1038     --pver "${PVER}" \
1039     --pbuild "${PBUILD}" \
1040     --parch "${ARCH}" \
1041     --target "${target}"
1042    
1043     echo -e "\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n"
1044     done
1045     else
1046     ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
1047    
1048     # build pkg-md5-sum if requested
1049     generate_package_md5sum \
1050     --pcat "${PCATEGORIE}" \
1051     --pname "${PNAME}" \
1052     --pver "${PVER}" \
1053     --pbuild "${PBUILD}" \
1054     --parch "${ARCH}"
1055    
1056     echo -e "\nPackage ${PKGNAME} successfully builded.\n"
1057     fi
1058   ;;   ;;
1059  esac  esac
1060    
1061  #for sure  # for sure
1062  unset NOPKGBUILD  unset NOPKGBUILD
1063  unset NOSTRIP  unset NOSTRIP
1064    
1065  xtitleclean  xtitleclean
 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"  

Legend:
Removed from v.172  
changed lines
  Added in v.351