Magellan Linux

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

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

revision 24 by niro, Wed Jan 5 05:08:01 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-r8  # $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-r8  
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
125    get_db_md5_sum()
126    {
127     local DB_FILE
128     local MD5_FILE
129     local i
130    
131     DB_ENTRY="$(basename $1)"
132     MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} ${SMAGESUFFIX})"
133    
134     i="$(cat ${MD5_FILE}| grep ${DB_ENTRY} | cut -d' ' -f1)"
135    
136     echo "${i}"
137    }
138    
139    download_sources()
140    {
141    
142     [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0
143    
144     local EOA=${#SRC_URI[*]}
145     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"
150     local FETCHING
151     local i mirror
152    
153    
154     # install SRCDIR/PNAME if not exist
155     [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME}
156    
157     # check if FETCHING is needed
158     ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null )
159     if [[ $? = 0 ]]
160     then
161     # md5's ok, not fetching needed
162     FETCHING=false
163     else
164     FETCHING=true
165     fi
166    
167     for ((i=0; i < EOA; i++))
168     do
169     # 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
184     if [ -n "$(echo ${my_SRC_URI} | grep 'mirror://')" ]
185     then
186     for mirror in ${MIRRORS}
187     do
188     my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|mirror:/|${mirror}/sources|g")"
189    
190     if [[ ${FETCHING} = true ]]
191     then
192     echo "==> fetching ${my_SRC_URI_MIRROR}"
193     wget \
194     --passive-ftp \
195     --tries 3 \
196     --continue \
197     --progress bar \
198     --directory-prefix="${my_SOURCEDIR}" \
199     "${my_SRC_URI_MIRROR}"
200     if [[ $? = 0 ]]
201     then
202     break
203     else
204     continue
205     fi
206     fi
207     done
208     else
209     if [[ ${FETCHING} = true ]]
210     then
211     echo "==> fetching ${my_SRC_URI}"
212     wget \
213     --passive-ftp \
214     --tries 3 \
215     --continue \
216     --progress bar \
217     --directory-prefix="${my_SOURCEDIR}" \
218     "${my_SRC_URI}"
219     fi
220     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
228    
229     # recheck md5 sums
230     echo
231     echo ">== Checking MD5 sums:"
232     ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} ) || die "md5 failed"
233     echo
234    
235     # not needed anymore
236     unset SRC_URI
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 172  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 189  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 200  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 218  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    
771    # print out our version
772    showversion
773    echo
774    
775  if [ -z "$1" ]  if [ -z "$1" ]
776  then  then
  showversion  
  echo  
777   echo "No .smage2 file given. Exiting."   echo "No .smage2 file given. Exiting."
778   echo   echo
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   showversion   if [ ! -d ${SOURCEDIR} ]
  if [ ! -d ${SMAGESCRIPTSDIR} ]  
786   then   then
787   install -d ${SMAGESCRIPTSDIR}   install -d ${SOURCEDIR}
788   fi   fi
789   syncsmage2   syncsmage2
790   exit 0   exit 0
791  fi  fi
792    
793    # creates md5sums for smages to given dir
794  if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]  if [[ $1 = calcmd5 ]]
795  then  then
796   die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."   if [ $# -ge 3 ]
797  fi   then
798     SMAGENAME="$2"
799     MD5DIR="$3"
800     source ${SMAGENAME} || die "download source failed"
801    
802  if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]   # overridable sourcedir; must be declared after source of the smage2
803  then   CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}"
  die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."  
 fi  
804    
805  if [ -z "${SOURCEDIR}" ]   [ -z "${SRC_URI}" ] && die "Nothing declared to calculate."
 then  
  die "\$SOURCEDIR not found. Please setup your mage.rc correctly."  
 fi  
806    
807  if [ -z "${SMAGESCRIPTSDIR}" ]   # end of array
808  then   EOA=${#SRC_URI[*]}
  die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."  
 fi  
809    
810  if [ -z "${SMAGE2RSYNC}" ]   [ ! -d ${MD5DIR} ] && install -d ${MD5DIR}
 then  
  echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."  
  exit 1  
 fi  
811    
812  if [ -z "${BINDIR}" ]   # clear md5sum file
813  then   MY_MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5"
814   die "no BINDIR variable found in /etc/mage.rc"   echo -n > ${MY_MD5_FILE}
 fi  
815    
816  if [ -z "${CHOST}" ]   for ((i=0; i < EOA; i++))
817  then   do
818   die "no CHOST variable found in /etc/mage.rc"   # 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}" ]
833     then
834     echo "calculating $(basename ${MY_SRC_FILE}) ..."
835     ( cd ${CALC_SOURCEDIR}; md5sum "${MY_SRC_FILE}" ) >> ${MY_MD5_FILE}
836     else
837     echo "WARNING: File '$(basename ${MY_SRC_FILE}) not found in ${CALC_SOURCEDIR}."
838     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
846    
847     echo
848     echo "Calculating of md5 sums for '$(basename ${SMAGENAME} .${SMAGESUFFIX})' done."
849     echo
850     else
851     echo "Usage: Calculating MD5 Sums:"
852     echo "    $(basename $0) calcmd5 /path/to/SMAGENAME /path/to/MD5DIR"
853     echo
854     echo
855     echo "Export the CALC_SOURCEDIR variable to override current SOURCEDIRs."
856     echo
857     exit 1
858     fi
859    
860     exit 0
861  fi  fi
862    
863  if [ -z "${CFLAGS}" ]  # download sources
864    if [ "$1" == "download" -a -n "$2" ]
865  then  then
866   die "no CFLAGS variable found in /etc/mage.rc"   if [ ! -d ${SMAGESCRIPTSDIR} ]
867     then
868     install -d ${SMAGESCRIPTSDIR}
869     fi
870    
871     # get smage
872     SMAGENAME="$2"
873     MD5DIR="$(dirname ${SMAGENAME})/md5"
874     source ${SMAGENAME} || die "download source failed"
875    
876     download_sources
877     exit 0
878  fi  fi
879    
880  if [ -z "${CXXFLAGS}" ]  # regen-mage-tree
881    if [ "$1" == "only-regen-tree" -a -n "$2" ]
882  then  then
883   die "no CXXFLAGS variable found in /etc/mage.rc"   # set correct SMAGENAME
884     SMAGENAME="$2"
885     MD5DIR="$(dirname ${SMAGENAME})/md5"
886     source ${SMAGENAME} || die "regen: smage2 not found"
887    
888     regen_mage_tree
889    
890     # build md5sum for existing packages
891     generate_package_md5sum \
892     --pcat "${PCATEGORIE}" \
893     --pname "${PNAME}" \
894     --pver "${PVER}" \
895     --pbuild "${PBUILD}" \
896     --parch "${ARCH}" \
897     --target "${target}"
898    
899     exit 0
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"
916    
917  xtitle "Compiling ${PKGNAME}"  xtitle "Compiling ${PKGNAME}"
918  #fixes some issues with these functions  echo "Compiling ${PKGNAME}"
919    
920    # auto regen mage tree if requested
921    regen_mage_tree
922    
923    # download sources
924    download_sources
925    
926    # 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 344  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 409  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 422  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.24  
changed lines
  Added in v.351