Magellan Linux

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

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

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

Legend:
Removed from v.57  
changed lines
  Added in v.347