--- trunk/mage/usr/lib/mage/smage2.sh 2012/01/09 20:11:08 1616 +++ trunk/mage/usr/lib/mage/smage2.sh 2012/01/09 20:13:34 1617 @@ -1143,6 +1143,24 @@ 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 @@ -1363,6 +1381,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})" ] && @@ -1424,35 +1447,49 @@ # 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 + + # 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 @@ -1460,24 +1497,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} ]] @@ -1501,9 +1540,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 @@ -1511,9 +1551,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 @@ -1532,10 +1573,12 @@ then for subpackage in ${SPLIT_PACKAGES} do - mcompressdocs ${BINDIR}_${subpackage} + run_resume mcompressdoc_${subpackage} || mcompressdocs ${BINDIR}_${subpackage} + resume_stamp mcompressdoc_${subpackage} done else - mcompressdocs ${BINDIR} + run_resume mcompressdoc || mcompressdocs ${BINDIR} + resume_stamp mcompressdoc fi fi @@ -1550,11 +1593,13 @@ for subpackage in ${SPLIT_PACKAGES} do echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives for '${subpackage}' ...${COLDEFAULT}" - mstriplibtoolarchive ${BINDIR}_${subpackage} + run_resume mstriplibtoolarchive_${subpackage} || mstriplibtoolarchive ${BINDIR}_${subpackage} + resume_stamp mstriplibtoolarchive_${subpackage} done else - echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives ...${COLDEFAULT}" - mstriplibtoolarchive ${BINDIR} + echo -e "${COLBLUE}===${COLGREEN} stripping libtool archives ...${COLDEFAULT}" + run_resume mstriplibtoolarchive || mstriplibtoolarchive ${BINDIR} + resume_stamp mstriplibtoolarchive fi fi fi @@ -1570,11 +1615,13 @@ for subpackage in ${SPLIT_PACKAGES} do echo -e "${COLBLUE}===${COLGREEN} purging all purge targets in '${subpackage}' ...${COLDEFAULT}" - mpurgetargets ${BINDIR}_${subpackage} + run_resume mpurgetargets_${subpackage} || mpurgetargets ${BINDIR}_${subpackage} + resume_stamp 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 mpurgetargets || mpurgetargets ${BINDIR} + resume_stamp mpurgetargets fi fi fi @@ -1592,19 +1639,25 @@ for subpackage in ${SPLIT_PACKAGES} do echo -e "${COLBLUE}===${COLGREEN} stripping binaries for '${subpackage}' ...${COLDEFAULT}" - mstripbins ${BINDIR}_${subpackage} + run_resume mstripbins_${subpackage} || mstripbins ${BINDIR}_${subpackage} + resume_stamp mstripbins_${subpackage} echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries for '${subpackage}' ...${COLDEFAULT}" - mstriplibs ${BINDIR}_${subpackage} + run_resume mstriplibs_${subpackage} || mstriplibs ${BINDIR}_${subpackage} + resume_stamp mstriplibs_${subpackage} echo -e "${COLBLUE}===${COLGREEN} stripping static libraries for '${subpackage}' ...${COLDEFAULT}" - mstripstatic ${BINDIR}_${subpackage} + run_resume mstripstatic_${subpackage} || mstripstatic ${BINDIR}_${subpackage} + resume_stamp mstripstatic_${subpackage} done else echo -e "${COLBLUE}===${COLGREEN} stripping binaries ...${COLDEFAULT}" - mstripbins ${BINDIR} + run_resume mstripbins || mstripbins ${BINDIR} + resume_stamp mstripbins echo -e "${COLBLUE}===${COLGREEN} stripping dynamic libraries ...${COLDEFAULT}" - mstriplibs ${BINDIR} + run_resume mstriplibs || mstriplibs ${BINDIR} + resume_stamp mstriplibs echo -e "${COLBLUE}===${COLGREEN} stripping static libraries ...${COLDEFAULT}" - mstripstatic ${BINDIR} + run_resume mstripstatic || mstripstatic ${BINDIR} + resume_stamp mstripstatic fi fi @@ -1621,21 +1674,24 @@ if typeset -f ${target}_pkgbuild > /dev/null then # run it - ${target}_pkgbuild + run_resume ${target}_pkgbuild || ${target}_pkgbuild + resume_stamp ${target}_pkgbuild fi # now create the target package - ${MLIBDIR}/pkgbuild_dir.sh \ + 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 - generate_package_md5sum \ + run_resume md5sum_${target} || generate_package_md5sum \ --pcat "${PCATEGORIE}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" \ --target "${target}" + resume_stamp md5sum_${target} echo -e "${COLGREEN}\nPackage ${PNAME}-${target}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" done @@ -1657,20 +1713,23 @@ if typeset -f ${PNAME}_pkgbuild > /dev/null then # run it - ${PNAME}_pkgbuild + run_resume ${PNAME}_pkgbuild || ${PNAME}_pkgbuild + resume_stamp ${PNAME}_pkgbuild fi # now create the target package - ${MLIBDIR}/pkgbuild_dir.sh \ + run_resume pkg_builddir_${PNAME} || ${MLIBDIR}/pkgbuild_dir.sh \ "${PNAME}-${PVER}-${ARCH}-${PBUILD}" \ "${BINDIR}_${PNAME}" || die "split_package: ${PNAME} package-build failed" + resume_stamp pkg_builddir_${PNAME} # build pkg-md5-sum if requested - generate_package_md5sum \ + run_resume md5sum_${PNAME} || generate_package_md5sum \ --pcat "${PCATEGORIE}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" + resume_stamp md5sum_${PNAME} echo -e "${COLGREEN}\nPackage ${PNAME}-${PVER}-${ARCH}-${PBUILD} successfully builded.\n${COLDEFAULT}" @@ -1681,21 +1740,27 @@ split_unset_variables else - ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed" + run_resume pkg_builddir || ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed" + resume_stamp pkg_builddir # build pkg-md5-sum if requested - generate_package_md5sum \ + run_resume md5sum || generate_package_md5sum \ --pcat "${PCATEGORIE}" \ --pname "${PNAME}" \ --pver "${PVER}" \ --pbuild "${PBUILD}" \ --parch "${ARCH}" + resume_stamp 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 "srcpkg" + then + resume_stamp srcpkgbuild || source_pkg_build ${SMAGENAME} + resume_stamp srcpkgbuild + fi fi if mqueryfeature "buildlog"