Magellan Linux

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

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

revision 186 by niro, Tue Aug 16 23:23:33 2005 UTC revision 386 by niro, Mon Jul 17 20:52:38 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.21 2005-08-16 23:23:26 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.44 2006-07-17 20:52:38 niro Exp $
8    
9  #01.10.2004  #01.10.2004
10  # added ccache support  # added ccache support
# Line 14  Line 14 
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)"  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}
93   do   do
94   rsync \   rsync ${RSYNC_FETCH_OPTIONS} ${i} ${SMAGESCRIPTSDIR}
95   --recursive \   if [[ $? = 0 ]]
  --links \  
  --perms \  
  --times \  
  --devices \  
  --timeout=600 \  
  --verbose \  
  --compress \  
  --progress \  
  --stats \  
  --delete \  
  --delete-after \  
  ${i} ${SMAGESCRIPTSDIR}  
   
  if [ "$?" == "0" ]  
96   then   then
97   break   break
98   else   else
99   continue   continue
100   fi   fi
   
101   done   done
102    
103   #clean up backup files (foo~)   # clean up backup files (foo~)
104   find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'   find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'
105    
106   xtitleclean   xtitleclean
107  }  }
108    
109  # $1 filename  # $1 filename
110  get_db_md5_sum() {  get_db_md5_sum()
111    {
112   local DB_FILE   local DB_FILE
113   local MD5_FILE   local MD5_FILE
114   local i   local i
# Line 101  get_db_md5_sum() { Line 121  get_db_md5_sum() {
121   echo "${i}"   echo "${i}"
122  }  }
123    
124  download_sources() {  download_sources()
125    {
126    
127   [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0   [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
128    
# Line 113  download_sources() { Line 134  download_sources() {
134   local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"   local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
135   local FETCHING   local FETCHING
136   local i mirror   local i mirror
   
137    
138   #install SRCDIR/PNAME if not exist  
139     # install SRCDIR/PNAME if not exist
140   [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}   [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}
141    
142   # check if FETCHING is needed   # check if FETCHING is needed
143   ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )   ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )
144   if [[ $? == 0 ]]   if [[ $? = 0 ]]
145   then   then
146   # md5's ok, not fetching needed   # md5's ok, not fetching needed
147   FETCHING=false   FETCHING=false
148   else   else
149   FETCHING=true   FETCHING=true
150   fi   fi
151    
152   for ((i=0; i < EOA; i++))   for ((i=0; i < EOA; i++))
153   do   do
154   # url to file   # url to file
# Line 151  download_sources() { Line 172  download_sources() {
172   do   do
173   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")"
174    
175   #echo "DEBUG: ${MY_SRC_URI}"   if [[ ${FETCHING} = true ]]
  if [[ ${FETCHING} == true ]]  
176   then   then
177   echo "==> fetching ${my_SRC_URI_MIRROR}"   echo "==> fetching ${my_SRC_URI_MIRROR}"
178   wget \   wget \
# Line 162  download_sources() { Line 182  download_sources() {
182   --progress bar \   --progress bar \
183   --directory-prefix="${my_SOURCEDIR}" \   --directory-prefix="${my_SOURCEDIR}" \
184   "${my_SRC_URI_MIRROR}"   "${my_SRC_URI_MIRROR}"
185   if [ "$?" == "0" ]   if [[ $? = 0 ]]
186   then   then
187   break   break
188   else   else
# Line 171  download_sources() { Line 191  download_sources() {
191   fi   fi
192   done   done
193   else   else
194   #echo "DEBUG: ${SRC_URI[${i}]}"   if [[ ${FETCHING} = true ]]
  if [[ ${FETCHING} == true ]]  
195   then   then
196   echo "==> fetching ${my_SRC_URI}"   echo "==> fetching ${my_SRC_URI}"
197   wget \   wget \
# Line 182  download_sources() { Line 201  download_sources() {
201   --progress bar \   --progress bar \
202   --directory-prefix="${my_SOURCEDIR}" \   --directory-prefix="${my_SOURCEDIR}" \
203   "${my_SRC_URI}"   "${my_SRC_URI}"
 # only needed to run through a list of mirrors  
 # if [ "$?" == "0" ]  
 # then  
 # break  
 # else  
 # continue  
 # fi  
204   fi   fi
205   fi   fi
206    
207   # unset them to be shure   # unset them to be shure
208   unset my_SRC_URI   unset my_SRC_URI
209   unset my_SRC_URI_DEST   unset my_SRC_URI_DEST
# Line 210  download_sources() { Line 222  download_sources() {
222  }  }
223    
224  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
225  src_prepare() {  src_prepare()
226    {
227   echo "no src_prepare defined"   echo "no src_prepare defined"
228   sleep 2   sleep 2
229   return 0   return 0
230  }  }
231    
232  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
233  src_compile() {  src_compile()
234    {
235   echo "no src_compile defined"   echo "no src_compile defined"
236   sleep 2   sleep 2
237   return 0   return 0
238  }  }
239    
240  # dummy function, used if that not exist in smage file  # dummy function, used if that not exist in smage file
241  src_install() {  src_install()
242    {
243   echo "no src_install defined"   echo "no src_install defined"
244   sleep 2   sleep 2
245   return 0   return 0
246  }  }
247    
248    mlibdir()
249    {
250     local libdir=lib
251     [[ ${ARCH} = x86_64 ]] && libdir=lib64
252    
253  build_mage_script() {   echo "${libdir}"
  return 0  
254  }  }
255    
256  mconfigure() {  mconfigure()
257    {
258   if [ -x ./configure ]   if [ -x ./configure ]
259   then   then
260   ./configure \   ./configure \
261   --prefix=/usr \   --prefix=/usr \
262   --host=${CHOST} \   --host=${CHOST} \
263   --mandir=/usr/share/man \   --mandir=/usr/share/man \
264   --infodir=/usr/share/info \   --infodir=/usr/share/info \
265   --datadir=/usr/share \   --datadir=/usr/share \
266   --sysconfdir=/etc \   --sysconfdir=/etc \
267   --localstatedir=/var/lib \   --localstatedir=/var/lib \
268   "$@" || die "mconfigure failed"   --libdir=/usr/$(mlibdir) \
269     "$@" || die "mconfigure failed"
270   else   else
271   echo "configure is not an executable ..."   echo "configure is not an executable ..."
272   exit 1   exit 1
273   fi   fi
274  }  }
275    
276  minstall() {  minstall()
277   if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then  {
278     if [ -f ./[mM]akefile -o -f ./GNUmakefile ]
279     then
280   make prefix=${BINDIR}/usr \   make prefix=${BINDIR}/usr \
281   datadir=${BINDIR}/usr/share \   datadir=${BINDIR}/usr/share \
282   infodir=${BINDIR}/usr/share/info \   infodir=${BINDIR}/usr/share/info \
283   localstatedir=${BINDIR}/var/lib \   localstatedir=${BINDIR}/var/lib \
284   mandir=${BINDIR}/usr/share/man \   mandir=${BINDIR}/usr/share/man \
285   sysconfdir=${BINDIR}/etc \   sysconfdir=${BINDIR}/etc \
286     libdir=${BINDIR}/usr/$(mlibdir) \
287   "$@" install || die "minstall failed"   "$@" install || die "minstall failed"
288          else          else
289                  die "no Makefile found"                  die "no Makefile found"
290          fi          fi
291  }  }
292    
293  mmake() {  mmake()
294    {
295   make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"   make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
296  }  }
297    
298  munpack() {  munpack()
299    {
300   local SRCFILE   local SRCFILE
301   local IFTAR   local IFTAR
302   local DEST   local DEST
303    
304   SRCFILE=$1   SRCFILE=$1
305    
306   if [ -z "$2" ]   if [ -z "$2" ]
307   then   then
308   DEST=${BUILDDIR}   DEST=${BUILDDIR}
309   else   else
310   DEST=$2   DEST=$2
311   fi   fi
312    
313   case "${SRCFILE##*.}" in   case "${SRCFILE##*.}" in
314   bz2)   bz2)
315   IFTAR="$(basename $SRCFILE .bz2)"   IFTAR="$(basename $SRCFILE .bz2)"
316   IFTAR="${IFTAR##*.}"   IFTAR="${IFTAR##*.}"
317   if [ "${IFTAR}" == "tar" ]   if [[ ${IFTAR} = tar ]]
318   then   then
319   tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}   tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
320   fi   fi
# Line 297  munpack() { Line 322  munpack() {
322   gz)   gz)
323   IFTAR="$(basename $SRCFILE .gz)"   IFTAR="$(basename $SRCFILE .gz)"
324   IFTAR="${IFTAR##*.}"   IFTAR="${IFTAR##*.}"
325   if [ "${IFTAR}" == "tar" ]   if [[ ${IFTAR} = tar ]]
326   then   then
327   tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}   tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
328   fi   fi
# Line 314  munpack() { Line 339  munpack() {
339   esac   esac
340  }  }
341    
342  mpatch() {  mpatch()
343    {
344   local PATCHOPTS   local PATCHOPTS
345   local PATCHFILE   local PATCHFILE
346    
347   PATCHOPTS=$1   PATCHOPTS=$1
348   PATCHFILE=$2   PATCHFILE=$2
349    
350     echo -e "${COLBLUE}*** ${COLGREEN}Applying patch '${PATCHFILE}'${COLDEFAULT}"
351   patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}   patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
352  }  }
353    
354    
355  minstalldocs() {  minstalldocs()
356    {
357   local docfiles   local docfiles
   
358   docfiles="$@"   docfiles="$@"
359    
360   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]   if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
361   then   then
362   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."   install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
363   fi   fi
364    
365   for i in ${docfiles}   for i in ${docfiles}
366   do   do
367   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."   cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
# Line 343  minstalldocs() { Line 370  minstalldocs() {
370   done   done
371  }  }
372    
373  mstriplibs() {  mstriplibs()
374    {
375   local stripdir="$@"   local stripdir="$@"
376    
377   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
378   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
379  }  }
380    
381  mstripbins() {  mstripbins()
382    {
383   local stripdir="$@"   local stripdir="$@"
384    
385   [ -z "${stripdir}" ] && stripdir=${BINDIR}   [ -z "${stripdir}" ] && stripdir=${BINDIR}
386   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
387  }  }
388    
389  sminclude() {  sminclude()
390    {
391   local i   local i
392    
393   if [[ -n "$@" ]]   if [[ -n "$@" ]]
# Line 371  sminclude() { Line 401  sminclude() {
401   fi   fi
402  }  }
403    
404  setup_distcc_environment(){  setup_distcc_environment()
405    {
406   if [ -x /usr/bin/distcc ]   if [ -x /usr/bin/distcc ]
407   then   then
408   echo "Using DistCC for compilation ..."   echo "Using DistCC for compilation ..."
409   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  
410    
411   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"   export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
412    
413     # 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  
414   install -o distcc -g daemon -d ${DISTCC_DIR}   install -o distcc -g daemon -d ${DISTCC_DIR}
415   chmod 1777 ${DISTCC_DIR}   chmod 1777 ${DISTCC_DIR}
416   fi   fi
417  }  }
418    
419  setup_ccache_environment(){  setup_ccache_environment()
420    {
421   if [ -x /usr/bin/ccache ]   if [ -x /usr/bin/ccache ]
422   then   then
423   echo "Using CCache for compilation ..."   echo "Using CCache for compilation ..."
424   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"
425   #unset CC CXX   fi
426    }
427    
428    
429    # fixes given dependencies to match a MAGE_TARGET
430    # fix_mage_deps -target s/depend # <-- note -target !
431    fix_mage_deps()
432    {
433     local target="$1"
434     local depend="$2"
435     local NDEPEND
436     local sym dep cat pver pname
437    
438     # deps and provides are special
439     # they must be fixed to match the target
440    
441     # run this only if target and depend is not empty
442     if [ -n "${target}" ] && [ -n "${depend}" ]
443     then
444     # fix DEPEND
445     while read sym dep
446     do
447     cat="$(dirname ${dep})"
448     # change if not virtual
449     if [[ ${cat} = virtual ]]
450     then
451     pname="$(basename ${dep})"
452     else
453     # fix pver to target-pver
454     # to get pname-target-pver
455    
456     # doing it backwards !
457     pver="${dep##*-}"
458     # full pver
459     pname="$(basename ${dep/-${pver}/})${target}-${pver}"
460     fi
461    
462     # do not add empty lines
463     if [ -z "${NDEPEND}" ]
464     then
465     NDEPEND="${sym} ${cat}/${pname}"
466     else
467     NDEPEND="${NDEPEND}
468     ${sym} ${cat}/${pname}"
469     fi
470    
471     unset cat pname pver
472     done << EOF
473    ${depend}
474    EOF
475     # set NDEPEND to DEPEND
476     depend="${NDEPEND}"
477     fi
478    
479     echo "${depend}"
480    }
481    
482    # build_mage_script(): helper functions for regen_mage_tree()
483    # generates an mage file with given information in smage file
484    # needs at least:
485    #   PNAME                 name of pkg
486    #   PVER                  version
487    #   PBUILD                revision
488    #   PCATEGORIE            categorie of the pkg
489    #   STATE                 state of pkg stable|unstable|old
490    #   DESCRIPTION           va short description (opt)
491    #   HOMEPAGE              homepage (opt)
492    #   DEPEND                runtime dependencies (opt)
493    #   SDEPEND               add. needed deps to build the pkg (opt)
494    #   PROVIDE               provides a virtual (opt)
495    #
496    # special tags:
497    #   PKGTYPE               type of pkg
498    #   INHERITS              which functions get included
499    #   SPECIAL_FUNCTIONS     special functions wich should also be added
500    #                         warning: they get killed before the build starts !
501    #
502    #   MAGE_TREE_DEST        target destination of the generated tree
503    #   REGEN_MAGE_TREE       set to 'true' to enable this
504    #
505    # gets called with build_mage_script target
506    build_mage_script()
507    {
508     local magefile
509     local dest
510     local target
511     local sym
512     local depname
513    
514     # if MAGE_TREE_DEST not set use BUILDDIR
515     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
516    
517     # determinate which suffix this mage file should get, if any
518     [ -n "$1" ] && target="-$1"
519    
520     # name of magefile
521     magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage"
522    
523     # destination to magefile
524     dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}"
525    
526     # show what we are doing
527     echo "Generating Mage file:"
528     echo "  ${dest}"
529    
530     install -d "$(dirname ${dest})"
531     # now build the mage file
532     > ${dest}
533    
534     # header
535     echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.44 2006-07-17 20:52:38 niro Exp $' >> ${dest}
536     echo  >> ${dest}
537    
538     # pgkname and state
539     echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest}
540     echo "STATE=\"${STATE}\"" >> ${dest}
541     echo >> ${dest}
542    
543     # description and homepage
544     echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest}
545     echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest}
546     echo >> ${dest}
547    
548     # special tags and vars
549     echo "PKGTYPE=\"${PKGTYPE}\""  >> ${dest}
550    
551     # echo MAGE_TARGETS ## note -target is needed !
552     echo "MAGE_TARGETS=\"${target}\"" >> ${dest}
553     echo >> ${dest}
554    
555     # add special vars
556     if [ -n "${SPECIAL_VARS}" ]
557     then
558     local i
559     for i in ${SPECIAL_VARS}
560     do
561     # being tricky here :)
562     echo "${i}=\"$(eval echo \$${i})\"" >> ${dest}
563     done
564     echo  >> ${dest}
565     fi
566    
567     # add at least all includes
568     if [ -n "${INHERITS}" ]
569     then
570     echo -n "minclude"  >> ${dest}
571     local i
572     for i in ${INHERITS}
573     do
574     echo -n " ${i}"  >> ${dest}
575     done
576     echo  >> ${dest}
577     fi
578     echo >> ${dest}
579    
580     # deps and provides
581     echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest}
582     echo >> ${dest}
583     echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest}
584     echo >> ${dest}
585     echo "PROVIDE=\"${PROVIDE}\"" >> ${dest}
586     echo >> ${dest}
587    
588     # add special functions
589     if [ -n "${SPECIAL_FUNCTIONS}" ]
590     then
591     local i
592     for i in ${SPECIAL_FUNCTIONS}
593     do
594     # add to mage (quotes needed !)
595     typeset -f "${i}" >> ${dest}
596     echo >> ${dest}
597     # unset to be safe (quotes needed !)
598     #unset "${i}" <-- later to get every target built
599     done
600     echo  >> ${dest}
601     fi
602    
603     # pre|post-install|removes
604     typeset -f preinstall >> ${dest}
605     echo  >> ${dest}
606     typeset -f postinstall >> ${dest}
607     echo  >> ${dest}
608     typeset -f preremove >> ${dest}
609     echo  >> ${dest}
610     typeset -f postremove >> ${dest}
611     echo  >> ${dest}
612    }
613    
614    regen_mage_tree()
615    {
616     local i
617    
618     # build them only if requested
619     if [[ ${REGEN_MAGE_TREE} = true ]]
620     then
621     # run it without targets
622     if [ -z "${MAGE_TARGETS}" ]
623     then
624     echo
625     build_mage_script
626     echo
627     else
628    
629     # build for each target an mage file
630     # run it with several targets
631     for i in ${MAGE_TARGETS}
632     do
633     echo
634     build_mage_script "${i}"
635     echo
636     done
637     fi
638     fi
639    
640     # now unset all uneeded vars to be safe
641     # unset PKGNAME <-- don't do that; smage needs this var
642     # unset to be safe (quotes needed !)
643     for i in ${SPECIAL_FUNCTIONS}
644     do
645     unset "${i}"
646     done
647     unset SPECIAL_FUNCTIONS
648     for i in ${SPECIAL_VARS}
649     do
650     unset "${i}"
651     done
652     unset SPECIAL_VARS
653     unset STATE
654     unset DESCRIPTION
655     unset HOMEPAGE
656     unset PKGTYPE
657     unset INHERITS
658     unset DEPEND
659     unset SDEPEND
660     unset PROVIDE
661     unset preinstall
662     unset postinstall
663     unset preremove
664     unset postremove
665    }
666    
667    export_inherits()
668    {
669     local include="$1"
670     shift
671    
672     while [ "$1" ]
673     do
674     local functions="$1"
675    
676     # sanity checks
677     [ -z "${include}" ] && die "export_inherits(): \$include not given."
678     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
679    
680     eval "${functions}() { ${include}_${functions} ; }"
681    
682     # debug
683     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
684    
685     shift
686     done
687    }
688    
689    generate_package_md5sum()
690    {
691     local dest
692     local pcat
693     local pname
694     local pver
695     local pbuild
696     local parch
697     local target
698     local pkgname
699    
700     # very basic getops
701     for i in $*
702     do
703     case $1 in
704     --pcat|-c) shift; pcat="$1" ;;
705     --pname|-n) shift; pname="$1" ;;
706     --pver|-v) shift; pver="$1" ;;
707     --pbuild|-b) shift; pbuild="$1" ;;
708     --parch|a) shift; parch="$1" ;;
709     --target|t) shift; target="$1" ;;
710     esac
711     shift
712     done
713    
714     # sanity checks; abort if not given
715     [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given."
716     [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given."
717     [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given."
718     [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given."
719     [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given."
720    
721     # check needed global vars
722     [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set."
723     [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set."
724    
725     # fix target as it may be empty !
726     [ -n "${target}" ] && target="-${target}"
727    
728     # build pkgname
729     pkgname="${pname}${target}-${pver}-${parch}-${pbuild}"
730    
731     # build pkg-md5-sum only if requested
732     if [[ ${REGEN_MAGE_TREE} = true ]]
733     then
734     echo -n "Generating a md5sum for ${pkgname}.${PKGSUFFIX} ... "
735    
736     # abort if not exist
737     if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ]
738     then
739     echo "! exists"
740     return 0
741     fi
742    
743     # if MAGE_TREE_DEST not set use BUILDDIR
744     : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree}
745    
746     # setup md5 dir
747     dest="${MAGE_TREE_DEST}/${pcat}/${pname}/md5"
748     install -d ${dest}
749    
750     # gen md5sum
751     ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \
752     > ${dest}/${pkgname}.md5
753     echo "done"
754   fi   fi
755  }  }
756    
# Line 422  then Line 765  then
765   exit 1   exit 1
766  fi  fi
767    
768  #updating smage2-scripts  # updating smage2-scripts
769  if [ "$1" == "update" ]  if [[ $1 = update ]]
770  then  then
771   if [ ! -d ${SOURCEDIR} ]   if [ ! -d ${SOURCEDIR} ]
772   then   then
# Line 433  then Line 776  then
776   exit 0   exit 0
777  fi  fi
778    
779  #creates md5sums for smages to given dir  # creates md5sums for smages to given dir
780  if [ "$1" == "calcmd5" ]  if [[ $1 = calcmd5 ]]
781  then  then
782   if [ $# -ge 3 ]   if [ $# -ge 3 ]
783   then   then
# Line 486  then Line 829  then
829   unset my_SRC_URI_MIRROR   unset my_SRC_URI_MIRROR
830   unset my_SOURCEDIR   unset my_SOURCEDIR
831   done   done
832    
833   echo   echo
834   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."   echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
835   echo   echo
# Line 499  then Line 842  then
842   echo   echo
843   exit 1   exit 1
844   fi   fi
845    
846   exit 0   exit 0
847  fi  fi
848    
849  #download sources  # download sources
850  if [ "$1" == "download" -a -n "$2" ]  if [ "$1" == "download" -a -n "$2" ]
851  then  then
852   if [ ! -d ${SMAGESCRIPTSDIR} ]   if [ ! -d ${SMAGESCRIPTSDIR} ]
# Line 520  then Line 863  then
863   exit 0   exit 0
864  fi  fi
865    
866  if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]  # regen-mage-tree
867  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}" ]  
868  then  then
869   die "no BINDIR variable found in /etc/mage.rc"   # set correct SMAGENAME
870  fi   SMAGENAME="$2"
871     MD5DIR="$(dirname ${SMAGENAME})/md5"
872     source ${SMAGENAME} || die "regen: smage2 not found"
873    
874  if [ -z "${CHOST}" ]   regen_mage_tree
 then  
  die "no CHOST variable found in /etc/mage.rc"  
 fi  
875    
876  if [ -z "${CFLAGS}" ]   # build md5sum for existing packages
877  then   generate_package_md5sum \
878   die "no CFLAGS variable found in /etc/mage.rc"   --pcat "${PCATEGORIE}" \
879  fi   --pname "${PNAME}" \
880     --pver "${PVER}" \
881     --pbuild "${PBUILD}" \
882     --parch "${ARCH}" \
883     --target "${target}"
884    
885  if [ -z "${CXXFLAGS}" ]   exit 0
 then  
  die "no CXXFLAGS variable found in /etc/mage.rc"  
886  fi  fi
887    
888    [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
889    [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] &&
890     die "File '$(basename ${SMAGENAME})' is not a sMage v${SMAGEVERSION} file. Aborting."
891    [ -z "${SOURCEDIR}" ] && die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
892    [ -z "${SMAGESCRIPTSDIR}" ] && die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
893    [ -z "${SMAGE2RSYNC}" ] && die "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
894    [ -z "${BINDIR}" ] && die "no BINDIR variable found in /etc/mage.rc"
895    [ -z "${CHOST}" ] && die "no CHOST variable found in /etc/mage.rc"
896    [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in /etc/mage.rc"
897    [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in /etc/mage.rc"
898    
899  source ${SMAGENAME} || die "source failed"  source ${SMAGENAME} || die "source failed"
900  PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"  PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}"
901  MD5DIR="$(dirname ${SMAGENAME})/md5"  MD5DIR="$(dirname ${SMAGENAME})/md5"
902    
903  xtitle "Compiling ${PKGNAME}"  xtitle "Compiling ${PKGNAME}"
904  echo "Compiling ${PKGNAME}"  echo "Compiling ${PKGNAME}"
905    
906  #download sources  # auto regen mage tree if requested
907    regen_mage_tree
908    
909    # download sources
910  download_sources  download_sources
911    
912  #fixes some issues with these functions  # fixes some issues with these functions
913  export -f src_prepare || die "src_prepare export failed"  export -f src_prepare || die "src_prepare export failed"
914  export -f src_compile || die "src_compile export failed"  export -f src_compile || die "src_compile export failed"
915  export -f src_install || die "src_install export failed"  export -f src_install || die "src_install export failed"
916    
917  #fixes some compile issues  # fixes some compile issues
918  export CHOST="${CHOST}" || die "CHOST export failed"  export CHOST="${CHOST}" || die "CHOST export failed"
919  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"  export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
920  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"  export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
# Line 590  export BINDIR="${BINDIR}" || die "BINDIR Line 922  export BINDIR="${BINDIR}" || die "BINDIR
922  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"  export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
923    
924    
925  #setup distcc  # setup distcc
926  #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
927  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  
928    
929    # setup ccache
930    [[ ${SMAGE_USE_CCACHE} = true ]] && setup_ccache_environment
931    
932  # small sleep to show our settings  # small sleep to show our settings
933  sleep 1  sleep 1
934    
935  #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  
936  if [ -d ${BUILDDIR} ]  if [ -d ${BUILDDIR} ]
937  then  then
938   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."   rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
939  fi  fi
940  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."  install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
941    
942  #cleans up srcdir if a previously unpacked one exists  # cleans up srcdir if a previously unpacked one exists
943  if [ -d ${SRCDIR} ]  if [ -d ${SRCDIR} ]
944  then  then
945   rm -rf ${SRCDIR}   rm -rf ${SRCDIR}
946  fi  fi
947    
948  #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
949  if [ -d ${BINDIR} ]  if [ -d ${BINDIR} ]
950  then  then
951   rm -rf ${BINDIR}   rm -rf ${BINDIR}
952  fi  fi
953  install -d ${BINDIR} || die "couldn't create \$BINDIR."  install -d ${BINDIR} || die "couldn't create \$BINDIR."
954    
955  #cleans up package temp dir if a previous build exists  # cleans up package temp dir if a previous build exists
956  if [ -d ${BUILDDIR}/${PKGNAME} ]  if [ -d ${BUILDDIR}/${PKGNAME} ]
957  then  then
958   rm -rf ${BUILDDIR}/${PKGNAME}   rm -rf ${BUILDDIR}/${PKGNAME}
959  fi  fi
960    
961  #cleans up timestamp if one exists  # cleans up timestamp if one exists
962  if [ -f /var/tmp/timestamp ]  if [ -f /var/tmp/timestamp ]
963  then  then
964   mage rmstamp   mage rmstamp
# Line 655  src_compile || die "src_compile failed" Line 969  src_compile || die "src_compile failed"
969  src_install || die "src_install failed"  src_install || die "src_install failed"
970    
971    
972  #compressing doc, info & man files  # compressing doc, info & man files
973  echo -e "Compressing man-pages ..."  echo -e "Compressing man-pages ..."
974  if [ -d ${BUILDDIR}/builded/usr/share/man ]  if [ -d ${BUILDDIR}/builded/usr/share/man ]
975  then  then
# Line 681  case ${NOSTRIP} in Line 995  case ${NOSTRIP} in
995   ;;   ;;
996  esac  esac
997    
998  #the new buildpkg command  # the new buildpkg command
999  case ${NOPKGBUILD} in  case ${NOPKGBUILD} in
1000   true|TRUE|yes|y)   true|TRUE|yes|y)
1001   echo -e "NOPGKBUILD=true detected; Package will not be build ..."   echo -e "NOPGKBUILD=true detected; Package will not be build ..."
1002   ;;   ;;
1003   *)   *)
1004   ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"   # build several targets
1005   echo -e "\nPackage ${PKGNAME} successfully builded.\n"   if [ -n "${MAGE_TARGETS}" ]
1006     then
1007     for target in ${MAGE_TARGETS}
1008     do
1009     # check if an special target_pkgbuild exists
1010     if typeset -f ${target}_pkgbuild > /dev/null
1011     then
1012     # run it
1013     ${target}_pkgbuild
1014     fi
1015     # now create the target package
1016     ${MLIBDIR}/pkgbuild_dir.sh \
1017     "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \
1018     ${BINDIR} || die "target: ${target} package-build failed"
1019    
1020     # build pkg-md5-sum if requested
1021     generate_package_md5sum \
1022     --pcat "${PCATEGORIE}" \
1023     --pname "${PNAME}" \
1024     --pver "${PVER}" \
1025     --pbuild "${PBUILD}" \
1026     --parch "${ARCH}" \
1027     --target "${target}"
1028    
1029     echo -e "\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n"
1030     done
1031     else
1032     ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "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    
1042     echo -e "\nPackage ${PKGNAME} successfully builded.\n"
1043     fi
1044   ;;   ;;
1045  esac  esac
1046    
1047  #for sure  # for sure
1048  unset NOPKGBUILD  unset NOPKGBUILD
1049  unset NOSTRIP  unset NOSTRIP
1050    
1051  xtitleclean  xtitleclean
 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"  

Legend:
Removed from v.186  
changed lines
  Added in v.386