Magellan Linux

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

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

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

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