Magellan Linux

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

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

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

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