--- trunk/mage/usr/lib/mage/smage2.sh 2012/01/09 20:08:17 1614 +++ trunk/mage/usr/lib/mage/smage2.sh 2012/01/13 18:27:28 1639 @@ -21,7 +21,7 @@ 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} @@ -177,6 +177,8 @@ fi echo -e "${COLBLUE}==>${COLGREEN} fetching ${uri}${COLDEFAULT}" + # always use verbose mode for source downloads + FVERBOSE=off msetfeature "verbose" # do not die here, mchecksum catches download errors mdownload --uri "${uri}" --dir "${outputdir}" @@ -240,11 +242,28 @@ local myopts if [[ ! -z ${CTARGET} ]] then - myopts="--target=${CTARGET}" + myopts+=" --target=${CTARGET}" fi if [ -x ./configure ] then + # if requested disable-static + if [[ ! -z $(./configure --help | grep -- '--.*able-static') ]] + then + if mqueryfeature '!static' + then + myopts+=" --disable-static" + else + myopts+=" --enable-static" + fi + fi + + # always enable shared by default + if [[ ! -z $(./configure --help | grep -- '--.*able-shared') ]] + then + myopts+=" --enable-shared" + fi + ./configure \ --prefix=/usr \ --host=${CHOST} \ @@ -431,10 +450,10 @@ then if mqueryfeature "compressdoc" then - cat ${doc} | gzip -9c > ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/${doc}.gz || die "gzipping +installing ${doc}." - chmod 0644 ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/${doc}.gz || die "fixing permissions of ${doc}." + 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}." + install -m 0644 ${doc} ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "installing ${doc}." fi fi done @@ -446,7 +465,7 @@ [[ -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 + find ${stripdir} ! -type d | xargs --no-run-if-empty file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs --no-run-if-empty strip ${STRIP_DYN_LIB} 2> /dev/null } mstripbins() @@ -455,7 +474,7 @@ [[ -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 + find ${stripdir} ! -type d | xargs --no-run-if-empty file | grep "executable" | grep ELF | cut -f 1 -d : | xargs --no-run-if-empty strip ${STRIP_DYN_BIN} 2> /dev/null } mstripstatic() @@ -464,7 +483,7 @@ [[ -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 + find ${stripdir} ! -type d | xargs --no-run-if-empty file | grep "ar archive" | cut -f 1 -d : | xargs --no-run-if-empty strip ${STRIP_STATIC_LIB} 2> /dev/null } mstriplibtoolarchive() @@ -472,7 +491,7 @@ 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 + find ${stripdir} ! -type d -name \*.la | xargs --no-run-if-empty file | grep "libtool library" | cut -f 1 -d : | xargs --no-run-if-empty rm -f -- 2> /dev/null } mpurgetargets() @@ -1143,6 +1162,25 @@ fi } +resume_stamp() +{ + local step="$1" + [[ ! -d ${BUILDDIR}/.stamps ]] && install -d ${BUILDDIR}/.stamps + touch ${BUILDDIR}/.stamps/smage-${PKGNAME}-${step} +} + +run_resume() +{ + local step="$1" + + if mqueryfeature "resume" && [[ -f ${BUILDDIR}/.stamps/smage-${PKGNAME}-${step} ]] + then + echo -e "${COLMAGENTA}${step} already processed; doing nothing${COLDEFAULT}" + return 0 + else + return 1 + fi +} # print out our version showversion @@ -1363,6 +1401,11 @@ [[ ! -f ${SMAGENAME} ]] && die "Included smage2 file in src-tarball not found: ${SMAGENAME}" fi +if [ "$1" == "--resume" -a -n "$2" ] +then + msetfeature "resume" + SMAGENAME="$2" +fi [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ] && die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting." [ -z "$(basename ${SMAGENAME} | grep .${SMAGESUFFIX})" ] && @@ -1386,7 +1429,7 @@ # auto regen mage tree if requested regen_mage_tree -if mqueryfeature "srcpkg" +if mqueryfeature "srcpkgbuild" then if [[ -d ${SOURCEDIR}/${PNAME} ]] then @@ -1407,7 +1450,13 @@ # fixes some compile issues export CHOST="${CHOST}" || die "CHOST export failed" export CFLAGS="${CFLAGS}" || die "CFLAGS export failed" -export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed" +if [[ -z ${CXXFLAGS} ]] +then + export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed" +else + export CXXFLAGS="${CXXFLAGS}" || die "CXXFLAGS export failed" +fi +export LDFLAGS="${LDFLAGS}" || die "LDFLAGS export failed" export BINDIR="${BINDIR}" || die "BINDIR export failed" export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed" @@ -1418,35 +1467,55 @@ # setup ccache mqueryfeature "ccache" && setup_ccache_environment -# clean up builddir if a previously one exist -if [ -d ${BUILDDIR} ] +if mqueryfeature "resume" then - rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR." -fi -install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR." + echo -e "${COLMAGENTA}Resume requested; continuing previous build${COLDEFAULT}" -# clean up srcdir if a previously unpacked one exist -if [ -d ${SRCDIR} ] -then - rm -rf ${SRCDIR} -fi + # setup build logging + [[ ! -d /var/log/smage ]] && install -d /var/log/smage + if [[ -f /var/log/smage/${PKGNAME}.log.bz2 ]] + then + bunzip2 -f /var/log/smage/${PKGNAME}.log.bz2 + fi + echo -e "### Resume started on $(date) ###\n" >> /var/log/smage/${PKGNAME}.log -# clean up bindir if a previous build exist or create a new one -if [ -d ${BINDIR} ] -then - rm -rf ${BINDIR} -fi -install -d ${BINDIR} || die "couldn't create \$BINDIR." +else + # clean up builddir if a previously one exist + if [ -d ${BUILDDIR} ] + then + rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR." + fi + install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR." -# clean up package temp dir if a previous build exist -if [ -d ${BUILDDIR}/${PKGNAME} ] -then - rm -rf ${BUILDDIR}/${PKGNAME} -fi + # clean up srcdir if a previously unpacked one exist + if [ -d ${SRCDIR} ] + then + rm -rf ${SRCDIR} + 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 + # clean up bindir if a previous build exist or create a new one + if [ -d ${BINDIR} ] + then + rm -rf ${BINDIR} + fi + install -d ${BINDIR} || die "couldn't create \$BINDIR." + + # clean up package temp dir if a previous build exist + if [ -d ${BUILDDIR}/${PKGNAME} ] + then + 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 +fi if [[ ${PKGTYPE} = virtual ]] then @@ -1454,24 +1523,26 @@ # automatically set !pkgbuild here too msetfeature "!pkgbuild" else - src_prepare | ${SMAGE_LOG_CMD} + ( run_resume src_prepare || src_prepare ) | ${SMAGE_LOG_CMD} die_pipestatus 0 "src_prepare failed" - step_by_step $_ + resume_stamp src_prepare + step_by_step src_prepare - src_compile | ${SMAGE_LOG_CMD} + ( run_resume src_compile || src_compile ) | ${SMAGE_LOG_CMD} die_pipestatus 0 "src_compile failed" - step_by_step $_ + resume_stamp src_compile + step_by_step src_compile # only run checks if requested if mqueryfeature "!check" then echo "!check detected; src_check() will not be run!" | ${SMAGE_LOG_CMD} - step_by_step src_check else - src_check | ${SMAGE_LOG_CMD} + ( run_resume src_check || src_check ) | ${SMAGE_LOG_CMD} die_pipestatus 0 "src_check failed" - step_by_step $_ + resume_stamp src_check fi + step_by_step src_check # build several subpackages if [[ -n ${SPLIT_PACKAGES} ]] @@ -1495,9 +1566,10 @@ echo -en " for subpkg: ${COLBLUE}${PNAME}${COLDEFAULT}" echo -e " - basepkg: ${COLBLUE}${SPLIT_PACKAGE_BASE}${COLDEFAULT} ..." - src_install_${subpackage} | ${SMAGE_LOG_CMD} + ( run_resume src_install_${subpackage} || src_install_${subpackage} ) | ${SMAGE_LOG_CMD} die_pipestatus 0 "src_install_${subpackage} failed" - step_by_step $_ + resume_stamp src_install_${subpackage} + step_by_step src_install_${subpackage} fi done # restore bindir & pname @@ -1505,9 +1577,10 @@ # unset all saved smage variables split_unset_variables else - src_install | ${SMAGE_LOG_CMD} + ( run_resume src_install || src_install ) | ${SMAGE_LOG_CMD} die_pipestatus 0 "src_install failed" - step_by_step $_ + resume_stamp src_install + step_by_step src_install fi fi @@ -1526,10 +1599,12 @@ then for subpackage in ${SPLIT_PACKAGES} do - mcompressdocs ${BINDIR}_${subpackage} + run_resume post-mcompressdoc_${subpackage} || mcompressdocs ${BINDIR}_${subpackage} + resume_stamp post-mcompressdoc_${subpackage} done else - mcompressdocs ${BINDIR} + run_resume post-mcompressdoc || mcompressdocs ${BINDIR} + resume_stamp post-mcompressdoc fi fi @@ -1544,11 +1619,13 @@ for subpackage in ${SPLIT_PACKAGES} do echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives for '${subpackage}' ...${COLDEFAULT}" - mstriplibtoolarchive ${BINDIR}_${subpackage} + run_resume post-mstriplibtoolarchive_${subpackage} || mstriplibtoolarchive ${BINDIR}_${subpackage} + resume_stamp post-mstriplibtoolarchive_${subpackage} done else - echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives ...${COLDEFAULT}" - mstriplibtoolarchive ${BINDIR} + echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives ...${COLDEFAULT}" + run_resume post-mstriplibtoolarchive || mstriplibtoolarchive ${BINDIR} + resume_stamp post-mstriplibtoolarchive fi fi fi @@ -1564,11 +1641,13 @@ for subpackage in ${SPLIT_PACKAGES} do echo -e "${COLBLUE}===${COLGREEN} purging all purge targets in '${subpackage}' ...${COLDEFAULT}" - mpurgetargets ${BINDIR}_${subpackage} + run_resume post-mpurgetargets_${subpackage} || mpurgetargets ${BINDIR}_${subpackage} + resume_stamp post-mpurgetargets_${subpackage} done else - echo -e "${COLBLUE}===${COLGREEN} purging all purge targets ...${COLDEFAULT}" - mpurgetargets ${BINDIR} + echo -e "${COLBLUE}===${COLGREEN} purging all purge targets ...${COLDEFAULT}" + run_resume post-mpurgetargets || mpurgetargets ${BINDIR} + resume_stamp post-mpurgetargets fi fi fi @@ -1586,19 +1665,25 @@ for subpackage in ${SPLIT_PACKAGES} do echo -e "${COLBLUE}===${COLGREEN} stripping binaries for '${subpackage}' ...${COLDEFAULT}" - mstripbins ${BINDIR}_${subpackage} + run_resume post-mstripbins_${subpackage} || mstripbins ${BINDIR}_${subpackage} + resume_stamp post-mstripbins_${subpackage} echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries for '${subpackage}' ...${COLDEFAULT}" - mstriplibs ${BINDIR}_${subpackage} + run_resume post-mstriplibs_${subpackage} || mstriplibs ${BINDIR}_${subpackage} + resume_stamp post-mstriplibs_${subpackage} echo -e "${COLBLUE}===${COLGREEN} stripping static libraries for '${subpackage}' ...${COLDEFAULT}" - mstripstatic ${BINDIR}_${subpackage} + run_resume post-mstripstatic_${subpackage} || mstripstatic ${BINDIR}_${subpackage} + resume_stamp post-mstripstatic_${subpackage} done else echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}" - mstripbins ${BINDIR} + run_resume post-mstripbins || mstripbins ${BINDIR} + resume_stamp post-mstripbins echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries ...${COLDEFAULT}" - mstriplibs ${BINDIR} + run_resume post-mstriplibs || mstriplibs ${BINDIR} + resume_stamp post-mstriplibs echo -e "${COLBLUE}===${COLGREEN} stripping static libraries ...${COLDEFAULT}" - mstripstatic ${BINDIR} + run_resume post-mstripstatic || mstripstatic ${BINDIR} + resume_stamp post-mstripstatic fi fi @@ -1615,21 +1700,24 @@ if typeset -f ${target}_pkgbuild > /dev/null then # run it - ${target}_pkgbuild + run_resume post-${target}_pkgbuild || ${target}_pkgbuild + resume_stamp post-${target}_pkgbuild fi # now create the target package - ${MLIBDIR}/pkgbuild_dir.sh \ + run_resume post-pkg_builddir_${target} || ${MLIBDIR}/pkgbuild_dir.sh \ "${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD}" \ ${BINDIR} || die "target: ${target} package-build failed" + resume_stamp post-pkg_builddir_${target} # build pkg-md5-sum if requested - generate_package_md5sum \ + run_resume post-md5sum_${target} || generate_package_md5sum \ --pcat "${PCATEGORIE}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" \ --target "${target}" + resume_stamp post-md5sum_${target} echo -e "${COLGREEN}\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" done @@ -1651,20 +1739,23 @@ if typeset -f ${PNAME}_pkgbuild > /dev/null then # run it - ${PNAME}_pkgbuild + run_resume post-${PNAME}_pkgbuild || ${PNAME}_pkgbuild + resume_stamp post-${PNAME}_pkgbuild fi # now create the target package - ${MLIBDIR}/pkgbuild_dir.sh \ + run_resume post-pkg_builddir_${PNAME} || ${MLIBDIR}/pkgbuild_dir.sh \ "${PNAME}-${PVER}-${ARCH}-${PBUILD}" \ "${BINDIR}_${PNAME}" || die "split_package: ${PNAME} package-build failed" + resume_stamp post-pkg_builddir_${PNAME} # build pkg-md5-sum if requested - generate_package_md5sum \ + run_resume post-md5sum_${PNAME} || generate_package_md5sum \ --pcat "${PCATEGORIE}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" + resume_stamp post-md5sum_${PNAME} echo -e "${COLGREEN}\nPackage ${PNAME}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" @@ -1675,21 +1766,27 @@ split_unset_variables else - ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed" + 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 - generate_package_md5sum \ + run_resume post-md5sum || generate_package_md5sum \ --pcat "${PCATEGORIE}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" + resume_stamp post-md5sum echo -e "${COLGREEN}\nPackage ${PKGNAME} successfully builded.\n${COLDEFAULT}" fi # build src-pkg-tarball if requested - mqueryfeature "srcpkg" && source_pkg_build ${SMAGENAME} + if mqueryfeature "srcpkgbuild" + then + run_resume post-srcpkgbuild || source_pkg_build ${SMAGENAME} + resume_stamp post-srcpkgbuild + fi fi if mqueryfeature "buildlog"