From fbe666d80666790e6f71121e274f44ae92dcb12d Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 23 Mar 2009 02:22:06 +0000 Subject: Make ebuild(1) detect ebuild/eclass changes and automatically source the ebuild atain in this case (even though $T/environment may already exist). This should help avoid confusion by ensuring that the latest changes to the ebuild/eclasses are reflected in the environment. (trunk r13148) svn path=/main/branches/2.1.6/; revision=13165 --- bin/ebuild | 13 ++++++++++++- bin/ebuild.sh | 6 ++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/bin/ebuild b/bin/ebuild index a03f0ec6e..bdf6b9503 100755 --- a/bin/ebuild +++ b/bin/ebuild @@ -195,13 +195,20 @@ if opts.skip_manifest: tmpsettings.backup_changes("EBUILD_SKIP_MANIFEST") portage._doebuild_manifest_exempt_depend += 1 +# If the current metadata is invalid then force the ebuild to be +# sourced again even if $T/environment already exists. +ebuild_changed = False +metadata, st, emtime = \ + portage.portdb._pull_valid_cache(cpv, ebuild, ebuild_portdir) +if metadata is None: + ebuild_changed = True + build_dir_phases = set(["setup", "unpack", "prepare", "configure", "compile", "test", "install", "package", "rpm"]) def stale_env_warning(): if "clean" not in pargs and \ "noauto" not in tmpsettings.features and \ - tmpsettings.get("PORTAGE_QUIET") != "1" and \ build_dir_phases.intersection(pargs): portage.doebuild_environment(ebuild, "setup", portage.root, tmpsettings, debug, 1, portage.portdb) @@ -215,6 +222,10 @@ def stale_env_warning(): for x in msg: portage.writemsg(">>> %s\n" % x) + if ebuild_changed: + open(os.path.join(tmpsettings['PORTAGE_BUILDDIR'], + '.ebuild_changed'), 'w') + from portage.exception import PermissionDenied, \ PortagePackageException, UnsupportedAPIException checked_for_stale_env = False diff --git a/bin/ebuild.sh b/bin/ebuild.sh index d426e15a9..f548a8f05 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -714,7 +714,7 @@ dyn_clean() { fi if [[ $EMERGE_FROM = binary ]] || ! hasq keepwork $FEATURES; then - rm -f "$PORTAGE_BUILDDIR"/.{exit_status,logid,unpacked,prepared} \ + rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,exit_status,logid,unpacked,prepared} \ "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} rm -rf "${PORTAGE_BUILDDIR}/build-info" @@ -1865,7 +1865,7 @@ fi if ! hasq "$EBUILD_PHASE" clean cleanrm && \ ( hasq ${EBUILD_PHASE} depend || \ - [ ! -f "${T}"/environment ] || \ + [[ ! -f $T/environment || -f $PORTAGE_BUILDDIR/.ebuild_changed ]] || \ hasq noauto ${FEATURES} ) ; then # The bashrcs get an opportunity here to set aliases that will be expanded @@ -1881,6 +1881,8 @@ if ! hasq "$EBUILD_PHASE" clean cleanrm && \ if [ "${EBUILD_PHASE}" != "depend" ] ; then RESTRICT=${PORTAGE_RESTRICT} + [[ -e $PORTAGE_BUILDDIR/.ebuild_changed ]] && \ + rm "$PORTAGE_BUILDDIR/.ebuild_changed" fi # This next line is not the same as export RDEPEND=${RDEPEND:-${DEPEND}} -- cgit v1.2.3-1-g7c22