--- trunk/mage/usr/lib/mage/smage2.sh 2012/01/09 20:44:55 1618 +++ trunk/mage/usr/lib/mage/smage2.sh 2014/02/14 09:00:35 2589 @@ -16,12 +16,16 @@ source /etc/mage.rc.global source ${MAGERC} source ${MLIBDIR}/mage4.functions.sh +source ${MLIBDIR}/smage2.functions.sh + +# export default path +export PATH="${PATH}:${MLIBDIR}" ## setup ## SMAGENAME="$1" SMAGEVERSION="$(< ${MLIBDIR}/version)" -# set PKGDIR and BUILDDIR and BINDIR to MROOT +# expand PKGDIR, BUILDDIR and BINDIR with MROOT if [[ -n ${MROOT} ]] then export PKGDIR=${MROOT}/${PKGDIR} @@ -29,1144 +33,11 @@ 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}" - - # do not overide if local state was broken or disabled! - case ${STATE} in - broken) return ;; - disabled) return ;; - esac - - 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} " - echo -e "-- Niels Rogalla (niro@magellan-linux.de)" -} - -die() -{ - xtitleclean - echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT} - echo "SMAGE failed: $@" - 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 ]] - then - echo -ne "\033]0;[sMage: $@]\007" - fi - return 0 -} - -xtitleclean() -{ - if [[ ${TERM} = xterm ]] - then - echo -ne "\033]0;\007" - fi - return 0 -} - -syncsmage2() -{ - xtitle "Updating smage2-script tree ..." - local i - for i in ${SMAGE2RSYNC} - do - rsync ${RSYNC_FETCH_OPTIONS} ${i} ${SMAGESCRIPTSDIR} - if [[ $? = 0 ]] - then - break - else - continue - fi - done - - # clean up backup files (foo~) - find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';' - - xtitleclean -} - -# $1 filename -get_db_md5_sum() -{ - local DB_FILE - local MD5_FILE - local i - - DB_ENTRY="$(basename $1)" - MD5_FILE="${MD5DIR}/$(basename ${SMAGENAME} ${SMAGESUFFIX})" - - i="$(cat ${MD5_FILE}| grep ${DB_ENTRY} | cut -d' ' -f1)" - - echo "${i}" -} - -download_sources() -{ - [ -z "${SRC_URI}" ] && echo -e "\nNothing declared to download.\n" && return 0 - - local count=${#SRC_URI[*]} - local uri - local subdir - local outputdir - local db_md5_file="${MD5DIR}/$(basename ${SMAGENAME} .${SMAGESUFFIX}).md5" - local fetching - local i - - # check if FETCHING is needed - if mchecksum --rundir "${SOURCEDIR}/${PNAME}" --file "${db_md5_file}" --method md5 - then - # md5's ok, no fetching needed - fetching=false - else - fetching=true - fi - - if [[ ${fetching} = true ]] - then - for ((i=0; i < count; i++)) - do - # url to file - uri="${SRC_URI[${i}]%%' '*}" - - # subdir in sources dir; the my_SRCI_URI file goes to there - subdir="${SRC_URI[${i}]##*' '}" - - # if $subdir is not equal with $uri then an other dir is used - if [[ ${uri} != ${subdir} ]] - then - outputdir="${SOURCEDIR}/${PNAME}/${subdir}" - else - outputdir="${SOURCEDIR}/${PNAME}" - fi - - echo -e "${COLBLUE}==>${COLGREEN} fetching ${uri}${COLDEFAULT}" - # do not die here, mchecksum catches download errors - mdownload --uri "${uri}" --dir "${outputdir}" - - # unset them to be sure - unset uri - unset subdir - unset outputdir - done - - # recheck md5 sums after download - echo - echo -e "${COLBLUE}===${COLGREEN} Checking MD5 sums:${COLDEFAULT}" - mchecksum --rundir "${SOURCEDIR}/${PNAME}" --file "${db_md5_file}" --method md5 || die "md5 failed" - echo - else - echo -e "${COLBLUE}===${COLGREEN} All sources already fetched, nothing to do${COLDEFAULT}" - fi - - # not needed anymore - unset SRC_URI -} - -# dummy function, used if that does not exist in smage file -src_prepare() -{ - echo "no src_prepare defined; doing nothing ..." - return 0 -} - -# dummy function, used if that does not exist in smage file -src_compile() -{ - echo "no src_compile defined; doing nothing ..." - return 0 -} - -# dummy function, used if that does not exist in smage file -src_check() -{ - echo "no src_check defined; doing nothing ..." - return 0 -} - -# dummy function, used if that does not exist in smage file -src_install() -{ - echo "no src_install defined; doing nothing ..." - return 0 -} - -mlibdir() -{ - local libdir=lib - [[ ${ARCH} = x86_64 ]] && libdir=lib64 - - echo "${libdir}" -} - -mconfigure() -{ - local myopts - if [[ ! -z ${CTARGET} ]] - then - myopts="--target=${CTARGET}" - fi - - if [ -x ./configure ] - then - ./configure \ - --prefix=/usr \ - --host=${CHOST} \ - --build=${CHOST} \ - --mandir=/usr/share/man \ - --infodir=/usr/share/info \ - --datadir=/usr/share \ - --sysconfdir=/etc \ - --localstatedir=/var/lib \ - --libdir=/usr/$(mlibdir) \ - ${myopts} \ - "$@" || die "mconfigure failed" - else - echo "configure is not an executable ..." - exit 1 - fi -} - -minstall() -{ - if [ -f ./[mM]akefile -o -f ./GNUmakefile ] - then - make prefix=${BINDIR}/usr \ - datadir=${BINDIR}/usr/share \ - infodir=${BINDIR}/usr/share/info \ - localstatedir=${BINDIR}/var/lib \ - mandir=${BINDIR}/usr/share/man \ - sysconfdir=${BINDIR}/etc \ - libdir=${BINDIR}/usr/$(mlibdir) \ - "$@" install || die "minstall failed" - else - die "no Makefile found" - fi -} - -mmake() -{ - make ${MAKEOPTS} ${EXTRA_EMAKE} "$@" -} - -munpack() -{ - local SRCFILE - local IFTAR - local DEST - - SRCFILE=$1 - - if [[ -z $2 ]] - then - DEST=${BUILDDIR} - else - DEST=$2 - fi - - [[ ! -d ${DEST} ]] && install -d ${DEST} - - case "${SRCFILE##*.}" in - bz2) - IFTAR="$(basename $SRCFILE .bz2)" - IFTAR="${IFTAR##*.}" - if [[ ${IFTAR} = tar ]] - then - 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) - IFTAR="$(basename $SRCFILE .gz)" - IFTAR="${IFTAR##*.}" - if [[ ${IFTAR} = tar ]] - then - 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 - ;; - xz) - IFTAR="$(basename $SRCFILE .xz)" - IFTAR="${IFTAR##*.}" - if [[ ${IFTAR} = tar ]] - then - tar --no-same-owner -xvJf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".tar.xz unpack failed." - else - pushd ${DEST} > /dev/null - xzcat ${SOURCEDIR}/${PNAME}/${SRCFILE} > ${DEST}/$(basename ${SRCFILE} .xz) || die ".xz unpack failed." - popd > /dev/null - fi - ;; - 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} || die ".tgz unpack failed." - ;; - txz|mpkzs|mpkz) - tar --no-same-owner -xvJf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST} || die ".txz unpack failed." - ;; - rar) - unrar x ${SOURCEDIR}/${PNAME}/${SRCFILE} ${DEST} || die ".rar unpack failed." - ;; - zip|xpi|jar) - 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" - ;; - esac -} - -mpatch() -{ - 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="--verbose --install --force" - - libtoolize ${opts} || die "running: mlibtoolize ${opts}" -} - -mautoreconf() -{ - local opts="$@" - [[ -z ${opts} ]] && opts="--verbose --install --force" - - autoreconf ${opts} || die "running: mautoreconf ${opts}" -} - -minstalldocs() -{ - local docfiles - local doc - docfiles="$@" - - if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ] - then - install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs." - fi - - for doc in ${docfiles} - do - if [ -f ${doc} ] - then - if mqueryfeature "compressdoc" - then - cat ${doc} | gzip -9c > ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/$(basename ${doc}).gz || die "gzipping +installing ${doc}." - chmod 0644 ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/$(basename ${doc}).gz || die "fixing permissions of ${doc}." - else - install -m 0644 ${SRCDIR}/${i} ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "installing ${doc}." - fi - fi - done -} - -mstriplibs() -{ - local stripdir="$@" - - [[ -z ${stripdir} ]] && stripdir="${BINDIR}" - [[ -z ${STRIP_DYN_LIB} ]] && STRIP_DYN_LIB="--strip-debug" - find ${stripdir} ! -type d | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs --no-run-if-empty strip ${STRIP_DYN_LIB} 2> /dev/null -} - -mstripbins() -{ - local stripdir="$@" - - [[ -z ${stripdir} ]] && stripdir="${BINDIR}" - [[ -z ${STRIP_DYN_BIN} ]] && STRIP_DYN_BIN="--strip-debug" - find ${stripdir} ! -type d | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs --no-run-if-empty strip ${STRIP_DYN_BIN} 2> /dev/null -} - -mstripstatic() -{ - local stripdir="$@" - - [[ -z ${stripdir} ]] && stripdir="${BINDIR}" - [[ -z ${STRIP_STATIC_LIB} ]] && STRIP_STATIC_LIB="--strip-debug" - find ${stripdir} ! -type d | xargs file | grep "ar archive" | cut -f 1 -d : | xargs --no-run-if-empty strip ${STRIP_STATIC_LIB} 2> /dev/null -} - -mstriplibtoolarchive() -{ - local stripdir="$@" - - [[ -z ${stripdir} ]] && stripdir="${BINDIR}" - find ${stripdir} ! -type d -name \*.la | xargs | grep "libtool library" | cut -f 1 -d : | xargs --no-run-if-empty rm -f -- 2> /dev/null -} - -mpurgetargets() -{ - local stripdir="$@" - local target - - [[ -z ${stripdir} ]] && stripdir=${BINDIR} - # nothing to do in this case - [[ -z ${PURGE_TARGETS[*]} ]] && return - - for target in ${PURGE_TARGETS[*]} - do - # check if target is a regex pattern without any slashes - if [[ ${target} = ${target//\/} ]] - then - find ${BINDIR} -type f -name "${target}" | xargs --no-run-if-empty rm -f -- 2> /dev/null - else - rm -f -- ${target} 2> /dev/null - fi - done -} - -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 - - if [[ -n "$@" ]] - then - for i in $@ - do - echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc" - source ${SMAGESCRIPTSDIR}/include/${i}.sminc - done - echo - fi -} - -setup_distcc_environment() -{ - if [ -x /usr/bin/distcc ] - then - echo -e "${COLBLUE}---${COLGREEN} Using DistCC for compilation ...${COLDEFAULT}" - export PATH=/usr/$(mlibdir)/distcc/bin:${PATH} || die "distcc: could not export new $PATH" - - export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed" - - # creating distcc tempdir - install -o distcc -g daemon -d ${DISTCC_DIR} - chmod 1777 ${DISTCC_DIR} - fi -} - -setup_ccache_environment() -{ - if [ -x /usr/bin/ccache ] - then - echo -e "${COLBLUE}---${COLGREEN} Using CCache for compilation ...${COLDEFAULT}" - export PATH=/usr/$(mlibdir)/ccache/bin:${PATH} || die "ccache: could not export new $PATH" - fi -} - -# fixes given dependencies to match a MAGE_TARGET -# fix_mage_deps -target s/depend # <-- note -target ! -fix_mage_deps() -{ - local target="$1" - local depend="$2" - local NDEPEND - local sym dep cat pver pname - - # deps and provides are special - # they must be fixed to match the target - - # run this only if target and depend is not empty - if [ -n "${target}" ] && [ -n "${depend}" ] - then - # fix DEPEND - while read sym dep - do - # ignore empty lines - [[ -z ${dep} ]] && continue - - cat="$(dirname ${dep})" - # change if not virtual - if [[ ${cat} = virtual ]] - then - pname="$(basename ${dep})" - else - # fix pver to target-pver - # to get pname-target-pver - - # doing it backwards ! - pver="${dep##*-}" - # full pver - pname="$(basename ${dep/-${pver}/})${target}-${pver}" - fi - - # do not add empty lines - if [ -z "${NDEPEND}" ] - then - NDEPEND="${sym} ${cat}/${pname}" - else - NDEPEND="${NDEPEND} - ${sym} ${cat}/${pname}" - fi - - unset cat pname pver - done << EOF -${depend} -EOF - # set NDEPEND to DEPEND - depend="${NDEPEND}" - fi - - echo "${depend}" -} - -# build_mage_script(): helper functions for regen_mage_tree() -# generates an mage file with given information in smage file -# needs at least: -# PNAME name of pkg -# PVER version -# PBUILD revision -# PCATEGORIE categorie of the pkg -# STATE state of pkg stable|unstable|old -# DESCRIPTION va short description (opt) -# HOMEPAGE homepage (opt) -# DEPEND runtime dependencies (opt) -# SDEPEND add. needed deps to build the pkg (opt) -# PROVIDE provides a virtual (opt) -# -# special tags: -# PKGTYPE type of pkg -# INHERITS which functions get included -# 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 -# -# gets called with build_mage_script target -build_mage_script() -{ - local magefile - local dest - local target - local split_pkg_base - local sym - local depname - - # if MAGE_TREE_DEST not set use BUILDDIR - : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree} - - # determinate which suffix this mage file should get, if any - [[ $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" - - # destination to magefile - dest="${MAGE_TREE_DEST}/${PCATEGORIE}/${PNAME}${target}/${magefile}" - - # show what we are doing - echo -e "${COLBLUE}===${COLGREEN} generating mage file:${COLDEFAULT}" - echo "${dest}" - - install -d "$(dirname ${dest})" - # now build the mage file - > ${dest} - - # pgkname and state - echo "PKGNAME=\"${PNAME}${target}-${PVER}-\${ARCH}-${PBUILD}\"" >> ${dest} - echo "STATE=\"${STATE}\"" >> ${dest} - - # description and homepage - echo "DESCRIPTION=\"${DESCRIPTION}\"" >> ${dest} - echo "HOMEPAGE=\"${HOMEPAGE}\"" >> ${dest} - - # special tags and vars - echo "PKGTYPE=\"${PKGTYPE}\"" >> ${dest} - - # echo MAGE_TARGETS ## note -target is needed ! - echo "MAGE_TARGETS=\"${target}\"" >> ${dest} - - # split package base - echo "SPLIT_PACKAGE_BASE=\"${split_pkg_base}\"" >> ${dest} - - # add special vars - if [ -n "${SPECIAL_VARS}" ] - then - local i - for i in ${SPECIAL_VARS} - do - # being tricky here :) - echo "${i}=\"$(eval echo \$${i})\"" >> ${dest} - done - fi - - # add at least all includes - if [ -n "${INHERITS}" ] - then - echo -n "minclude" >> ${dest} - local i - for i in ${INHERITS} - do - echo -n " ${i}" >> ${dest} - done - # a CRLF is needed here! - echo >> ${dest} - fi - - # deps and provides - echo "DEPEND=\"$(fix_mage_deps "${target}" "${DEPEND}")\"" >> ${dest} - echo "SDEPEND=\"$(fix_mage_deps "${target}" "${SDEPEND}")\"" >> ${dest} - echo "PROVIDE=\"${PROVIDE}\"" >> ${dest} - - # add special functions - if [ -n "${SPECIAL_FUNCTIONS}" ] - then - local i - for i in ${SPECIAL_FUNCTIONS} - do - # add to mage (quotes needed !) - typeset -f "${i}" >> ${dest} - # unset to be safe (quotes needed !) - #unset "${i}" <-- later to get every target built - done - fi - - # pre|post-install|removes - typeset -f preinstall >> ${dest} - typeset -f postinstall >> ${dest} - typeset -f preremove >> ${dest} - typeset -f postremove >> ${dest} -} - -regen_mage_tree() -{ - local subpackage - - # build them only if requested - if mqueryfeature regentree - then - # run it without targets - if [[ -n ${MAGE_TARGETS} ]] - then - # build for each target a mage file - # run it with several targets - echo - for subpackage in ${MAGE_TARGETS} - do - build_mage_script --target "${subpackage}" - done - echo - - # 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 - echo - for subpackage in ${SPLIT_PACKAGES} - do - # get the right variables for the split - export PNAME="${subpackage}" - split_info_${subpackage} - # get the preinstall etc - split_export_inherits ${subpackage} - build_mage_script --split-pkg-base "${split_pkg_base}" - # delete split preinstall etc - split_delete_inherits ${subpackage} - # 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 - unset SPECIAL_FUNCTIONS -# for i in ${SPECIAL_VARS} -# do -# unset "${i}" -# done - unset SPECIAL_VARS - unset STATE - unset DESCRIPTION - unset HOMEPAGE - # unset PKGTYPE <-- don't do that either; smage needs this var - unset INHERITS - unset DEPEND - unset SDEPEND - unset PROVIDE - unset preinstall - unset postinstall - unset preremove - 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_PKGTYPE="${PKGTYPE}" - - # special handling needed for mage features - # pkgbuild - mqueryfeature "pkgbuild" && export SAVED_FEATURE_PKGBUILD="pkgbuild" - mqueryfeature "!pkgbuild" && export SAVED_FEATURE_PKGBUILD="!pkgbuild" - # strip - mqueryfeature "strip" && export SAVED_FEATURE_STRIP="strip" - mqueryfeature "!strip" && export SAVED_FEATURE_STRIP="!strip" - # libtool - mqueryfeature "libtool" && export SAVED_FEATURE_LIBTOOL="libtool" - mqueryfeature "!libtool" && export SAVED_FEATURE_LIBTOOL="!libtool" - # compressdoc - mqueryfeature "compressdoc" && export SAVED_FEATURE_COMPRESSDOC="compressdoc" - mqueryfeature "!compressdoc" && export SAVED_FEATURE_COMPRESSDOC="!compressdoc" - - # 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 PKGTYPE="${SAVED_PKGTYPE}" - - # special handling needed for mage features - # pkgbuild - FVERBOSE=off msetfeature "${SAVED_FEATURE_PKGBUILD}" - # strip - FVERBOSE=off msetfeature "${SAVED_FEATURE_STRIP}" - # libtool - FVERBOSE=off msetfeature "${SAVED_FEATURE_LIBTOOL}" - # compressdoc - FVERBOSE=off msetfeature "${SAVED_FEATURE_COMPRESSDOC}" - - # 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_PKGTYPE - unset SAVED_FEATURE_PKGBUILD - unset SAVED_FEATURE_STRIP - unset SAVED_FEATURE_LIBTOOL - unset SAVED_FEATURE_COMPRESSDOC - unset SPLIT_PACKAGE_BASE - unset -f SAVED_preinstall - unset -f SAVED_postinstall - unset -f SAVED_preremove - unset -f SAVED_postremove -} - -split_export_inherits() -{ - local subpackage="$1" - local func - local newfunc - - for func in preinstall postinstall preremove postremove - do - if [[ ! -z $(typeset -f ${func}_${subpackage}) ]] - then - newfunc=$(typeset -f ${func}_${subpackage}) - newfunc="${newfunc/_${subpackage} (/ (}" - eval "${newfunc}" - fi - done -} - -split_delete_inherits() -{ - local subpackage="$1" - local func - - for func in preinstall postinstall preremove postremove - do - if [[ ! -z $(typeset -f ${func}_${subpackage}) ]] - then - unset -f ${func} - fi - done - } - -export_inherits() -{ - local include="$1" - shift - - while [ "$1" ] - do - local functions="$1" - - # sanity checks - [ -z "${include}" ] && die "export_inherits(): \$include not given." - [ -z "${functions}" ] && die "export_inherits(): \$functions not given." - - eval "${functions}() { ${include}_${functions} ; }" - - # debug - [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}" - - shift - done -} - -generate_package_md5sum() -{ - local dest - local pcat - local pname - local pver - local pbuild - local parch - local target - local pkgname - - # very basic getops - for i in $* - do - case $1 in - --pcat|-c) shift; pcat="$1" ;; - --pname|-n) shift; pname="$1" ;; - --pver|-v) shift; pver="$1" ;; - --pbuild|-b) shift; pbuild="$1" ;; - --parch|a) shift; parch="$1" ;; - --target|t) shift; target="$1" ;; - esac - shift - done - - # sanity checks; abort if not given - [ -z "${pcat}" ] && die "generate_package_md5sum() \$pcat not given." - [ -z "${pname}" ] && die "generate_package_md5sum() \$pname not given." - [ -z "${pver}" ] && die "generate_package_md5sum() \$pver not given." - [ -z "${pbuild}" ] && die "generate_package_md5sum() \$pbuild not given." - [ -z "${parch}" ] && die "generate_package_md5sum() \$parch not given." - - # check needed global vars - [ -z "${PKGDIR}" ] && die "generate_package_md5sum() \$PKGDIR not set." - [ -z "${PKGSUFFIX}" ] && die "generate_package_md5sum() \$PKGSUFFIX not set." - - # fix target as it may be empty ! - [ -n "${target}" ] && target="-${target}" - - # build pkgname - pkgname="${pname}${target}-${pver}-${parch}-${pbuild}" - - # build pkg-md5-sum only if requested - if mqueryfeature regentree - then - echo -ne "${COLBLUE}===${COLGREEN} generating md5's for ${pkgname}.${PKGSUFFIX} ... ${COLDEFAULT}" - - # abort if not exist - if [ ! -f ${PKGDIR}/${pkgname}.${PKGSUFFIX} ] - then - echo -e "${COLRED}! exists${COLDEFAULT}" - return 0 - fi - - # if MAGE_TREE_DEST not set use BUILDDIR - : ${MAGE_TREE_DEST=${BUILDDIR}/mage-tree} - - # setup md5 dir - dest="${MAGE_TREE_DEST}/${pcat}/${pname}${target}/md5" - install -d ${dest} - - # gen md5sum - ( cd ${PKGDIR}; md5sum "${pkgname}.${PKGSUFFIX}" ) \ - > ${dest}/${pkgname}.md5 - echo -e "${COLGREEN}done${COLDEFAULT}" - fi -} - -source_pkg_build() -{ - if [[ ${PKGTYPE} = virtual ]] - then - echo "Virtual package detected; src-pkg-tarball not necessary ..." - return 0 - fi - - if [[ ! -d ${SOURCEDIR}/${PNAME} ]] - then - echo "No SRC_URI defined; src-pkg-tarball not necessary ..." - return 0 - fi - - [ -z "${SRCPKGDIR}" ] && die "\$SRCPKGDIR not found. Please setup your ${MAGERC} correctly." - - echo -e "${COLGREEN}Creating source package tarball ... ${COLDEFAULT}" - - # include the smage2 file - cp ${SMAGENAME} ${SOURCEDIR}/${PNAME} - - ( cd ${SOURCEDIR}; tar cvjf ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${PNAME}; ) - [[ ! -d ${SRCPKGDIR} ]] && install -d ${SRCPKGDIR} - mv ${BUILDDIR}/${PNAME}-${PVER}-${PBUILD}.tar.bz2 ${SRCPKGDIR}/${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} - - echo -e "${COLGREEN}Source package ${COLBLUE}${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX} ${COLGREEN}successfully builded.${COLDEFAULT}" -} - -step_by_step() -{ - if mqueryfeature stepbystep - then - echo -e "${COLRED}Step-by-step enabled! Paused after $1.${COLDEFAULT}" - echo "Press [enter] to continue" - read - fi -} - -resume_stamp() -{ - local step="$1" - touch ${BUILDDIR}/.smage-${PKGNAME}-${step} -} - -run_resume() -{ - local step="$1" - - if mqueryfeature "resume" && [[ -f ${BUILDDIR}/.smage-${PKGNAME}-${step} ]] - then - echo -e "${COLMAGENTA}${step} already processed; doing nothing${COLDEFAULT}" - return 0 - else - return 1 - fi -} - # print out our version showversion echo -if [ -z "$1" ] +if [[ -z ${SMAGENAME} ]] then echo "No .smage2 file given. Exiting." echo @@ -1286,23 +157,8 @@ regen_mage_tree - # 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} ]] + if [[ -n ${SPLIT_PACKAGES} ]] then split_save_variables for subpackage in ${SPLIT_PACKAGES} @@ -1310,9 +166,15 @@ # get the right variables for the split export PNAME="${subpackage}" split_info_${subpackage} + # fix PCATEGORIE -> PCAT + if [[ ! -z ${PCATEGORIE} ]] + then + PCAT="${PCATEGORIE}" + unset PCATEGORIE + fi # build md5sum for existing packages generate_package_md5sum \ - --pcat "${PCATEGORIE}" \ + --pcat "${PCAT}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ @@ -1326,7 +188,7 @@ else # build md5sum for existing packages generate_package_md5sum \ - --pcat "${PCATEGORIE}" \ + --pcat "${PCAT}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ @@ -1399,17 +261,14 @@ [ -z "${CXXFLAGS}" ] && die "no CXXFLAGS variable found in ${MAGERC}" smagesource ${SMAGENAME} || die "source failed" -PKGNAME="${PNAME}-${PVER}-${ARCH}-${PBUILD}" +PKGNAME="${PNAME}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}" MD5DIR="$(dirname ${SMAGENAME})/md5" SMAGE_LOG_CMD="tee -a /var/log/smage/${PKGNAME}.log" xtitle "Compiling ${PKGNAME}" echo -e "${COLGREEN}Compiling ${PKGNAME}${COLDEFAULT}" -# auto regen mage tree if requested -regen_mage_tree - -if mqueryfeature "srcpkg" +if mqueryfeature "srcpkgbuild" then if [[ -d ${SOURCEDIR}/${PNAME} ]] then @@ -1444,6 +303,10 @@ # setup for distcc goes *before* ccache, so ccache comes before distcc in path mqueryfeature "distcc" && setup_distcc_environment +# setup icecc +# setup for icecc goes *before* ccache, so ccache comes before icecc in path +mqueryfeature "icecc" && setup_icecc_environment + # setup ccache mqueryfeature "ccache" && setup_ccache_environment @@ -1486,6 +349,12 @@ rm -rf ${BUILDDIR}/${PKGNAME} fi + # clean up stamps dir + if [ -d ${BUILDDIR}/.stamps ] + then + rm -rf ${BUILDDIR}/.stamps + fi + # setup build logging [[ ! -d /var/log/smage ]] && install -d /var/log/smage echo -e "### Build started on $(date) ###\n" > /var/log/smage/${PKGNAME}.log @@ -1526,28 +395,42 @@ export SAVED_BINDIR="${BINDIR}" for subpackage in ${SPLIT_PACKAGES} do - if typeset -f src_install_${subpackage} > /dev/null + split_info_${subpackage} + if [[ ${PKGTYPE} = virtual ]] 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 "Virtual package detected" echo -en " for subpkg: ${COLBLUE}${PNAME}${COLDEFAULT}" echo -e " - basepkg: ${COLBLUE}${SPLIT_PACKAGE_BASE}${COLDEFAULT} ..." - ( run_resume src_install_${subpackage} || src_install_${subpackage} ) | ${SMAGE_LOG_CMD} - die_pipestatus 0 "src_install_${subpackage} failed" - resume_stamp src_install_${subpackage} - step_by_step src_install_${subpackage} + echo "virtual package detected; nothing will be build ..." + # automatically set !pkgbuild here too + msetfeature "!pkgbuild" + else + 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} ..." + + ( run_resume src_install_${subpackage} || src_install_${subpackage} ) | ${SMAGE_LOG_CMD} + die_pipestatus 0 "src_install_${subpackage} failed" + resume_stamp src_install_${subpackage} + step_by_step src_install_${subpackage} + fi fi + # restore smage environment + split_restore_variables done - # restore bindir & pname - split_restore_variables # unset all saved smage variables split_unset_variables else @@ -1571,14 +454,36 @@ # compressing doc, info & man files if [[ -n ${SPLIT_PACKAGES} ]] then + # save smage environment + split_save_variables for subpackage in ${SPLIT_PACKAGES} do - run_resume mcompressdoc_${subpackage} || mcompressdocs ${BINDIR}_${subpackage} - resume_stamp mcompressdoc_${subpackage} + # honor split_info + split_info_${subpackage} + if [[ ${PKGTYPE} = virtual ]] + then + # automatically set !pkgbuild here too + msetfeature "!pkgbuild" + fi + + if mqueryfeature "!compressdoc" + then + echo -e "!compressdoc detected; documentation of '${subpackage}' will not be compressed ..." + elif mqueryfeature "!pkgbuild" + then + echo "!pkgbuild detected; skipping documentation compression for '${subpackage}' ..." + else + run_resume post-mcompressdoc_${subpackage} || mcompressdocs ${BINDIR}_${subpackage} + resume_stamp post-mcompressdoc_${subpackage} + fi + # restore smage environment + split_restore_variables done + # unset saved variables + split_unset_variables else - run_resume mcompressdoc || mcompressdocs ${BINDIR} - resume_stamp mcompressdoc + run_resume post-mcompressdoc || mcompressdocs ${BINDIR} + resume_stamp post-mcompressdoc fi fi @@ -1590,16 +495,39 @@ else if [[ -n ${SPLIT_PACKAGES} ]] then + # save smage environment + split_save_variables for subpackage in ${SPLIT_PACKAGES} do - echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives for '${subpackage}' ...${COLDEFAULT}" - run_resume mstriplibtoolarchive_${subpackage} || mstriplibtoolarchive ${BINDIR}_${subpackage} - resume_stamp mstriplibtoolarchive_${subpackage} + # honor split_info + split_info_${subpackage} + if [[ ${PKGTYPE} = virtual ]] + then + # automatically set !pkgbuild here too + msetfeature "!pkgbuild" + fi + + if mqueryfeature "!libtool" + then + if mqueryfeature "!pkgbuild" + then + echo "!pkgbuild detected; skipping libtool archive stripping for '${subpackage}'..." + else + echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives for '${subpackage}' ...${COLDEFAULT}" + run_resume post-mstriplibtoolarchive_${subpackage} || mstriplibtoolarchive ${BINDIR}_${subpackage} + resume_stamp post-mstriplibtoolarchive_${subpackage} + fi + fi + + # restore smage environment + split_restore_variables done + # unset saved variables + split_unset_variables else echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives ...${COLDEFAULT}" - run_resume mstriplibtoolarchive || mstriplibtoolarchive ${BINDIR} - resume_stamp mstriplibtoolarchive + run_resume post-mstriplibtoolarchive || mstriplibtoolarchive ${BINDIR} + resume_stamp post-mstriplibtoolarchive fi fi fi @@ -1608,20 +536,43 @@ then if mqueryfeature "!pkgbuild" then - echo "!pkgbuild detected; skipping file purgation..." + echo "!pkgbuild detected; skipping file purgation ..." else if [[ -n ${SPLIT_PACKAGES} ]] then + # save smage environment + split_save_variables for subpackage in ${SPLIT_PACKAGES} do - echo -e "${COLBLUE}===${COLGREEN} purging all purge targets in '${subpackage}' ...${COLDEFAULT}" - run_resume mpurgetargets_${subpackage} || mpurgetargets ${BINDIR}_${subpackage} - resume_stamp mpurgetargets_${subpackage} + # honor split_info + split_info_${subpackage} + if [[ ${PKGTYPE} = virtual ]] + then + # automatically set !pkgbuild here too + msetfeature "!pkgbuild" + fi + + if mqueryfeature "purge" + then + if mqueryfeature "!pkgbuild" + then + echo "!pkgbuild detected; skipping file purgation for '${subpackage}' ..." + else + echo -e "${COLBLUE}===${COLGREEN} purging all purge targets in '${subpackage}' ...${COLDEFAULT}" + run_resume post-mpurgetargets_${subpackage} || mpurgetargets ${BINDIR}_${subpackage} + resume_stamp post-mpurgetargets_${subpackage} + fi + fi + + # restore smage environment + split_restore_variables done + # unset saved variables + split_unset_variables else echo -e "${COLBLUE}===${COLGREEN} purging all purge targets ...${COLDEFAULT}" - run_resume mpurgetargets || mpurgetargets ${BINDIR} - resume_stamp mpurgetargets + run_resume post-mpurgetargets || mpurgetargets ${BINDIR} + resume_stamp post-mpurgetargets fi fi fi @@ -1629,75 +580,110 @@ # stripping all bins and libs if mqueryfeature "!strip" then - echo -e "!strip detected; Package will not be stripped ..." + echo -e "!strip detected; package will not be stripped ..." elif mqueryfeature "!pkgbuild" then echo "!pkgbuild detected; skipping stripping of the package ..." else if [[ -n ${SPLIT_PACKAGES} ]] then + # save smage environment + split_save_variables for subpackage in ${SPLIT_PACKAGES} do - echo -e "${COLBLUE}===${COLGREEN} stripping binaries for '${subpackage}' ...${COLDEFAULT}" - run_resume mstripbins_${subpackage} || mstripbins ${BINDIR}_${subpackage} - resume_stamp mstripbins_${subpackage} - echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries for '${subpackage}' ...${COLDEFAULT}" - run_resume mstriplibs_${subpackage} || mstriplibs ${BINDIR}_${subpackage} - resume_stamp mstriplibs_${subpackage} - echo -e "${COLBLUE}===${COLGREEN} stripping static libraries for '${subpackage}' ...${COLDEFAULT}" - run_resume mstripstatic_${subpackage} || mstripstatic ${BINDIR}_${subpackage} - resume_stamp mstripstatic_${subpackage} + # honor split_info + split_info_${subpackage} + if [[ ${PKGTYPE} = virtual ]] + then + # automatically set !pkgbuild here too + msetfeature "!pkgbuild" + fi + + if mqueryfeature "!strip" + then + echo -e "!strip detected; package '${subpackage}' will not be stripped ..." + elif mqueryfeature "!pkgbuild" + then + echo "!pkgbuild detected; skipping stripping of the package '${subpackage}' ..." + else + echo -e "${COLBLUE}===${COLGREEN} stripping binaries for '${subpackage}' ...${COLDEFAULT}" + run_resume post-mstripbins_${subpackage} || mstripbins ${BINDIR}_${subpackage} + resume_stamp post-mstripbins_${subpackage} + echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries for '${subpackage}' ...${COLDEFAULT}" + run_resume post-mstriplibs_${subpackage} || mstriplibs ${BINDIR}_${subpackage} + resume_stamp post-mstriplibs_${subpackage} + echo -e "${COLBLUE}===${COLGREEN} stripping static libraries for '${subpackage}' ...${COLDEFAULT}" + run_resume post-mstripstatic_${subpackage} || mstripstatic ${BINDIR}_${subpackage} + resume_stamp post-mstripstatic_${subpackage} + fi + + # restore smage environment + split_restore_variables done + # unset saved variables + split_unset_variables else echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}" - run_resume mstripbins || mstripbins ${BINDIR} - resume_stamp mstripbins + run_resume post-mstripbins || mstripbins ${BINDIR} + resume_stamp post-mstripbins echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries ...${COLDEFAULT}" - run_resume mstriplibs || mstriplibs ${BINDIR} - resume_stamp mstriplibs + run_resume post-mstriplibs || mstriplibs ${BINDIR} + resume_stamp post-mstriplibs echo -e "${COLBLUE}===${COLGREEN} stripping static libraries ...${COLDEFAULT}" - run_resume mstripstatic || mstripstatic ${BINDIR} - resume_stamp mstripstatic + run_resume post-mstripstatic || mstripstatic ${BINDIR} + resume_stamp post-mstripstatic fi fi -if mqueryfeature "!pkgbuild" +if mqueryfeature "qalint" then - echo -e "!pkgbuild detected; Package will not be build ..." -else - # build several targets - if [[ -n ${MAGE_TARGETS} ]] + if mqueryfeature "!pkgbuild" + then + echo "!pkgbuild detected; skipping QA lint checks ..." + else + if [[ -n ${SPLIT_PACKAGES} ]] then - for target in ${MAGE_TARGETS} + # save smage environment + split_save_variables + for subpackage in ${SPLIT_PACKAGES} do - # check if a special target_pkgbuild exists - if typeset -f ${target}_pkgbuild > /dev/null + # honor split_info + split_info_${subpackage} + if [[ ${PKGTYPE} = virtual ]] then - # run it - run_resume ${target}_pkgbuild || ${target}_pkgbuild - resume_stamp ${target}_pkgbuild + # automatically set !pkgbuild here too + msetfeature "!pkgbuild" fi - # now create the target package - run_resume pkg_builddir_${target} || ${MLIBDIR}/pkgbuild_dir.sh \ - "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \ - ${BINDIR} || die "target: ${target} package-build failed" - resume_stamp pkg_builddir_${target} - # build pkg-md5-sum if requested - run_resume md5sum_${target} || generate_package_md5sum \ - --pcat "${PCATEGORIE}" \ - --pname "${PNAME}" \ - --pver "${PVER}" \ - --pbuild "${PBUILD}" \ - --parch "${ARCH}" \ - --target "${target}" - resume_stamp md5sum_${target} + if mqueryfeature "qalint" + then + if mqueryfeature "!pkgbuild" + then + echo "!pkgbuild detected; skipping QA lint checks for '${subpackage}' ..." + else + echo -e "${COLBLUE}===${COLGREEN} running QA lint checks for '${subpackage}' ...${COLDEFAULT}" + mqalint ${BINDIR}_${subpackage} + fi + fi - echo -e "${COLGREEN}\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" + # restore smage environment + split_restore_variables done + # unset saved variables + split_unset_variables + else + echo -e "${COLBLUE}===${COLGREEN} running QA lint checks ...${COLDEFAULT}" + mqalint ${BINDIR} + fi + fi +fi +if mqueryfeature "!pkgbuild" +then + echo -e "!pkgbuild detected; Package will not be build ..." +else # build several subpackages - elif [[ -n ${SPLIT_PACKAGES} ]] + if [[ -n ${SPLIT_PACKAGES} ]] then split_save_variables for subpackage in ${SPLIT_PACKAGES} @@ -1705,33 +691,49 @@ # get the right variables for the split export PNAME="${subpackage}" split_info_${PNAME} + # fix PCATEGORIE -> PCAT + if [[ ! -z ${PCATEGORIE} ]] + then + PCAT="${PCATEGORIE}" + unset PCATEGORIE + fi + if [[ ${PKGTYPE} = virtual ]] + then + # automatically set !pkgbuild here too + msetfeature "!pkgbuild" + fi # jump to next one if !pkgbuild is set in split_info - mqueryfeature "!pkgbuild" && continue + if mqueryfeature "!pkgbuild" + then + # restore smage environment + split_restore_variables + continue + fi # check if an special subpackage_pkgbuild exists if typeset -f ${PNAME}_pkgbuild > /dev/null then # run it - run_resume ${PNAME}_pkgbuild || ${PNAME}_pkgbuild - resume_stamp ${PNAME}_pkgbuild + run_resume post-${PNAME}_pkgbuild || ${PNAME}_pkgbuild + resume_stamp post-${PNAME}_pkgbuild fi # now create the target package - run_resume pkg_builddir_${PNAME} || ${MLIBDIR}/pkgbuild_dir.sh \ - "${PNAME}-${PVER}-${ARCH}-${PBUILD}" \ + run_resume post-pkg_builddir_${PNAME} || ${MLIBDIR}/pkgbuild_dir.sh \ + "${PNAME}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD}" \ "${BINDIR}_${PNAME}" || die "split_package: ${PNAME} package-build failed" - resume_stamp pkg_builddir_${PNAME} + resume_stamp post-pkg_builddir_${PNAME} # build pkg-md5-sum if requested - run_resume md5sum_${PNAME} || generate_package_md5sum \ - --pcat "${PCATEGORIE}" \ + run_resume post-md5sum_${PNAME} || generate_package_md5sum \ + --pcat "${PCAT}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" - resume_stamp md5sum_${PNAME} + resume_stamp post-md5sum_${PNAME} - echo -e "${COLGREEN}\nPackage ${PNAME}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" + echo -e "${COLGREEN}\nPackage ${PNAME}-${PVER}-${ARCH}$(print_distrotag)-${PBUILD} successfully builded.\n${COLDEFAULT}" # restore smage environment split_restore_variables @@ -1740,29 +742,32 @@ split_unset_variables else - run_resume pkg_builddir || ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed" - resume_stamp pkg_builddir + run_resume post-pkg_builddir || ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed" + resume_stamp post-pkg_builddir # build pkg-md5-sum if requested - run_resume md5sum || generate_package_md5sum \ - --pcat "${PCATEGORIE}" \ + run_resume post-md5sum || generate_package_md5sum \ + --pcat "${PCAT}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" - resume_stamp md5sum + resume_stamp post-md5sum echo -e "${COLGREEN}\nPackage ${PKGNAME} successfully builded.\n${COLDEFAULT}" fi # build src-pkg-tarball if requested - if mqueryfeature "srcpkg" + if mqueryfeature "srcpkgbuild" then - run_resume srcpkgbuild || source_pkg_build ${SMAGENAME} - resume_stamp srcpkgbuild + run_resume post-srcpkgbuild || source_pkg_build ${SMAGENAME} + resume_stamp post-srcpkgbuild fi fi +# auto regen mage tree if requested +regen_mage_tree + if mqueryfeature "buildlog" then bzip2 -9f /var/log/smage/${PKGNAME}.log