Magellan Linux

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

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

revision 156 by niro, Sat Jul 23 16:34:29 2005 UTC revision 419 by niro, Mon Jan 22 00:24:14 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.51 2007-01-22 00:24:14 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     cat="$(dirname ${dep})"
455     # change if not virtual
456     if [[ ${cat} = virtual ]]
457     then
458     pname="$(basename ${dep})"
459     else
460     # fix pver to target-pver
461     # to get pname-target-pver
462    
463     # doing it backwards !
464     pver="${dep##*-}"
465     # full pver
466     pname="$(basename ${dep/-${pver}/})${target}-${pver}"
467     fi
468    
469     # do not add empty lines
470     if [ -z "${NDEPEND}" ]
471   then   then
472   echo "Preparing DistCC to work together with CCache ..."   NDEPEND="${sym} ${cat}/${pname}"
473   #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix"   else
474  # export CC="ccache distcc"   NDEPEND="${NDEPEND}
475  # export CXX="ccache distcc"   ${sym} ${cat}/${pname}"
476   fi   fi
477    
478     unset cat pname pver
479     done << EOF
480    ${depend}
481    EOF
482     # set NDEPEND to DEPEND
483     depend="${NDEPEND}"
484     fi
485    
486     echo "${depend}"
487    }
488    
489    # build_mage_script(): helper functions for regen_mage_tree()
490    # generates an mage file with given information in smage file
491    # needs at least:
492    #   PNAME                 name of pkg
493    #   PVER                  version
494    #   PBUILD                revision
495    #   PCATEGORIE            categorie of the pkg
496    #   STATE                 state of pkg stable|unstable|old
497    #   DESCRIPTION           va short description (opt)
498    #   HOMEPAGE              homepage (opt)
499    #   DEPEND                runtime dependencies (opt)
500    #   SDEPEND               add. needed deps to build the pkg (opt)
501    #   PROVIDE               provides a virtual (opt)
502    #
503    # special tags:
504    #   PKGTYPE               type of pkg
505    #   INHERITS              which functions get included
506    #   SPECIAL_FUNCTIONS     special functions wich should also be added
507    #                         warning: they get killed before the build starts !
508    #
509    #   MAGE_TREE_DEST        target destination of the generated tree
510    #   REGEN_MAGE_TREE       set to 'true' to enable this
511    #
512    # gets called with build_mage_script target
513    build_mage_script()
514    {
515     local magefile
516     local dest
517     local target
518     local sym
519     local depname
520    
521     # if MAGE_TREE_DEST not set use BUILDDIR
522     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
523    
524     # determinate which suffix this mage file should get, if any
525     [ -n "$1" ] && target="-$1"
526    
527     # name of magefile
528     magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage"
529    
530     # destination to magefile
531     dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}"
532    
533     # show what we are doing
534     echo "Generating Mage file:"
535     echo "  ${dest}"
536    
537     install -d "$(dirname ${dest})"
538     # now build the mage file
539     > ${dest}
540    
541     # header
542     echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.51 2007-01-22 00:24:14 niro Exp $' >> ${dest}
543     echo  >> ${dest}
544    
545     # pgkname and state
546     echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest}
547     echo "STATE=\"${STATE}\"" >> ${dest}
548     echo >> ${dest}
549    
550     # description and homepage
551     echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest}
552     echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest}
553     echo >> ${dest}
554    
555     # special tags and vars
556     echo "PKGTYPE=\"${PKGTYPE}\""  >> ${dest}
557    
558     # echo MAGE_TARGETS ## note -target is needed !
559     echo "MAGE_TARGETS=\"${target}\"" >> ${dest}
560     echo >> ${dest}
561    
562     # add special vars
563     if [ -n "${SPECIAL_VARS}" ]
564     then
565     local i
566     for i in ${SPECIAL_VARS}
567     do
568     # being tricky here :)
569     echo "${i}=\"$(eval echo \$${i})\"" >> ${dest}
570     done
571     echo  >> ${dest}
572     fi
573    
574     # add at least all includes
575     if [ -n "${INHERITS}" ]
576     then
577     echo -n "minclude"  >> ${dest}
578     local i
579     for i in ${INHERITS}
580     do
581     echo -n " ${i}"  >> ${dest}
582     done
583     echo  >> ${dest}
584     fi
585     echo >> ${dest}
586    
587     # deps and provides
588     echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest}
589     echo >> ${dest}
590     echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest}
591     echo >> ${dest}
592     echo "PROVIDE=\"${PROVIDE}\"" >> ${dest}
593     echo >> ${dest}
594    
595     # add special functions
596     if [ -n "${SPECIAL_FUNCTIONS}" ]
597     then
598     local i
599     for i in ${SPECIAL_FUNCTIONS}
600     do
601     # add to mage (quotes needed !)
602     typeset -f "${i}" >> ${dest}
603     echo >> ${dest}
604     # unset to be safe (quotes needed !)
605     #unset "${i}" <-- later to get every target built
606     done
607     echo  >> ${dest}
608     fi
609    
610     # pre|post-install|removes
611     typeset -f preinstall >> ${dest}
612     echo  >> ${dest}
613     typeset -f postinstall >> ${dest}
614     echo  >> ${dest}
615     typeset -f preremove >> ${dest}
616     echo  >> ${dest}
617     typeset -f postremove >> ${dest}
618     echo  >> ${dest}
619    }
620    
621    regen_mage_tree()
622    {
623     local i
624    
625     # build them only if requested
626     if [[ ${REGEN_MAGE_TREE} = true ]]
627     then
628     # run it without targets
629     if [ -z "${MAGE_TARGETS}" ]
630     then
631     echo
632     build_mage_script
633     echo
634     else
635    
636     # build for each target an mage file
637     # run it with several targets
638     for i in ${MAGE_TARGETS}
639     do
640     echo
641     build_mage_script "${i}"
642     echo
643     done
644   fi   fi
645     fi
646    
647   #creating distcc tempdir   # now unset all uneeded vars to be safe
648   install -o distcc -g daemon -d ${DISTCC_DIR}   # unset PKGNAME <-- don't do that; smage needs this var
649   chmod 1777 ${DISTCC_DIR}   # unset to be safe (quotes needed !)
650     for i in ${SPECIAL_FUNCTIONS}
651     do
652     unset "${i}"
653     done
654     unset SPECIAL_FUNCTIONS
655     for i in ${SPECIAL_VARS}
656     do
657     unset "${i}"
658     done
659     unset SPECIAL_VARS
660     unset STATE
661     unset DESCRIPTION
662     unset HOMEPAGE
663     unset PKGTYPE
664     unset INHERITS
665     unset DEPEND
666     unset SDEPEND
667     unset PROVIDE
668     unset preinstall
669     unset postinstall
670     unset preremove
671     unset postremove
672    }
673    
674    export_inherits()
675    {
676     local include="$1"
677     shift
678    
679     while [ "$1" ]
680     do
681     local functions="$1"
682    
683     # sanity checks
684     [ -z "${include}" ] && die "export_inherits(): \$include not given."
685     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
686    
687     eval "${functions}() { ${include}_${functions} ; }"
688    
689     # debug
690     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
691    
692     shift
693     done
694    }
695    
696    generate_package_md5sum()
697    {
698     local dest
699     local pcat
700     local pname
701     local pver
702     local pbuild
703     local parch
704     local target
705     local pkgname
706    
707     # very basic getops
708     for i in $*
709     do
710     case $1 in
711     --pcat|-c) shift; pcat="$1" ;;
712     --pname|-n) shift; pname="$1" ;;
713     --pver|-v) shift; pver="$1" ;;
714     --pbuild|-b) shift; pbuild="$1" ;;
715     --parch|a) shift; parch="$1" ;;
716     --target|t) shift; target="$1" ;;
717     esac
718     shift
719     done
720    
721     # sanity checks; abort if not given
722     [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given."
723     [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given."
724     [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given."
725     [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given."
726     [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given."
727    
728     # check needed global vars
729     [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set."
730     [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set."
731    
732     # fix target as it may be empty !
733     [ -n "${target}" ] && target="-${target}"
734    
735     # build pkgname
736     pkgname="${pname}${target}-${pver}-${parch}-${pbuild}"
737    
738     # build pkg-md5-sum only if requested
739     if [[ ${REGEN_MAGE_TREE} = true ]]
740     then
741     echo -n "Generating a md5sum for ${pkgname}.${PKGSUFFIX} ... "
742    
743     # abort if not exist
744     if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ]
745     then
746     echo "! exists"
747     return 0
748     fi
749    
750     # if MAGE_TREE_DEST not set use BUILDDIR
751     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
752    
753     # setup md5 dir
754     dest="${MAGE_TREE_DEST}/${pcat}/${pname}/md5"
755     install -d ${dest}
756    
757     # gen md5sum
758     ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \
759     > ${dest}/${pkgname}.md5
760     echo "done"
761   fi   fi
762  }  }
763    
764  setup_ccache_environment(){  source_pkg_build()
765   if [ -x /usr/bin/ccache ]  {
766     if [[ ${PKGTYPE} = virtual ]]
767   then   then
768   echo "Using CCache for compilation ..."   echo "Virtual package detected; src-pkg-tarball not necessary ..."
769   export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH"   return 0
770   #unset CC CXX   fi
771    
772     if [[ ! -d ${SOURCEDIR}/${PNAME} ]]
773     then
774     echo "No SRC_URI defined; src-pkg-tarball not necessary ..."
775     return 0
776   fi   fi
777    
778     [ -z "${SRCPKGDIR}" ] && die "\$SRCPKGDIR not found. Please setup your ${MAGERC} correctly."
779    
780     echo -e "${COLGREEN}Creating source package tarball ... ${COLDEFAULT}"
781    
782     # include the smage2 file
783     cp ${SMAGENAME} ${SOURCEDIR}/${PNAME}
784    
785     ( cd ${SOURCEDIR}; tar cvjf ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${PNAME}; )
786     [[ ! -d ${SRCPKGDIR} ]] && install -d ${SRCPKGDIR}
787     mv ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${SRCPKGDIR}/${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}
788    
789     echo -e "${COLGREEN}Source package ${COLBLUE}${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} ${COLGREEN}successfully builded.${COLDEFAULT}"
790  }  }
791    
792    
793  # print out our version  # print out our version
794  showversion  showversion
795  echo  echo
# Line 405  then Line 801  then
801   exit 1   exit 1
802  fi  fi
803    
804  #updating smage2-scripts  # updating smage2-scripts
805  if [ "$1" == "update" ]  if [[ $1 = update ]]
806  then  then
807   if [ ! -d ${SOURCEDIR} ]   if [ ! -d ${SOURCEDIR} ]
808   then   then
# Line 416  then Line 812  then
812   exit 0   exit 0
813  fi  fi
814    
815  #creates md5sums for smages to given dir  # creates md5sums for smages to given dir
816  if [ "$1" == "calcmd5" ]  if [[ $1 = calcmd5 ]]
817  then  then
818   if [ $# -ge 3 ]   if [ $# -ge 3 ]
819   then   then
# Line 469  then Line 865  then
865   unset my_SRC_URI_MIRROR   unset my_SRC_URI_MIRROR
866   unset my_SOURCEDIR   unset my_SOURCEDIR
867   done   done
868    
869   echo   echo
870   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
871   echo   echo
# Line 482  then Line 878  then
878   echo   echo
879   exit 1   exit 1
880   fi   fi
881    
882   exit 0   exit 0
883  fi  fi
884    
885  #download sources  # download sources
886  if [ "$1" == "download" -a -n "$2" ]  if [ "$1" == "download" -a -n "$2" ]
887  then  then
  showversion  
888   if [ ! -d ${SMAGESCRIPTSDIR} ]   if [ ! -d ${SMAGESCRIPTSDIR} ]
889   then   then
890   install -d ${SMAGESCRIPTSDIR}   install -d ${SMAGESCRIPTSDIR}
# Line 504  then Line 899  then
899   exit 0   exit 0
900  fi  fi
901    
902  if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]  # regen-mage-tree
903    if [ "$1" == "only-regen-tree" -a -n "$2" ]
904  then  then
905   die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."   # set correct SMAGENAME
906  fi   SMAGENAME="$2"
907     MD5DIR="$(dirname ${SMAGENAME})/md5"
908     source ${SMAGENAME} || die "regen: smage2 not found"
909    
910  if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]   regen_mage_tree
 then  
  die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."  
 fi  
911    
912  if [ -z "${SOURCEDIR}" ]   # build md5sum for existing packages
913  then   generate_package_md5sum \
914   die "\$SOURCEDIR not found. Please setup your mage.rc correctly."   --pcat "${PCATEGORIE}" \
915  fi   --pname "${PNAME}" \
916     --pver "${PVER}" \
917     --pbuild "${PBUILD}" \
918     --parch "${ARCH}" \
919     --target "${target}"
920    
921  if [ -z "${SMAGESCRIPTSDIR}" ]   exit 0
 then  
  die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."  
922  fi  fi
923    
924  if [ -z "${SMAGE2RSYNC}" ]  if [ "$1" == "--create-src-tarball" -a -n "$2" ]
925  then  then
926   echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."   # set correct SMAGENAME
927   exit 1   SMAGENAME="$2"
928  fi   MD5DIR="$(dirname ${SMAGENAME})/md5"
929    
930  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  
931    
932  if [ -z "${CHOST}" ]   source ${SMAGENAME} || die "regen: smage2 not found"
 then  
  die "no CHOST variable found in /etc/mage.rc"  
 fi  
933    
934  if [ -z "${CFLAGS}" ]   if [[ -d ${SOURCEDIR}/${PNAME} ]]
935  then   then
936   die "no CFLAGS variable found in /etc/mage.rc"   echo -e "${COLGREEN}Deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
937     rm -rf ${SOURCEDIR}/${PKGNAME}
938     fi
939    
940     download_sources
941     source_pkg_build ${SMAGENAME}
942     exit 0
943  fi  fi
944    
945  if [ -z "${CXXFLAGS}" ]  if [ "$1" == "--src-tarball" -a -n "$2" ] || [ "$1" == "-st" -a -n "$2" ]
946  then  then
947   die "no CXXFLAGS variable found in /etc/mage.rc"   SRCPKGTARBALL="${2}"
948     USE_SRC_PKG_TARBALL=true
949    
950     # abort if given file is not a source pkg
951     [[ ${SRCPKGTARBALL##*.} != ${SRCPKGSUFFIX} ]] && die "${SRCPKGTARBALL} is not a valid src-pkg file."
952    
953     # set correct SMAGENAME; use the one that the src_pkg provide
954     # /path/to/SOURCEDIR/PNAME/SMAGENAME
955     SMAGENAME="${SOURCEDIR}/$(basename ${SRCPKGTARBALL%-*-*})/$(basename ${SRCPKGTARBALL} .${SRCPKGSUFFIX}).${SMAGESUFFIX}"
956    
957     echo -e "${COLGREEN}Using src-tarball ${COLBLUE}${SRCPKGTARBALL}${COLGREEN} ...${COLDEFAULT}"
958    
959     [[ ! -d ${SOURCEDIR} ]] && install -d ${SOURCEDIR}
960    
961     # unpack srctarball
962     [[ ! -f ${SRCPKGTARBALL} ]] && die "Error: ${SRCPKGTARBALL} does not exist. Aborting."
963    
964     tar xvjf ${SRCPKGTARBALL} -C ${SOURCEDIR} || die  "Error unpackung src-tarball ${SRCPKGTARBALL}"
965    
966     [[ ! -f ${SMAGENAME} ]] && die "Included smage2 file in src-tarball not found: ${SMAGENAME}"
967  fi  fi
968    
969    
970    [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
971    [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] &&
972     die "File '$(basename ${SMAGENAME})' is not a sMage v${SMAGEVERSION} file. Aborting."
973    [ -z "${SOURCEDIR}" ] && die "\$SOURCEDIR not found. Please setup your ${MAGERC} correctly."
974    [ -z "${SMAGESCRIPTSDIR}" ] && die "\$SMAGESCRIPTSDIR not found. Please setup your ${MAGERC} correctly."
975    [ -z "${SMAGE2RSYNC}" ] && die "\$SMAGE2RSYNC not found. Please setup your ${MAGERC} correctly."
976    [ -z "${BINDIR}" ] && die "no BINDIR variable found in ${MAGERC}"
977    [ -z "${CHOST}" ] && die "no CHOST variable found in ${MAGERC}"
978    [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in ${MAGERC}"
979    [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in ${MAGERC}"
980    
981  source ${SMAGENAME} || die "source failed"  source ${SMAGENAME} || die "source failed"
982  PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"  PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}"
983  MD5DIR="$(dirname ${SMAGENAME})/md5"  MD5DIR="$(dirname ${SMAGENAME})/md5"
984    
985  xtitle "Compiling ${PKGNAME}"  xtitle "Compiling ${PKGNAME}"
986  echo "Compiling ${PKGNAME}"  echo "Compiling ${PKGNAME}"
987    
988  #download sources  # auto regen mage tree if requested
989  download_sources  regen_mage_tree
990    
991    if [[ ${CREATE_SRC_PKG_TARBALL} = true ]]
992    then
993     if [[ -d ${SOURCEDIR}/${PNAME} ]]
994     then
995     echo -e "${COLGREEN}Deleting old sourcefiles ${COLBLUE}${SOURCEDIR}/${PNAME}${COLGREEN} ...${COLDEFAULT}"
996     rm -rf ${SOURCEDIR}/${PNAME}
997     fi
998    fi
999    
1000    # download sources
1001    [[ ${USE_SRC_PKG_TARBALL} != true ]] && download_sources
1002    
1003  #fixes some issues with these functions  # fixes some issues with these functions
1004  export -f src_prepare || die "src_prepare export failed"  export -f src_prepare || die "src_prepare export failed"
1005  export -f src_compile || die "src_compile export failed"  export -f src_compile || die "src_compile export failed"
1006  export -f src_install || die "src_install export failed"  export -f src_install || die "src_install export failed"
1007    
1008  #fixes some compile issues  # fixes some compile issues
1009  export CHOST="${CHOST}" || die "CHOST export failed"  export CHOST="${CHOST}" || die "CHOST export failed"
1010  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
1011  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
# Line 574  export BINDIR="${BINDIR}" || die "BINDIR Line 1013  export BINDIR="${BINDIR}" || die "BINDIR
1013  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
1014    
1015    
1016  #setup distcc  # setup distcc
1017  #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
1018  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  
1019    
1020    # setup ccache
1021    [[ ${SMAGE_USE_CCACHE} = true ]] && setup_ccache_environment
1022    
1023  # small sleep to show our settings  # small sleep to show our settings
1024  sleep 1  sleep 1
1025    
1026  #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  
1027  if [ -d ${BUILDDIR} ]  if [ -d ${BUILDDIR} ]
1028  then  then
1029   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
1030  fi  fi
1031  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
1032    
1033  #cleans up srcdir if a previously unpacked one exists  # cleans up srcdir if a previously unpacked one exists
1034  if [ -d ${SRCDIR} ]  if [ -d ${SRCDIR} ]
1035  then  then
1036   rm -rf ${SRCDIR}   rm -rf ${SRCDIR}
1037  fi  fi
1038    
1039  #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
1040  if [ -d ${BINDIR} ]  if [ -d ${BINDIR} ]
1041  then  then
1042   rm -rf ${BINDIR}   rm -rf ${BINDIR}
1043  fi  fi
1044  install -d ${BINDIR} || die "couldn't create \$BINDIR."  install -d ${BINDIR} || die "couldn't create \$BINDIR."
1045    
1046  #cleans up package temp dir if a previous build exists  # cleans up package temp dir if a previous build exists
1047  if [ -d ${BUILDDIR}/${PKGNAME} ]  if [ -d ${BUILDDIR}/${PKGNAME} ]
1048  then  then
1049   rm -rf ${BUILDDIR}/${PKGNAME}   rm -rf ${BUILDDIR}/${PKGNAME}
1050  fi  fi
1051    
1052  #cleans up timestamp if one exists  # cleans up timestamp if one exists
1053  if [ -f /var/tmp/timestamp ]  if [ -f /var/tmp/timestamp ]
1054  then  then
1055   mage rmstamp   mage rmstamp
# Line 639  src_compile || die "src_compile failed" Line 1060  src_compile || die "src_compile failed"
1060  src_install || die "src_install failed"  src_install || die "src_install failed"
1061    
1062    
1063  #compressing doc, info & man files  # compressing doc, info & man files
1064  echo -e "Compressing man-pages ..."  echo -e "Compressing man-pages ..."
1065  if [ -d ${BUILDDIR}/builded/usr/share/man ]  if [ -d ${BUILDDIR}/builded/usr/share/man ]
1066  then  then
# Line 665  case ${NOSTRIP} in Line 1086  case ${NOSTRIP} in
1086   ;;   ;;
1087  esac  esac
1088    
1089  #the new buildpkg command  # the new buildpkg command
1090  case ${NOPKGBUILD} in  case ${NOPKGBUILD} in
1091   true|TRUE|yes|y)   true|TRUE|yes|y)
1092   echo -e "NOPGKBUILD=true detected; Package will not be build ..."   echo -e "NOPGKBUILD=true detected; Package will not be build ..."
1093   ;;   ;;
1094   *)   *)
1095   ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"   # build several targets
1096   echo -e "\nPackage ${PKGNAME} successfully builded.\n"   if [ -n "${MAGE_TARGETS}" ]
1097     then
1098     for target in ${MAGE_TARGETS}
1099     do
1100     # check if an special target_pkgbuild exists
1101     if typeset -f ${target}_pkgbuild > /dev/null
1102     then
1103     # run it
1104     ${target}_pkgbuild
1105     fi
1106     # now create the target package
1107     ${MLIBDIR}/pkgbuild_dir.sh \
1108     "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1109     ${BINDIR} || die "target: ${target} package-build failed"
1110    
1111     # build pkg-md5-sum if requested
1112     generate_package_md5sum \
1113     --pcat "${PCATEGORIE}" \
1114     --pname "${PNAME}" \
1115     --pver "${PVER}" \
1116     --pbuild "${PBUILD}" \
1117     --parch "${ARCH}" \
1118     --target "${target}"
1119    
1120     echo -e "\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n"
1121     done
1122     else
1123     ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
1124    
1125     # build pkg-md5-sum if requested
1126     generate_package_md5sum \
1127     --pcat "${PCATEGORIE}" \
1128     --pname "${PNAME}" \
1129     --pver "${PVER}" \
1130     --pbuild "${PBUILD}" \
1131     --parch "${ARCH}"
1132    
1133     echo -e "\nPackage ${PKGNAME} successfully builded.\n"
1134     fi
1135    
1136     # build src-pkg-tarball if requested
1137     [[ ${CREATE_SRC_PKG_TARBALL} = true ]] && source_pkg_build ${SMAGENAME}
1138   ;;   ;;
1139  esac  esac
1140    
1141  #for sure  # for sure
1142  unset NOPKGBUILD  unset NOPKGBUILD
1143  unset NOSTRIP  unset NOSTRIP
1144    
1145  xtitleclean  xtitleclean
 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"  

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