Magellan Linux

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

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

revision 156 by niro, Sat Jul 23 16:34:29 2005 UTC revision 427 by niro, Fri Feb 23 14:42:17 2007 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.14 2005-07-23 16:34:29 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.52 2007-02-23 14:42:17 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-r18  
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 ${MAGERC}
52    
53    # set PKGDIR and BUILDDIR and BINDIR to MROOT
54    if [[ -n ${MROOT} ]]
55    then
56     export PKGDIR=${MROOT}/${PKGDIR}
57     export BUILDDIR=${MROOT}/${BUILDDIR}
58     export BINDIR=${MROOT}/${BINDIR}
59    fi
60    
61  showversion() {  showversion()
62    {
63   echo -en "Magellan Source Install v${SMAGEVERSION} "   echo -en "Magellan Source Install v${SMAGEVERSION} "
64   echo -e  "-- Niels Rogalla (niro@magellan-linux.de)"   echo -e  "-- Niels Rogalla (niro@magellan-linux.de)"
65  }  }
66    
67  die() {  die()
68    {
69   xtitleclean   xtitleclean
70     echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT}
71   echo "SMAGE failed: $@"   echo "SMAGE failed: $@"
72   exit 1   exit 1
73  }  }
74    
75  xtitle() {  xtitle()
76   if [ ${TERM} == "xterm" ]  {
77     if [[ ${TERM} = xterm ]]
78   then   then
79   echo -ne "\033]0;[sMage: $@]\007"   echo -ne "\033]0;[sMage: $@]\007"
80   fi   fi
81   return 0   return 0
82  }  }
83    
84  xtitleclean() {  xtitleclean()
85   if [ ${TERM} == "xterm" ]  {
86     if [[ ${TERM} = xterm ]]
87   then   then
88   echo -ne "\033]0;\007"   echo -ne "\033]0;\007"
89   fi   fi
90   return 0   return 0
91  }  }
92    
93  syncsmage2() {  syncsmage2()
94    {
95   xtitle "Updating smage2-script tree ..."   xtitle "Updating smage2-script tree ..."
96   local i   local i
97   for i in ${SMAGE2RSYNC}   for i in ${SMAGE2RSYNC}
98   do   do
99   rsync \   rsync ${RSYNC_FETCH_OPTIONS} ${i} ${SMAGESCRIPTSDIR}
100   --recursive \   if [[ $? = 0 ]]
  --links \  
  --perms \  
  --times \  
  --devices \  
  --timeout=600 \  
  --verbose \  
  --compress \  
  --progress \  
  --stats \  
  --delete \  
  --delete-after \  
  ${i} ${SMAGESCRIPTSDIR}  
   
  if [ "$?" == "0" ]  
101   then   then
102   break   break
103   else   else
104   continue   continue
105   fi   fi
   
106   done   done
107    
108   #clean up backup files (foo~)   # clean up backup files (foo~)
109   find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'   find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'
110    
111   xtitleclean   xtitleclean
112  }  }
113    
114  # $1 filename  # $1 filename
115  get_db_md5_sum() {  get_db_md5_sum()
116    {
117   local DB_FILE   local DB_FILE
118   local MD5_FILE   local MD5_FILE
119   local i   local i
# Line 98  get_db_md5_sum() { Line 126  get_db_md5_sum() {
126   echo "${i}"   echo "${i}"
127  }  }
128    
129  download_sources() {  download_sources()
130    {
131    
132   [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0   [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
133    
# Line 110  download_sources() { Line 139  download_sources() {
139   local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"   local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
140   local FETCHING   local FETCHING
141   local i mirror   local i mirror
   
142    
143   #install SRCDIR/PNAME if not exist  
144     # install SRCDIR/PNAME if not exist
145   [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}   [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}
146    
147   # check if FETCHING is needed   # check if FETCHING is needed
148   ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )   ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )
149   if [[ $? == 0 ]]   if [[ $? = 0 ]]
150   then   then
151   # md5's ok, not fetching needed   # md5's ok, not fetching needed
152   FETCHING=false   FETCHING=false
153   else   else
154   FETCHING=true   FETCHING=true
155   fi   fi
156    
157   for ((i=0; i < EOA; i++))   for ((i=0; i < EOA; i++))
158   do   do
159   # url to file   # url to file
# Line 148  download_sources() { Line 177  download_sources() {
177   do   do
178   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")"
179    
180   #echo "DEBUG: ${MY_SRC_URI}"   if [[ ${FETCHING} = true ]]
  if [[ ${FETCHING} == true ]]  
181   then   then
182   echo "==> fetching ${my_SRC_URI_MIRROR}"   echo "==> fetching ${my_SRC_URI_MIRROR}"
183   wget \   wget \
# Line 159  download_sources() { Line 187  download_sources() {
187   --progress bar \   --progress bar \
188   --directory-prefix="${my_SOURCEDIR}" \   --directory-prefix="${my_SOURCEDIR}" \
189   "${my_SRC_URI_MIRROR}"   "${my_SRC_URI_MIRROR}"
190   if [ "$?" == "0" ]   if [[ $? = 0 ]]
191   then   then
192   break   break
193   else   else
# Line 168  download_sources() { Line 196  download_sources() {
196   fi   fi
197   done   done
198   else   else
199   #echo "DEBUG: ${SRC_URI[${i}]}"   if [[ ${FETCHING} = true ]]
  if [[ ${FETCHING} == true ]]  
200   then   then
201   echo "==> fetching ${my_SRC_URI}"   echo "==> fetching ${my_SRC_URI}"
202   wget \   wget \
# Line 179  download_sources() { Line 206  download_sources() {
206   --progress bar \   --progress bar \
207   --directory-prefix="${my_SOURCEDIR}" \   --directory-prefix="${my_SOURCEDIR}" \
208   "${my_SRC_URI}"   "${my_SRC_URI}"
 # only needed to run through a list of mirrors  
 # if [ "$?" == "0" ]  
 # then  
 # break  
 # else  
 # continue  
 # fi  
209   fi   fi
210   fi   fi
211    
212   # unset them to be shure   # unset them to be shure
213   unset my_SRC_URI   unset my_SRC_URI
214   unset my_SRC_URI_DEST   unset my_SRC_URI_DEST
# Line 207  download_sources() { Line 227  download_sources() {
227  }  }
228    
229  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
230  src_prepare() {  src_prepare()
231    {
232   echo "no src_prepare defined"   echo "no src_prepare defined"
233   sleep 2   sleep 2
234   return 0   return 0
235  }  }
236    
237  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
238  src_compile() {  src_compile()
239    {
240   echo "no src_compile defined"   echo "no src_compile defined"
241   sleep 2   sleep 2
242   return 0   return 0
243  }  }
244    
245  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
246  src_install() {  src_install()
247    {
248   echo "no src_install defined"   echo "no src_install defined"
249   sleep 2   sleep 2
250   return 0   return 0
251  }  }
252    
253    mlibdir()
254    {
255     local libdir=lib
256     [[ ${ARCH} = x86_64 ]] && libdir=lib64
257    
258  build_mage_script() {   echo "${libdir}"
  return 0  
259  }  }
260    
261  mconfigure() {  mconfigure()
262    {
263   if [ -x ./configure ]   if [ -x ./configure ]
264   then   then
265   ./configure \   ./configure \
266   --prefix=/usr \   --prefix=/usr \
267   --host=${CHOST} \   --host=${CHOST} \
268   --mandir=/usr/share/man \   --mandir=/usr/share/man \
269   --infodir=/usr/share/info \   --infodir=/usr/share/info \
270   --datadir=/usr/share \   --datadir=/usr/share \
271   --sysconfdir=/etc \   --sysconfdir=/etc \
272   --localstatedir=/var/lib \   --localstatedir=/var/lib \
273   "$@" || die "mconfigure failed"   --libdir=/usr/$(mlibdir) \
274     "$@" || die "mconfigure failed"
275   else   else
276   echo "configure is not an executable ..."   echo "configure is not an executable ..."
277   exit 1   exit 1
278   fi   fi
279  }  }
280    
281  minstall() {  minstall()
282   if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then  {
283     if [ -f ./[mM]akefile -o -f ./GNUmakefile ]
284     then
285   make prefix=${BINDIR}/usr \   make prefix=${BINDIR}/usr \
286   datadir=${BINDIR}/usr/share \   datadir=${BINDIR}/usr/share \
287   infodir=${BINDIR}/usr/share/info \   infodir=${BINDIR}/usr/share/info \
288   localstatedir=${BINDIR}/var/lib \   localstatedir=${BINDIR}/var/lib \
289   mandir=${BINDIR}/usr/share/man \   mandir=${BINDIR}/usr/share/man \
290   sysconfdir=${BINDIR}/etc \   sysconfdir=${BINDIR}/etc \
291     libdir=${BINDIR}/usr/$(mlibdir) \
292   "$@" install || die "minstall failed"   "$@" install || die "minstall failed"
293          else          else
294                  die "no Makefile found"                  die "no Makefile found"
295          fi          fi
296  }  }
297    
298  mmake() {  mmake()
299    {
300   make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"   make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
301  }  }
302    
303  munpack() {  munpack()
304    {
305   local SRCFILE   local SRCFILE
306   local IFTAR   local IFTAR
307   local DEST   local DEST
308    
309   SRCFILE=$1   SRCFILE=$1
310    
311   if [ -z "$2" ]   if [ -z "$2" ]
312   then   then
313   DEST=${BUILDDIR}   DEST=${BUILDDIR}
314   else   else
315   DEST=$2   DEST=$2
316   fi   fi
317    
318     [[ ! -d ${DEST} ]] && install -d ${DEST}
319    
320   case "${SRCFILE##*.}" in   case "${SRCFILE##*.}" in
321   bz2)   bz2)
322   IFTAR="$(basename $SRCFILE .bz2)"   IFTAR="$(basename $SRCFILE .bz2)"
323   IFTAR="${IFTAR##*.}"   IFTAR="${IFTAR##*.}"
324   if [ "${IFTAR}" == "tar" ]   if [[ ${IFTAR} = tar ]]
325   then   then
326   tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}   tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
327   fi   fi
# Line 294  munpack() { Line 329  munpack() {
329   gz)   gz)
330   IFTAR="$(basename $SRCFILE .gz)"   IFTAR="$(basename $SRCFILE .gz)"
331   IFTAR="${IFTAR##*.}"   IFTAR="${IFTAR##*.}"
332   if [ "${IFTAR}" == "tar" ]   if [[ ${IFTAR} = tar ]]
333   then   then
334   tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}   tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
335   fi   fi
# Line 311  munpack() { Line 346  munpack() {
346   esac   esac
347  }  }
348    
349  mpatch() {  mpatch()
350    {
351   local PATCHOPTS   local PATCHOPTS
352   local PATCHFILE   local PATCHFILE
353    
354   PATCHOPTS=$1   PATCHOPTS=$1
355   PATCHFILE=$2   PATCHFILE=$2
356    
357     echo -e "${COLBLUE}*** ${COLGREEN}Applying patch '${PATCHFILE}'${COLDEFAULT}"
358   patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}   patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
359  }  }
360    
361    
362  minstalldocs() {  minstalldocs()
363    {
364   local docfiles   local docfiles
   
365   docfiles="$@"   docfiles="$@"
366    
367   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
368   then   then
369   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
370   fi   fi
371    
372   for i in ${docfiles}   for i in ${docfiles}
373   do   do
374   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
# Line 340  minstalldocs() { Line 377  minstalldocs() {
377   done   done
378  }  }
379    
380  mstriplibs() {  mstriplibs()
381    {
382   local stripdir="$@"   local stripdir="$@"
383    
384   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
385   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
386  }  }
387    
388  mstripbins() {  mstripbins()
389    {
390   local stripdir="$@"   local stripdir="$@"
391    
392   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
393   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
394  }  }
395    
396  setup_distcc_environment(){  sminclude()
397    {
398     local i
399    
400     if [[ -n "$@" ]]
401     then
402     for i in $@
403     do
404     echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
405     source ${SMAGESCRIPTSDIR}/include/${i}.sminc
406     done
407     echo
408     fi
409    }
410    
411    setup_distcc_environment()
412    {
413   if [ -x /usr/bin/distcc ]   if [ -x /usr/bin/distcc ]
414   then   then
415   echo "Using DistCC for compilation ..."   echo "Using DistCC for compilation ..."
416   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  
417    
418   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
419    
420     # creating distcc tempdir
421     install -o distcc -g daemon -d ${DISTCC_DIR}
422     chmod 1777 ${DISTCC_DIR}
423     fi
424    }
425    
426   #ccache + distcc together  setup_ccache_environment()
427   if [ "${SMAGE_USE_CCACHE}" == "true" ]  {
428   then   if [ -x /usr/bin/ccache ]
429   if [ -x /usr/bin/ccache ]   then
430     echo "Using CCache for compilation ..."
431     export PATH=/usr/$(mlibdir)/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
432     fi
433    }
434    
435    
436    # fixes given dependencies to match a MAGE_TARGET
437    # fix_mage_deps -target s/depend # <-- note -target !
438    fix_mage_deps()
439    {
440     local target="$1"
441     local depend="$2"
442     local NDEPEND
443     local sym dep cat pver pname
444    
445     # deps and provides are special
446     # they must be fixed to match the target
447    
448     # run this only if target and depend is not empty
449     if [ -n "${target}" ] && [ -n "${depend}" ]
450     then
451     # fix DEPEND
452     while read sym dep
453     do
454     # ignore empty lines
455     [[ -z ${dep} ]] && continue
456    
457     cat="$(dirname ${dep})"
458     # change if not virtual
459     if [[ ${cat} = virtual ]]
460     then
461     pname="$(basename ${dep})"
462     else
463     # fix pver to target-pver
464     # to get pname-target-pver
465    
466     # doing it backwards !
467     pver="${dep##*-}"
468     # full pver
469     pname="$(basename ${dep/-${pver}/})${target}-${pver}"
470     fi
471    
472     # do not add empty lines
473     if [ -z "${NDEPEND}" ]
474   then   then
475   echo "Preparing DistCC to work together with CCache ..."   NDEPEND="${sym} ${cat}/${pname}"
476   #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix"   else
477  # export CC="ccache distcc"   NDEPEND="${NDEPEND}
478  # export CXX="ccache distcc"   ${sym} ${cat}/${pname}"
479   fi   fi
480    
481     unset cat pname pver
482     done << EOF
483    ${depend}
484    EOF
485     # set NDEPEND to DEPEND
486     depend="${NDEPEND}"
487     fi
488    
489     echo "${depend}"
490    }
491    
492    # build_mage_script(): helper functions for regen_mage_tree()
493    # generates an mage file with given information in smage file
494    # needs at least:
495    #   PNAME                 name of pkg
496    #   PVER                  version
497    #   PBUILD                revision
498    #   PCATEGORIE            categorie of the pkg
499    #   STATE                 state of pkg stable|unstable|old
500    #   DESCRIPTION           va short description (opt)
501    #   HOMEPAGE              homepage (opt)
502    #   DEPEND                runtime dependencies (opt)
503    #   SDEPEND               add. needed deps to build the pkg (opt)
504    #   PROVIDE               provides a virtual (opt)
505    #
506    # special tags:
507    #   PKGTYPE               type of pkg
508    #   INHERITS              which functions get included
509    #   SPECIAL_FUNCTIONS     special functions wich should also be added
510    #                         warning: they get killed before the build starts !
511    #
512    #   MAGE_TREE_DEST        target destination of the generated tree
513    #   REGEN_MAGE_TREE       set to 'true' to enable this
514    #
515    # gets called with build_mage_script target
516    build_mage_script()
517    {
518     local magefile
519     local dest
520     local target
521     local sym
522     local depname
523    
524     # if MAGE_TREE_DEST not set use BUILDDIR
525     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
526    
527     # determinate which suffix this mage file should get, if any
528     [ -n "$1" ] && target="-$1"
529    
530     # name of magefile
531     magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage"
532    
533     # destination to magefile
534     dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}"
535    
536     # show what we are doing
537     echo "Generating Mage file:"
538     echo "  ${dest}"
539    
540     install -d "$(dirname ${dest})"
541     # now build the mage file
542     > ${dest}
543    
544     # header
545     echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.52 2007-02-23 14:42:17 niro Exp $' >> ${dest}
546     echo  >> ${dest}
547    
548     # pgkname and state
549     echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest}
550     echo "STATE=\"${STATE}\"" >> ${dest}
551     echo >> ${dest}
552    
553     # description and homepage
554     echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest}
555     echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest}
556     echo >> ${dest}
557    
558     # special tags and vars
559     echo "PKGTYPE=\"${PKGTYPE}\""  >> ${dest}
560    
561     # echo MAGE_TARGETS ## note -target is needed !
562     echo "MAGE_TARGETS=\"${target}\"" >> ${dest}
563     echo >> ${dest}
564    
565     # add special vars
566     if [ -n "${SPECIAL_VARS}" ]
567     then
568     local i
569     for i in ${SPECIAL_VARS}
570     do
571     # being tricky here :)
572     echo "${i}=\"$(eval echo \$${i})\"" >> ${dest}
573     done
574     echo  >> ${dest}
575     fi
576    
577     # add at least all includes
578     if [ -n "${INHERITS}" ]
579     then
580     echo -n "minclude"  >> ${dest}
581     local i
582     for i in ${INHERITS}
583     do
584     echo -n " ${i}"  >> ${dest}
585     done
586     echo  >> ${dest}
587     fi
588     echo >> ${dest}
589    
590     # deps and provides
591     echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest}
592     echo >> ${dest}
593     echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest}
594     echo >> ${dest}
595     echo "PROVIDE=\"${PROVIDE}\"" >> ${dest}
596     echo >> ${dest}
597    
598     # add special functions
599     if [ -n "${SPECIAL_FUNCTIONS}" ]
600     then
601     local i
602     for i in ${SPECIAL_FUNCTIONS}
603     do
604     # add to mage (quotes needed !)
605     typeset -f "${i}" >> ${dest}
606     echo >> ${dest}
607     # unset to be safe (quotes needed !)
608     #unset "${i}" <-- later to get every target built
609     done
610     echo  >> ${dest}
611     fi
612    
613     # pre|post-install|removes
614     typeset -f preinstall >> ${dest}
615     echo  >> ${dest}
616     typeset -f postinstall >> ${dest}
617     echo  >> ${dest}
618     typeset -f preremove >> ${dest}
619     echo  >> ${dest}
620     typeset -f postremove >> ${dest}
621     echo  >> ${dest}
622    }
623    
624    regen_mage_tree()
625    {
626     local i
627    
628     # build them only if requested
629     if [[ ${REGEN_MAGE_TREE} = true ]]
630     then
631     # run it without targets
632     if [ -z "${MAGE_TARGETS}" ]
633     then
634     echo
635     build_mage_script
636     echo
637     else
638    
639     # build for each target an mage file
640     # run it with several targets
641     for i in ${MAGE_TARGETS}
642     do
643     echo
644     build_mage_script "${i}"
645     echo
646     done
647   fi   fi
648     fi
649    
650   #creating distcc tempdir   # now unset all uneeded vars to be safe
651   install -o distcc -g daemon -d ${DISTCC_DIR}   # unset PKGNAME <-- don't do that; smage needs this var
652   chmod 1777 ${DISTCC_DIR}   # unset to be safe (quotes needed !)
653     for i in ${SPECIAL_FUNCTIONS}
654     do
655     unset "${i}"
656     done
657     unset SPECIAL_FUNCTIONS
658     for i in ${SPECIAL_VARS}
659     do
660     unset "${i}"
661     done
662     unset SPECIAL_VARS
663     unset STATE
664     unset DESCRIPTION
665     unset HOMEPAGE
666     unset PKGTYPE
667     unset INHERITS
668     unset DEPEND
669     unset SDEPEND
670     unset PROVIDE
671     unset preinstall
672     unset postinstall
673     unset preremove
674     unset postremove
675    }
676    
677    export_inherits()
678    {
679     local include="$1"
680     shift
681    
682     while [ "$1" ]
683     do
684     local functions="$1"
685    
686     # sanity checks
687     [ -z "${include}" ] && die "export_inherits(): \$include not given."
688     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
689    
690     eval "${functions}() { ${include}_${functions} ; }"
691    
692     # debug
693     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
694    
695     shift
696     done
697    }
698    
699    generate_package_md5sum()
700    {
701     local dest
702     local pcat
703     local pname
704     local pver
705     local pbuild
706     local parch
707     local target
708     local pkgname
709    
710     # very basic getops
711     for i in $*
712     do
713     case $1 in
714     --pcat|-c) shift; pcat="$1" ;;
715     --pname|-n) shift; pname="$1" ;;
716     --pver|-v) shift; pver="$1" ;;
717     --pbuild|-b) shift; pbuild="$1" ;;
718     --parch|a) shift; parch="$1" ;;
719     --target|t) shift; target="$1" ;;
720     esac
721     shift
722     done
723    
724     # sanity checks; abort if not given
725     [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given."
726     [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given."
727     [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given."
728     [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given."
729     [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given."
730    
731     # check needed global vars
732     [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set."
733     [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set."
734    
735     # fix target as it may be empty !
736     [ -n "${target}" ] && target="-${target}"
737    
738     # build pkgname
739     pkgname="${pname}${target}-${pver}-${parch}-${pbuild}"
740    
741     # build pkg-md5-sum only if requested
742     if [[ ${REGEN_MAGE_TREE} = true ]]
743     then
744     echo -n "Generating a md5sum for ${pkgname}.${PKGSUFFIX} ... "
745    
746     # abort if not exist
747     if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ]
748     then
749     echo "! exists"
750     return 0
751     fi
752    
753     # if MAGE_TREE_DEST not set use BUILDDIR
754     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
755    
756     # setup md5 dir
757     dest="${MAGE_TREE_DEST}/${pcat}/${pname}/md5"
758     install -d ${dest}
759    
760     # gen md5sum
761     ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \
762     > ${dest}/${pkgname}.md5
763     echo "done"
764   fi   fi
765  }  }
766    
767  setup_ccache_environment(){  source_pkg_build()
768   if [ -x /usr/bin/ccache ]  {
769     if [[ ${PKGTYPE} = virtual ]]
770   then   then
771   echo "Using CCache for compilation ..."   echo "Virtual package detected; src-pkg-tarball not necessary ..."
772   export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH"   return 0
773   #unset CC CXX   fi
774    
775     if [[ ! -d ${SOURCEDIR}/${PNAME} ]]
776     then
777     echo "No SRC_URI defined; src-pkg-tarball not necessary ..."
778     return 0
779   fi   fi
780    
781     [ -z "${SRCPKGDIR}" ] && die "\$SRCPKGDIR not found. Please setup your ${MAGERC} correctly."
782    
783     echo -e "${COLGREEN}Creating source package tarball ... ${COLDEFAULT}"
784    
785     # include the smage2 file
786     cp ${SMAGENAME} ${SOURCEDIR}/${PNAME}
787    
788     ( cd ${SOURCEDIR}; tar cvjf ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${PNAME}; )
789     [[ ! -d ${SRCPKGDIR} ]] && install -d ${SRCPKGDIR}
790     mv ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${SRCPKGDIR}/${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}
791    
792     echo -e "${COLGREEN}Source package ${COLBLUE}${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} ${COLGREEN}successfully builded.${COLDEFAULT}"
793  }  }
794    
795    
796  # print out our version  # print out our version
797  showversion  showversion
798  echo  echo
# Line 405  then Line 804  then
804   exit 1   exit 1
805  fi  fi
806    
807  #updating smage2-scripts  # updating smage2-scripts
808  if [ "$1" == "update" ]  if [[ $1 = update ]]
809  then  then
810   if [ ! -d ${SOURCEDIR} ]   if [ ! -d ${SOURCEDIR} ]
811   then   then
# Line 416  then Line 815  then
815   exit 0   exit 0
816  fi  fi
817    
818  #creates md5sums for smages to given dir  # creates md5sums for smages to given dir
819  if [ "$1" == "calcmd5" ]  if [[ $1 = calcmd5 ]]
820  then  then
821   if [ $# -ge 3 ]   if [ $# -ge 3 ]
822   then   then
# Line 469  then Line 868  then
868   unset my_SRC_URI_MIRROR   unset my_SRC_URI_MIRROR
869   unset my_SOURCEDIR   unset my_SOURCEDIR
870   done   done
871    
872   echo   echo
873   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
874   echo   echo
# Line 482  then Line 881  then
881   echo   echo
882   exit 1   exit 1
883   fi   fi
884    
885   exit 0   exit 0
886  fi  fi
887    
888  #download sources  # download sources
889  if [ "$1" == "download" -a -n "$2" ]  if [ "$1" == "download" -a -n "$2" ]
890  then  then
  showversion  
891   if [ ! -d ${SMAGESCRIPTSDIR} ]   if [ ! -d ${SMAGESCRIPTSDIR} ]
892   then   then
893   install -d ${SMAGESCRIPTSDIR}   install -d ${SMAGESCRIPTSDIR}
# Line 504  then Line 902  then
902   exit 0   exit 0
903  fi  fi
904    
905  if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]  # regen-mage-tree
906    if [ "$1" == "only-regen-tree" -a -n "$2" ]
907  then  then
908   die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."   # set correct SMAGENAME
909  fi   SMAGENAME="$2"
910     MD5DIR="$(dirname ${SMAGENAME})/md5"
911     source ${SMAGENAME} || die "regen: smage2 not found"
912    
913  if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]   regen_mage_tree
 then  
  die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."  
 fi  
914    
915  if [ -z "${SOURCEDIR}" ]   # build md5sum for existing packages
916  then   generate_package_md5sum \
917   die "\$SOURCEDIR not found. Please setup your mage.rc correctly."   --pcat "${PCATEGORIE}" \
918  fi   --pname "${PNAME}" \
919     --pver "${PVER}" \
920     --pbuild "${PBUILD}" \
921     --parch "${ARCH}" \
922     --target "${target}"
923    
924  if [ -z "${SMAGESCRIPTSDIR}" ]   exit 0
 then  
  die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."  
925  fi  fi
926    
927  if [ -z "${SMAGE2RSYNC}" ]  if [ "$1" == "--create-src-tarball" -a -n "$2" ]
928  then  then
929   echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."   # set correct SMAGENAME
930   exit 1   SMAGENAME="$2"
931  fi   MD5DIR="$(dirname ${SMAGENAME})/md5"
932    
933  if [ -z "${BINDIR}" ]   echo -e "${COLGREEN}create-src-tarball called for ${COLBLUE}${SMAGENAME}${COLGREEN} ...${COLDEFAULT}"
 then  
  die "no BINDIR variable found in /etc/mage.rc"  
 fi  
934    
935  if [ -z "${CHOST}" ]   source ${SMAGENAME} || die "regen: smage2 not found"
 then  
  die "no CHOST variable found in /etc/mage.rc"  
 fi  
936    
937  if [ -z "${CFLAGS}" ]   if [[ -d ${SOURCEDIR}/${PNAME} ]]
938  then   then
939   die "no CFLAGS variable found in /etc/mage.rc"   echo -e "${COLGREEN}Deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
940     rm -rf ${SOURCEDIR}/${PKGNAME}
941     fi
942    
943     download_sources
944     source_pkg_build ${SMAGENAME}
945     exit 0
946  fi  fi
947    
948  if [ -z "${CXXFLAGS}" ]  if [ "$1" == "--src-tarball" -a -n "$2" ] || [ "$1" == "-st" -a -n "$2" ]
949  then  then
950   die "no CXXFLAGS variable found in /etc/mage.rc"   SRCPKGTARBALL="${2}"
951     USE_SRC_PKG_TARBALL=true
952    
953     # abort if given file is not a source pkg
954     [[ ${SRCPKGTARBALL##*.} != ${SRCPKGSUFFIX} ]] && die "${SRCPKGTARBALL} is not a valid src-pkg file."
955    
956     # set correct SMAGENAME; use the one that the src_pkg provide
957     # /path/to/SOURCEDIR/PNAME/SMAGENAME
958     SMAGENAME="${SOURCEDIR}/$(basename ${SRCPKGTARBALL%-*-*})/$(basename ${SRCPKGTARBALL} .${SRCPKGSUFFIX}).${SMAGESUFFIX}"
959    
960     echo -e "${COLGREEN}Using src-tarball ${COLBLUE}${SRCPKGTARBALL}${COLGREEN} ...${COLDEFAULT}"
961    
962     [[ ! -d ${SOURCEDIR} ]] && install -d ${SOURCEDIR}
963    
964     # unpack srctarball
965     [[ ! -f ${SRCPKGTARBALL} ]] && die "Error: ${SRCPKGTARBALL} does not exist. Aborting."
966    
967     tar xvjf ${SRCPKGTARBALL} -C ${SOURCEDIR} || die  "Error unpackung src-tarball ${SRCPKGTARBALL}"
968    
969     [[ ! -f ${SMAGENAME} ]] && die "Included smage2 file in src-tarball not found: ${SMAGENAME}"
970  fi  fi
971    
972    
973    [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
974    [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] &&
975     die "File '$(basename ${SMAGENAME})' is not a sMage v${SMAGEVERSION} file. Aborting."
976    [ -z "${SOURCEDIR}" ] && die "\$SOURCEDIR not found. Please setup your ${MAGERC} correctly."
977    [ -z "${SMAGESCRIPTSDIR}" ] && die "\$SMAGESCRIPTSDIR not found. Please setup your ${MAGERC} correctly."
978    [ -z "${SMAGE2RSYNC}" ] && die "\$SMAGE2RSYNC not found. Please setup your ${MAGERC} correctly."
979    [ -z "${BINDIR}" ] && die "no BINDIR variable found in ${MAGERC}"
980    [ -z "${CHOST}" ] && die "no CHOST variable found in ${MAGERC}"
981    [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in ${MAGERC}"
982    [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in ${MAGERC}"
983    
984  source ${SMAGENAME} || die "source failed"  source ${SMAGENAME} || die "source failed"
985  PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"  PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}"
986  MD5DIR="$(dirname ${SMAGENAME})/md5"  MD5DIR="$(dirname ${SMAGENAME})/md5"
987    
988  xtitle "Compiling ${PKGNAME}"  xtitle "Compiling ${PKGNAME}"
989  echo "Compiling ${PKGNAME}"  echo "Compiling ${PKGNAME}"
990    
991  #download sources  # auto regen mage tree if requested
992  download_sources  regen_mage_tree
993    
994  #fixes some issues with these functions  if [[ ${CREATE_SRC_PKG_TARBALL} = true ]]
995    then
996     if [[ -d ${SOURCEDIR}/${PNAME} ]]
997     then
998     echo -e "${COLGREEN}Deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
999     rm -rf ${SOURCEDIR}/${PNAME}
1000     fi
1001    fi
1002    
1003    # download sources
1004    [[ ${USE_SRC_PKG_TARBALL} != true ]] && download_sources
1005    
1006    # fixes some issues with these functions
1007  export -f src_prepare || die "src_prepare export failed"  export -f src_prepare || die "src_prepare export failed"
1008  export -f src_compile || die "src_compile export failed"  export -f src_compile || die "src_compile export failed"
1009  export -f src_install || die "src_install export failed"  export -f src_install || die "src_install export failed"
1010    
1011  #fixes some compile issues  # fixes some compile issues
1012  export CHOST="${CHOST}" || die "CHOST export failed"  export CHOST="${CHOST}" || die "CHOST export failed"
1013  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
1014  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
# Line 574  export BINDIR="${BINDIR}" || die "BINDIR Line 1016  export BINDIR="${BINDIR}" || die "BINDIR
1016  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
1017    
1018    
1019  #setup distcc  # setup distcc
1020  #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
1021  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  
1022    
1023    # setup ccache
1024    [[ ${SMAGE_USE_CCACHE} = true ]] && setup_ccache_environment
1025    
1026  # small sleep to show our settings  # small sleep to show our settings
1027  sleep 1  sleep 1
1028    
1029  #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  
1030  if [ -d ${BUILDDIR} ]  if [ -d ${BUILDDIR} ]
1031  then  then
1032   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
1033  fi  fi
1034  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
1035    
1036  #cleans up srcdir if a previously unpacked one exists  # cleans up srcdir if a previously unpacked one exists
1037  if [ -d ${SRCDIR} ]  if [ -d ${SRCDIR} ]
1038  then  then
1039   rm -rf ${SRCDIR}   rm -rf ${SRCDIR}
1040  fi  fi
1041    
1042  #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
1043  if [ -d ${BINDIR} ]  if [ -d ${BINDIR} ]
1044  then  then
1045   rm -rf ${BINDIR}   rm -rf ${BINDIR}
1046  fi  fi
1047  install -d ${BINDIR} || die "couldn't create \$BINDIR."  install -d ${BINDIR} || die "couldn't create \$BINDIR."
1048    
1049  #cleans up package temp dir if a previous build exists  # cleans up package temp dir if a previous build exists
1050  if [ -d ${BUILDDIR}/${PKGNAME} ]  if [ -d ${BUILDDIR}/${PKGNAME} ]
1051  then  then
1052   rm -rf ${BUILDDIR}/${PKGNAME}   rm -rf ${BUILDDIR}/${PKGNAME}
1053  fi  fi
1054    
1055  #cleans up timestamp if one exists  # cleans up timestamp if one exists
1056  if [ -f /var/tmp/timestamp ]  if [ -f /var/tmp/timestamp ]
1057  then  then
1058   mage rmstamp   mage rmstamp
# Line 639  src_compile || die "src_compile failed" Line 1063  src_compile || die "src_compile failed"
1063  src_install || die "src_install failed"  src_install || die "src_install failed"
1064    
1065    
1066  #compressing doc, info & man files  # compressing doc, info & man files
1067  echo -e "Compressing man-pages ..."  echo -e "Compressing man-pages ..."
1068  if [ -d ${BUILDDIR}/builded/usr/share/man ]  if [ -d ${BUILDDIR}/builded/usr/share/man ]
1069  then  then
# Line 665  case ${NOSTRIP} in Line 1089  case ${NOSTRIP} in
1089   ;;   ;;
1090  esac  esac
1091    
1092  #the new buildpkg command  # the new buildpkg command
1093  case ${NOPKGBUILD} in  case ${NOPKGBUILD} in
1094   true|TRUE|yes|y)   true|TRUE|yes|y)
1095   echo -e "NOPGKBUILD=true detected; Package will not be build ..."   echo -e "NOPGKBUILD=true detected; Package will not be build ..."
1096   ;;   ;;
1097   *)   *)
1098   ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"   # build several targets
1099   echo -e "\nPackage ${PKGNAME} successfully builded.\n"   if [ -n "${MAGE_TARGETS}" ]
1100     then
1101     for target in ${MAGE_TARGETS}
1102     do
1103     # check if an special target_pkgbuild exists
1104     if typeset -f ${target}_pkgbuild > /dev/null
1105     then
1106     # run it
1107     ${target}_pkgbuild
1108     fi
1109     # now create the target package
1110     ${MLIBDIR}/pkgbuild_dir.sh \
1111     "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1112     ${BINDIR} || die "target: ${target} package-build failed"
1113    
1114     # build pkg-md5-sum if requested
1115     generate_package_md5sum \
1116     --pcat "${PCATEGORIE}" \
1117     --pname "${PNAME}" \
1118     --pver "${PVER}" \
1119     --pbuild "${PBUILD}" \
1120     --parch "${ARCH}" \
1121     --target "${target}"
1122    
1123     echo -e "\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n"
1124     done
1125     else
1126     ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
1127    
1128     # build pkg-md5-sum if requested
1129     generate_package_md5sum \
1130     --pcat "${PCATEGORIE}" \
1131     --pname "${PNAME}" \
1132     --pver "${PVER}" \
1133     --pbuild "${PBUILD}" \
1134     --parch "${ARCH}"
1135    
1136     echo -e "\nPackage ${PKGNAME} successfully builded.\n"
1137     fi
1138    
1139     # build src-pkg-tarball if requested
1140     [[ ${CREATE_SRC_PKG_TARBALL} = true ]] && source_pkg_build ${SMAGENAME}
1141   ;;   ;;
1142  esac  esac
1143    
1144  #for sure  # for sure
1145  unset NOPKGBUILD  unset NOPKGBUILD
1146  unset NOSTRIP  unset NOSTRIP
1147    
1148  xtitleclean  xtitleclean
 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"  

Legend:
Removed from v.156  
changed lines
  Added in v.427