--- trunk/mage/usr/lib/mage/smage2.sh 2007/03/19 19:21:40 441 +++ trunk/mage/usr/lib/mage/smage2.sh 2011/06/04 09:20:09 1346 @@ -4,7 +4,7 @@ # needs pkgbuild_dir (mage) # SMAGE2 -# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.54 2007-03-19 19:21:40 niro Exp $ +# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.62 2007-11-28 10:47:50 niro Exp $ #01.10.2004 # added ccache support @@ -50,6 +50,7 @@ source /etc/mage.rc.global source ${MAGERC} +source ${MLIBDIR}/mage4.functions.sh # set PKGDIR and BUILDDIR and BINDIR to MROOT if [[ -n ${MROOT} ]] @@ -59,6 +60,26 @@ export BINDIR=${MROOT}/${BINDIR} fi +# sources the smage file and uses state from distribution file if exist +# may helpful for repository support later on +smagesource() +{ + local file="$1" + local mystate + local mycodename + + source ${file} + + [[ -n ${STATE} ]] && mystate="${STATE}" + if [ -f ${SMAGESCRIPTSDIR}/distribution ] + then + source ${SMAGESCRIPTSDIR}/distribution + [[ -n ${STATE} ]] && mystate="${STATE}" + fi + # now switch state and export it + STATE="${mystate}" +} + showversion() { echo -en "Magellan Source Install v${SMAGEVERSION} " @@ -73,6 +94,19 @@ exit 1 } +die_pipestatus() +{ + # the status change if we do any parameter declarations!! + # dont do this anymore, keep this in mind! + # + # local pos="$1" + # local comment="$2" + # + # [ ${PIPESTATUS[${pos}]} -ne 0 ] && die "${comment}" + # + [ ${PIPESTATUS[$1]} -ne 0 ] && die "$2" +} + xtitle() { if [[ ${TERM} = xterm ]] @@ -140,13 +174,16 @@ local DB_MD5_SUM_FILE="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5" local FETCHING local i mirror + local wget_opts + # filter wget command if busybox was found + wget_opts="$(busybox_filter_wget_options ${WGET_FETCH_OPTIONS})" # install SRCDIR/PNAME if not exist [ ! -d ${SOURCEDIR}/${PNAME} ] && install -d ${SOURCEDIR}/${PNAME} # check if FETCHING is needed - ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} &> /dev/null ) + ( cd ${SOURCEDIR}/${PNAME}; md5sum -c ${DB_MD5_SUM_FILE} &> /dev/null ) if [[ $? = 0 ]] then # md5's ok, no fetching needed @@ -171,6 +208,9 @@ my_SOURCEDIR="${SOURCEDIR}/${PNAME}" fi + # create the SOURCEDIR + install -d ${my_SOURCEDIR} + # if an mirrored file than replace first the mirror uri if [[ -n $(echo ${my_SRC_URI} | grep 'mirror://') ]] then @@ -182,11 +222,8 @@ then echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}" wget \ - --passive-ftp \ - --tries 3 \ - --continue \ - --progress bar \ - --directory-prefix="${my_SOURCEDIR}" \ + ${wget_opts} \ + --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \ "${my_SRC_URI_MIRROR}" if [[ $? = 0 ]] then @@ -206,11 +243,8 @@ then echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}" wget \ - --passive-ftp \ - --tries 3 \ - --continue \ - --progress bar \ - --directory-prefix="${my_SOURCEDIR}" \ + ${wget_opts} \ + --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \ "${my_SRC_URI_MIRROR}" if [[ $? = 0 ]] then @@ -230,11 +264,50 @@ then echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}" wget \ - --passive-ftp \ - --tries 3 \ - --continue \ - --progress bar \ - --directory-prefix="${my_SOURCEDIR}" \ + ${wget_opts} \ + --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \ + "${my_SRC_URI_MIRROR}" + if [[ $? = 0 ]] + then + break + else + continue + fi + fi + done + elif [[ -n $(echo ${my_SRC_URI} | grep 'kde://') ]] + then + for mirror in ${KDE_MIRRORS} + do + my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|kde:/|${mirror}|g")" + + if [[ ${FETCHING} = true ]] + then + echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}" + wget \ + ${wget_opts} \ + --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \ + "${my_SRC_URI_MIRROR}" + if [[ $? = 0 ]] + then + break + else + continue + fi + fi + done + elif [[ -n $(echo ${my_SRC_URI} | grep 'gnome://') ]] + then + for mirror in ${GNOME_MIRRORS} + do + my_SRC_URI_MIRROR="$(echo ${my_SRC_URI} | sed "s|gnome:/|${mirror}|g")" + + if [[ ${FETCHING} = true ]] + then + echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI_MIRROR}${COLDEFAULT}" + wget \ + ${wget_opts} \ + --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI_MIRROR})" \ "${my_SRC_URI_MIRROR}" if [[ $? = 0 ]] then @@ -249,11 +322,8 @@ then echo -e "${COLBLUE}==>${COLGREEN} fetching ${my_SRC_URI}${COLDEFAULT}" wget \ - --passive-ftp \ - --tries 3 \ - --continue \ - --progress bar \ - --directory-prefix="${my_SOURCEDIR}" \ + ${wget_opts} \ + --output-document="${my_SOURCEDIR}/$(basename ${my_SRC_URI})" \ "${my_SRC_URI}" fi fi @@ -268,7 +338,7 @@ # recheck md5 sums echo echo -e "${COLBLUE}===${COLGREEN} Checking MD5 sums:${COLDEFAULT}" - ( cd ${SOURCEDIR}/${PNAME}; md5sum --check ${DB_MD5_SUM_FILE} ) || die "md5 failed" + ( cd ${SOURCEDIR}/${PNAME}; md5sum -c ${DB_MD5_SUM_FILE} ) || die "md5 failed" echo # not needed anymore @@ -314,6 +384,7 @@ ./configure \ --prefix=/usr \ --host=${CHOST} \ + --build=${CHOST} \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ --datadir=/usr/share \ @@ -357,7 +428,7 @@ SRCFILE=$1 - if [ -z "$2" ] + if [[ -z $2 ]] then DEST=${BUILDDIR} else @@ -372,7 +443,11 @@ IFTAR="${IFTAR##*.}" if [[ ${IFTAR} = tar ]] then - tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} + tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.bz2 unpack failed." + else + pushd ${DEST} > /dev/null + bzcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .bz2) || die ".bz2 unpack failed." + popd > /dev/null fi ;; gz) @@ -380,14 +455,33 @@ IFTAR="${IFTAR##*.}" if [[ ${IFTAR} = tar ]] then - tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} + tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.gz unpack failed." + else + pushd ${DEST} > /dev/null + zcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .gz) || die ".gz unpack failed." + popd > /dev/null fi ;; - tbz2) - tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} + tbz2|mpks|mpk) + tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tbz2 unpack failed." ;; tgz) - tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} + tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tgz unpack failed." + ;; + rar) + unrar x ${SOURCEDIR}/${PNAME}/${SRCFILE} ${DEST} || die ".rar unpack failed." + ;; + zip|xpi) + unzip ${SOURCEDIR}/${PNAME}/${SRCFILE} -d ${DEST} || die ".zip unpack failed." + ;; + rpm) + pushd ${DEST} > /dev/null + rpm2targz ${SOURCEDIR}/${PNAME}/${SRCFILE} || die "rpm2targz: .rpm unpack failed." + tar --no-same-owner -xvzf ${SRCFILE/.rpm/.tar.gz} || die "tar: .rpm unpack failed." + if [[ -f ${DEST}/${SRCFILE/.rpm/.tar.gz} ]] + then + rm ${DEST}/${SRCFILE/.rpm/.tar.gz} + fi ;; *) die "munpack failed" @@ -399,14 +493,46 @@ { local PATCHOPTS local PATCHFILE + local i PATCHOPTS=$1 PATCHFILE=$2 + if [[ -z $2 ]] + then + PATCHFILE=$1 + + ## patch level auto-detection, get patch level + for ((i=0; i < 10; i++)) + do + patch --dry-run -Np${i} -i ${SOURCEDIR}/${PNAME}/${PATCHFILE} > /dev/null + if [[ $? = 0 ]] + then + PATCHOPTS="-Np${i}" + break + fi + done + fi + echo -e "${COLBLUE}*** ${COLGREEN}Applying patch '${PATCHFILE}'${COLDEFAULT}" patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE} } +mlibtoolize() +{ + local opts="$@" + [[ -z ${opts} ]] && opts="--copy --force" + + libtoolize ${opts} || die "running: mlibtoolize ${opts}" +} + +mautoreconf() +{ + local opts="$@" + [[ -z ${opts} ]] && opts="--verbose --install --force" + + autoreconf ${opts} || die "running: mautoreconf ${opts}" +} minstalldocs() { @@ -418,11 +544,15 @@ install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs." fi + local i for i in ${docfiles} do - cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs." - install -m 0644 ${SRCDIR}/${i}.gz \ - ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs." + if [ -f ${i} ] + then + cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs." + install -m 0644 ${SRCDIR}/${i}.gz \ + ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs." + fi done } @@ -442,6 +572,23 @@ find ${stripdir} | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null } +mcompressdocs() +{ + local bindir="$@" + + if [ -d ${bindir}/usr/share/man ] + then + echo -e "${COLBLUE}===${COLGREEN} compressing man-pages ...${COLDEFAULT}" + ${MLIBDIR}/compressdoc -g -9 ${bindir}/usr/share/man + fi + + if [ -d ${bindir}/usr/share/info ] + then + echo -e "${COLBLUE}===${COLGREEN} compressing info-pages ...${COLDEFAULT}" + ${MLIBDIR}/compressdoc -g -9 ${bindir}/usr/share/info + fi +} + sminclude() { local i @@ -555,8 +702,11 @@ # special tags: # PKGTYPE type of pkg # INHERITS which functions get included -# SPECIAL_FUNCTIONS special functions wich should also be added +# SPECIAL_FUNCTIONS special functions which should also be added # warning: they get killed before the build starts ! +# SPLIT_PACKAGES names of all subpackages which are splitted from parent +# SPLIT_PACKAGE_BASE base package name for splitpackages +# (only in the resulting magefile} # # MAGE_TREE_DEST target destination of the generated tree # REGEN_MAGE_TREE set to 'true' to enable this @@ -567,6 +717,7 @@ local magefile local dest local target + local split_pkg_base local sym local depname @@ -574,7 +725,10 @@ : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree} # determinate which suffix this mage file should get, if any - [ -n "$1" ] && target="-$1" + [[ $1 = --target ]] && shift && target="-$1" + + # mark package as splitpackage + [[ $1 = --split-pkg-base ]] && shift && split_pkg_base="$1" # name of magefile magefile="${PNAME}${target}-${PVER}-${PBUILD}.mage" @@ -591,7 +745,7 @@ > ${dest} # header - echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.54 2007-03-19 19:21:40 niro Exp $' >> ${dest} + echo '# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/smage2.sh,v 1.62 2007-11-28 10:47:50 niro Exp $' >> ${dest} echo >> ${dest} # pgkname and state @@ -611,6 +765,10 @@ echo "MAGE_TARGETS=\"${target}\"" >> ${dest} echo >> ${dest} + # split package base + echo "SPLIT_PACKAGE_BASE=\"${split_pkg_base}\"" >> ${dest} + echo >> ${dest} + # add special vars if [ -n "${SPECIAL_VARS}" ] then @@ -678,36 +836,58 @@ if [[ ${REGEN_MAGE_TREE} = true ]] then # run it without targets - if [ -z "${MAGE_TARGETS}" ] + if [[ -n ${MAGE_TARGETS} ]] then + # build for each target a mage file + # run it with several targets echo - build_mage_script + for i in ${MAGE_TARGETS} + do + build_mage_script --target "${i}" + done echo - else - # build for each target an mage file + # run it for splitpackages + elif [[ -n ${SPLIT_PACKAGES} ]] + then + local split_pkg_base="${PNAME}" + # save smage environment + split_save_variables + # build for each subpackage a mage file # run it with several targets - for i in ${MAGE_TARGETS} + echo + for i in ${SPLIT_PACKAGES} do - echo - build_mage_script "${i}" - echo + # get the right variables for the split + export PNAME="${i}" + split_info_${i} + build_mage_script --split-pkg-base "${split_pkg_base}" + # restore smage environment + split_restore_variables done + echo + # unset all saved smage variables + split_unset_variables + + else + echo + build_mage_script + echo fi fi # now unset all uneeded vars to be safe # unset PKGNAME <-- don't do that; smage needs this var # unset to be safe (quotes needed !) - for i in ${SPECIAL_FUNCTIONS} - do - unset "${i}" - done +# for i in ${SPECIAL_FUNCTIONS} +# do +# unset "${i}" +# done unset SPECIAL_FUNCTIONS - for i in ${SPECIAL_VARS} - do - unset "${i}" - done +# for i in ${SPECIAL_VARS} +# do +# unset "${i}" +# done unset SPECIAL_VARS unset STATE unset DESCRIPTION @@ -723,6 +903,150 @@ unset postremove } +split_save_variables() +{ + export SAVED_PNAME="${PNAME}" + export SAVED_PVER="${PVER}" + export SAVED_PBUILD="${PBUILD}" + export SAVED_PCATEGORIE="${PCATEGORIE}" + export SAVED_DESCRIPTION="${DESCRIPTION}" + export SAVED_HOMEPAGE="${HOMEPAGE}" + export SAVED_SPECIAL_VARS="${SPECIAL_VARS}" + export SAVED_STATE="${STATE}" + export SAVED_PKGTYPE="${PKGTYPE}" + export SAVED_INHERITS="${INHERITS}" + export SAVED_DEPEND="${DEPEND}" + export SAVED_SDEPEND="${SDEPEND}" + export SAVED_PROVIDE="${PROVIDE}" + export SAVED_NOPKGBUILD="${NOPKGBUILD}" + + # bindir too + export SAVED_BINDIR="${BINDIR}" + + # export the SPLIT_PACKAGE_BASE + export SPLIT_PACKAGE_BASE="${SAVED_PNAME}" + + # functions + if [[ ! -z $(typeset -f preinstall) ]] + then + # rename the old one + local saved_preinstall + saved_preinstall=SAVED_$(typeset -f preinstall) + eval "${saved_preinstall}" + export -f SAVED_preinstall + fi + + if [[ ! -z $(typeset -f postinstall) ]] + then + # rename the old one + local saved_postinstall + saved_postinstall=SAVED_$(typeset -f postinstall) + eval "${saved_postinstall}" + export -f SAVED_postinstall + fi + + if [[ ! -z $(typeset -f preremove) ]] + then + # rename the old one + local saved_preremove + saved_preremove=SAVED_$(typeset -f preremove) + eval "${saved_preremove}" + export -f SAVED_preremove + fi + + if [[ ! -z $(typeset -f postremove) ]] + then + # rename the old one + local saved_postremove + saved_postremove=SAVED_$(typeset -f postremove) + eval "${saved_postremove}" + export -f SAVED_postremove + fi +} + +split_restore_variables() +{ + export PNAME="${SAVED_PNAME}" + export PVER="${SAVED_PVER}" + export PBUILD="${SAVED_PBUILD}" + export PCATEGORIE="${SAVED_PCATEGORIE}" + export DESCRIPTION="${SAVED_DESCRIPTION}" + export HOMEPAGE="${SAVED_HOMEPAGE}" + export SPECIAL_VARS="${SAVED_SPECIAL_VARS}" + export STATE="${SAVED_STATE}" + export PKGTYPE="${SAVED_PKGTYPE}" + export INHERITS="${SAVED_INHERITS}" + export DEPEND="${SAVED_DEPEND}" + export SDEPEND="${SAVED_SDEPEND}" + export PROVIDE="${SAVED_PROVIDE}" + export NOPKGBUILD="${SAVED_NOPKGBUILD}" + + # bindir too + export BINDIR="${SAVED_BINDIR}" + + # functions + if [[ ! -z $(typeset -f SAVED_preinstall) ]] + then + # rename the old one + local saved_preinstall + saved_preinstall=$(typeset -f SAVED_preinstall) + eval "${saved_preinstall/SAVED_/}" + export -f preinstall + fi + + if [[ ! -z $(typeset -f SAVED_postinstall) ]] + then + # rename the old one + local saved_postinstall + saved_postinstall=$(typeset -f SAVED_postinstall) + eval "${saved_postinstall/SAVED_/}" + export -f postinstall + fi + + if [[ ! -z $(typeset -f SAVED_preremove) ]] + then + # rename the old one + local saved_preremove + saved_preremove=$(typeset -f SAVED_preremove) + eval "${saved_preremove/SAVED_/}" + export -f preremove + fi + + if [[ ! -z $(typeset -f SAVED_postremove) ]] + then + # rename the old one + local saved_postremove + saved_postremove=$(typeset -f SAVED_postremove) + eval "${saved_postremove/SAVED_/}" + export -f postremove + fi +} + +split_unset_variables() +{ + # unset saved vars; not needed anymore + unset SAVED_PNAME + unset SAVED_PVER + unset SAVED_PBUILD + unset SAVED_PCATEGORIE + unset SAVED_DESCRIPTION + unset SAVED_HOMEPAGE + unset SAVED_SPECIAL_VARS + unset SAVED_STATE + unset SAVED_PKGTYPE + unset SAVED_INHERITS + unset SAVED_DEPEND + unset SAVED_SDEPEND + unset SAVED_PROVIDE + unset SAVED_BINDIR + unset SAVED_NOPKGBUILD + unset SPLIT_PACKAGE_BASE + unset -f SAVED_preinstall + unset -f SAVED_postinstall + unset -f SAVED_preremove + unset -f SAVED_postremove +} + export_inherits() { local include="$1" @@ -784,6 +1108,7 @@ # fix target as it may be empty ! [ -n "${target}" ] && target="-${target}" + # build pkgname pkgname="${pname}${target}-${pver}-${parch}-${pbuild}" @@ -803,7 +1128,7 @@ : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree} # setup md5 dir - dest="${MAGE_TREE_DEST}/${pcat}/${pname}/md5" + dest="${MAGE_TREE_DEST}/${pcat}/${pname}${target}/md5" install -d ${dest} # gen md5sum @@ -841,6 +1166,16 @@ echo -e "${COLGREEN}Source package ${COLBLUE}${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} ${COLGREEN}successfully builded.${COLDEFAULT}" } +step_by_step() +{ + if [[ ${STEP_BY_STEP} = true ]] + then + echo -e "${COLRED}Step-by-step enabled! Paused after $1.${COLDEFAULT}" + echo "Press [enter] to continue" + read + fi +} + # print out our version showversion @@ -867,11 +1202,13 @@ # creates md5sums for smages to given dir if [[ $1 = calcmd5 ]] then - if [ $# -ge 3 ] + if [ $# -ge 2 ] then SMAGENAME="$2" MD5DIR="$3" - source ${SMAGENAME} || die "download source failed" + [[ -z ${MD5DIR} ]] && MD5DIR="$(dirname ${SMAGENAME})/md5" + + smagesource ${SMAGENAME} || die "download source failed" # overridable sourcedir; must be declared after source of the smage2 CALC_SOURCEDIR="${CALC_SOURCEDIR:="${SOURCEDIR}/${PNAME}"}" @@ -923,7 +1260,7 @@ echo else echo "Usage: Calculating MD5 Sums:" - echo " $(basename $0) calcmd5 /path/to/SMAGENAME /path/to/MD5DIR" + echo " $(basename $0) calcmd5 /path/to/SMAGENAME [/path/to/MD5DIR]" echo echo echo "Export the CALC_SOURCEDIR variable to override current SOURCEDIRs." @@ -945,7 +1282,7 @@ # get smage SMAGENAME="$2" MD5DIR="$(dirname ${SMAGENAME})/md5" - source ${SMAGENAME} || die "download source failed" + smagesource ${SMAGENAME} || die "download source failed" download_sources exit 0 @@ -957,18 +1294,56 @@ # set correct SMAGENAME SMAGENAME="$2" MD5DIR="$(dirname ${SMAGENAME})/md5" - source ${SMAGENAME} || die "regen: smage2 not found" + smagesource ${SMAGENAME} || die "regen: smage2 not found" regen_mage_tree - # build md5sum for existing packages - generate_package_md5sum \ - --pcat "${PCATEGORIE}" \ - --pname "${PNAME}" \ - --pver "${PVER}" \ - --pbuild "${PBUILD}" \ - --parch "${ARCH}" \ - --target "${target}" + # build several targets + if [[ -n ${MAGE_TARGETS} ]] + then + for target in ${MAGE_TARGETS} + do + # build md5sum for existing packages + generate_package_md5sum \ + --pcat "${PCATEGORIE}" \ + --pname "${PNAME}" \ + --pver "${PVER}" \ + --pbuild "${PBUILD}" \ + --parch "${ARCH}" \ + --target "${target}" + done + + # build several subpackages + elif [[ -n ${SPLIT_PACKAGES} ]] + then + split_save_variables + for subpackage in ${SPLIT_PACKAGES} + do + # get the right variables for the split + export PNAME="${subpackage}" + split_info_${subpackage} + # build md5sum for existing packages + generate_package_md5sum \ + --pcat "${PCATEGORIE}" \ + --pname "${PNAME}" \ + --pver "${PVER}" \ + --pbuild "${PBUILD}" \ + --parch "${ARCH}" + # restore smage environment + split_restore_variables + done + # unset all saved smage variables + split_unset_variables + + else + # build md5sum for existing packages + generate_package_md5sum \ + --pcat "${PCATEGORIE}" \ + --pname "${PNAME}" \ + --pver "${PVER}" \ + --pbuild "${PBUILD}" \ + --parch "${ARCH}" + fi exit 0 fi @@ -981,7 +1356,7 @@ echo -e "${COLGREEN}create-src-tarball called for ${COLBLUE}${SMAGENAME}${COLGREEN} ...${COLDEFAULT}" - source ${SMAGENAME} || die "regen: smage2 not found" + smagesource ${SMAGENAME} || die "regen: smage2 not found" if [[ -d ${SOURCEDIR}/${PNAME} ]] then @@ -1030,9 +1405,10 @@ [ -z "${CFLAGS}" ] && die "no CFLAGS variable found in ${MAGERC}" [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in ${MAGERC}" -source ${SMAGENAME} || die "source failed" +smagesource ${SMAGENAME} || die "source failed" PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}" MD5DIR="$(dirname ${SMAGENAME})/md5" +SMAGE_LOG_CMD="tee -a /var/log/smage/${PKGNAME}.log" xtitle "Compiling ${PKGNAME}" echo -e "${COLGREEN}Compiling ${PKGNAME}${COLDEFAULT}" @@ -1107,34 +1483,88 @@ mage rmstamp fi -src_prepare || die "src_prepare failed" -src_compile || die "src_compile failed" -src_install || die "src_install failed" - +# setup build loggins +[[ ! -d /var/log/smage ]] && install -d /var/log/smage +echo -e "### Build started on $(date) ###\n" > /var/log/smage/${PKGNAME}.log + +src_prepare | ${SMAGE_LOG_CMD} +die_pipestatus 0 "src_prepare failed" +step_by_step $_ + +src_compile | ${SMAGE_LOG_CMD} +die_pipestatus 0 "src_compile failed" +step_by_step $_ -# compressing doc, info & man files -if [ -d ${BUILDDIR}/builded/usr/share/man ] +# build several subpackages +if [[ -n ${SPLIT_PACKAGES} ]] then - echo -e "${COLBLUE}===${COLGREEN} compressing man-pages ...${COLDEFAULT}" - ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man + # save bindir & pname + split_save_variables + export SAVED_BINDIR="${BINDIR}" + for subpackage in ${SPLIT_PACKAGES} + do + if typeset -f src_install_${subpackage} > /dev/null + then + # export subpackage bindir + export BINDIR="${SAVED_BINDIR}_${subpackage}" + # export PNAME, several internal function and include + # rely on this variable + export PNAME="${subpackage}" + + echo + echo -en "${COLBLUE}*** ${COLDEFAULT}" + echo -en " Running ${COLGREEN}split src_install()${COLDEFAULT}" + echo -en " for subpkg: ${COLBLUE}${PNAME}${COLDEFAULT}" + echo -e " - basepkg: ${COLBLUE}${SPLIT_PACKAGE_BASE}${COLDEFAULT} ..." + + src_install_${subpackage} | ${SMAGE_LOG_CMD} + die_pipestatus 0 "src_install_${subpackage} failed" + step_by_step $_ + fi + done + # restore bindir & pname + split_restore_variables + # unset all saved smage variables + split_unset_variables +else + src_install | ${SMAGE_LOG_CMD} + die_pipestatus 0 "src_install failed" + step_by_step $_ fi -if [ -d ${BUILDDIR}/builded/usr/share/info ] +# compressing doc, info & man files +if [[ -n ${SPLIT_PACKAGES} ]] then - echo -e "${COLBLUE}===${COLGREEN} compressing info-pages ...${COLDEFAULT}" - ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info + for subpackage in ${SPLIT_PACKAGES} + do + mcompressdocs ${BINDIR}_${subpackage} + done +else + mcompressdocs ${BINDIR} fi + # stripping all bins and libs case ${NOSTRIP} in true|TRUE|yes|y) echo -e "NOSTRIP=true detected; Package will not be stripped ..." ;; *) - echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}" - mstripbins ${BINDIR} - echo -e "${COLBLUE}===${COLGREEN} stripping libraries ...${COLDEFAULT}" - mstriplibs ${BINDIR} + if [[ -n ${SPLIT_PACKAGES} ]] + then + for subpackage in ${SPLIT_PACKAGES} + do + echo -e "${COLBLUE}===${COLGREEN} stripping binaries for '${subpackage}' ...${COLDEFAULT}" + mstripbins ${BINDIR}_${subpackage} + echo -e "${COLBLUE}===${COLGREEN} stripping libraries for '${subpackage}' ...${COLDEFAULT}" + mstriplibs ${BINDIR}_${subpackage} + done + else + echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}" + mstripbins ${BINDIR} + echo -e "${COLBLUE}===${COLGREEN} stripping libraries ...${COLDEFAULT}" + mstriplibs ${BINDIR} + fi ;; esac @@ -1145,7 +1575,7 @@ ;; *) # build several targets - if [ -n "${MAGE_TARGETS}" ] + if [[ -n ${MAGE_TARGETS} ]] then for target in ${MAGE_TARGETS} do @@ -1171,6 +1601,49 @@ echo -e "${COLGREEN}\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" done + + # build several subpackages + elif [[ -n ${SPLIT_PACKAGES} ]] + then + split_save_variables + for subpackage in ${SPLIT_PACKAGES} + do + # get the right variables for the split + export PNAME="${subpackage}" + split_info_${PNAME} + + # jump to next one if NOPKGBUILD is set in split_info + case ${NOPKGBUILD} in + true|TRUE|yes|y) continue ;; + esac + + # check if an special subpackage_pkgbuild exists + if typeset -f ${PNAME}_pkgbuild > /dev/null + then + # run it + ${PNAME}_pkgbuild + fi + # now create the target package + ${MLIBDIR}/pkgbuild_dir.sh \ + "${PNAME}-${PVER}-${ARCH}-${PBUILD}" \ + "${BINDIR}_${PNAME}" || die "split_package: ${PNAME} package-build failed" + + # build pkg-md5-sum if requested + generate_package_md5sum \ + --pcat "${PCATEGORIE}" \ + --pname "${PNAME}" \ + --pver "${PVER}" \ + --pbuild "${PBUILD}" \ + --parch "${ARCH}" + + echo -e "${COLGREEN}\nPackage ${PNAME}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" + + # restore smage environment + split_restore_variables + done + # unset all saved smage variables + split_unset_variables + else ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed" @@ -1190,6 +1663,13 @@ ;; esac +if [[ ${SMAGE_BUILD_LOGGING} != false ]] +then + bzip2 -9f /var/log/smage/${PKGNAME}.log +else + [[ -f /var/log/smage/${PKGNAME}.log ]] && rm /var/log/smage/${PKGNAME}.log +fi + # for sure unset NOPKGBUILD unset NOSTRIP