ebuild(1): apply package.env earlier
authorZac Medico <zmedico@gentoo.org>
Mon, 28 Feb 2011 18:57:53 +0000 (10:57 -0800)
committerZac Medico <zmedico@gentoo.org>
Mon, 28 Feb 2011 18:57:53 +0000 (10:57 -0800)
This makes it possible to override PORTAGE_TMPDIR.

bin/ebuild

index 2c04200e7842a132a223bc58af751c30a86bfb77..a8296e8ab0c73b586455e2dd3394dbc43d72e158 100755 (executable)
@@ -220,20 +220,36 @@ portage.settings.validate() # generate warning messages if necessary
 tmpsettings = portage.config(clone=portage.settings)
 tmpsettings["PORTAGE_VERBOSE"] = "1"
 tmpsettings.backup_changes("PORTAGE_VERBOSE")
+
+if opts.skip_manifest:
+       tmpsettings["EBUILD_SKIP_MANIFEST"] = "1"
+       tmpsettings.backup_changes("EBUILD_SKIP_MANIFEST")
+
+if opts.skip_manifest or \
+       "digest" in tmpsettings.features or \
+       "digest" in pargs or \
+       "manifest" in pargs:
+       portage._doebuild_manifest_exempt_depend += 1
+
 if "test" in pargs:
        # This variable is a signal to config.regenerate() to
        # indicate that the test phase should be enabled regardless
        # of problems such as masked "test" USE flag.
        tmpsettings["EBUILD_FORCE_TEST"] = "1"
        tmpsettings.backup_changes("EBUILD_FORCE_TEST")
-       tmpsettings.features.add("test")
+       tmpsettings["FEATURES"] = tmpsettings.get("FEATURES", "") + " " + "test"
+       tmpsettings.backup_changes("FEATURES")
 
-tmpsettings.features.discard('fail-clean')
+tmpsettings["FEATURES"] = tmpsettings.get("FEATURES", "") + " " + "-fail-clean"
+tmpsettings.backup_changes("FEATURES")
 
-if opts.skip_manifest:
-       tmpsettings["EBUILD_SKIP_MANIFEST"] = "1"
-       tmpsettings.backup_changes("EBUILD_SKIP_MANIFEST")
-       portage._doebuild_manifest_exempt_depend += 1
+# Apply package.env settings. This allows per-package FEATURES and other
+# variables (possibly PORTAGE_TMPDIR) to be available as soon as possible.
+try:
+       tmpsettings.setcpv(cpv, mydb=portage.db[portage.root][mytree].dbapi)
+except KeyError:
+       # aux_get failure, message should have been shown on stderr.
+       sys.exit(1)
 
 build_dir_phases = set(["setup", "unpack", "prepare", "configure", "compile",
        "test", "install", "package", "rpm", "merge", "qmerge"])