Remove ROOT tricks of adding EPREFIX in ebuilds and eclasses, it is
authorFabian Groffen <grobian@gentoo.org>
Wed, 18 Oct 2006 19:37:33 +0000 (19:37 -0000)
committerFabian Groffen <grobian@gentoo.org>
Wed, 18 Oct 2006 19:37:33 +0000 (19:37 -0000)
dirty and causes trouble.  Instead, introduced PROOT which is
$ROOT/$EPREFIX as easy convenience.

svn path=/main/branches/prefix/; revision=4755

bin/emerge
bin/eprefixify
pym/portage.py

index 9d18770c0b7eba0b47b097da3311093127d0a610..5856b6a78c071639e3d548d005d1296814fd6db3 100755 (executable)
@@ -2296,11 +2296,6 @@ class MergeTask(object):
                        pkgsettings.backup_changes("EMERGE_FROM")
                        pkgsettings.reset()
 
-                       # because portage modifies ROOT (adds EPREFIX) we have to
-                       # reset ROOT to what it was after each invocation of portage
-                       # code
-                       origroot = pkgsettings["ROOT"]
-
                        #buildsyspkg: Check if we need to _force_ binary package creation
                        issyspkg = ("buildsyspkg" in myfeat) \
                                        and x[0] != "blocks" \
@@ -2316,13 +2311,11 @@ class MergeTask(object):
                                                        pkgsettings, self.edebug,
                                                        "--pretend" in self.myopts, fetchonly=1,
                                                        fetchall=1, mydbapi=portdb, tree="porttree")
-                                               pkgsettings["ROOT"] = origroot
                                        else:
                                                retval = portage.doebuild(y, "fetch", myroot,
                                                        pkgsettings, self.edebug,
                                                        "--pretend" in self.myopts, fetchonly=1,
                                                        mydbapi=portdb, tree="porttree")
-                                               pkgsettings["ROOT"] = origroot
                                        if (retval is None) or retval:
                                                print
                                                print "!!! Fetch for",y,"failed, continuing..."
@@ -2332,7 +2325,6 @@ class MergeTask(object):
 
                                portage.doebuild_environment(y, "setup", myroot,
                                        pkgsettings, self.edebug, 1, portdb)
-                               pkgsettings["ROOT"] = origroot
                                catdir = os.path.dirname(pkgsettings["PORTAGE_BUILDDIR"])
                                portage_util.ensure_dirs(os.path.dirname(catdir),
                                        uid=portage.portage_uid, gid=portage.portage_gid,
@@ -2373,7 +2365,6 @@ class MergeTask(object):
                                                retval = portage.doebuild(y, "package", myroot,
                                                        pkgsettings, self.edebug, mydbapi=portdb,
                                                        tree="porttree")
-                                               pkgsettings["ROOT"] = origroot
                                                if retval != os.EX_OK:
                                                        return retval
                                                if "--buildpkgonly" not in self.myopts:
@@ -2392,14 +2383,12 @@ class MergeTask(object):
                                                                myebuild=pkgsettings["EBUILD"],
                                                                mytree="porttree", mydbapi=portdb,
                                                                vartree=vartree, prev_mtimes=ldpath_mtimes)
-                                                       pkgsettings["ROOT"] = origroot
                                                        if retval != os.EX_OK:
                                                                return retval
                                                elif "noclean" not in pkgsettings.features:
                                                        portage.doebuild(y, "clean", myroot,
                                                                pkgsettings, self.edebug, mydbapi=portdb,
                                                                tree="porttree")
-                                                       pkgsettings["ROOT"] = origroot
                                        else:
                                                msg = " === (%s of %s) Compiling/Merging (%s::%s)" % \
                                                        (mergecount, len(mymergelist), pkg_key, y)
@@ -2410,7 +2399,6 @@ class MergeTask(object):
                                                        pkgsettings, self.edebug, vartree=vartree,
                                                        mydbapi=portdb, tree="porttree",
                                                        prev_mtimes=ldpath_mtimes)
-                                               pkgsettings["ROOT"] = origroot
                                                if retval != os.EX_OK:
                                                        return retval
                                finally:
@@ -2454,7 +2442,6 @@ class MergeTask(object):
                                        mydbapi=bindb,
                                        vartree=self.trees[myroot]["vartree"],
                                        prev_mtimes=ldpath_mtimes)
-                               pkgsettings["ROOT"] = origroot
                                if retval is None:
                                        sys.exit(1)
                                #need to check for errors
@@ -2488,7 +2475,6 @@ class MergeTask(object):
                                                emergelog(xterm_titles, " >>> AUTOCLEAN: " + xsplit[0])
                                                retval = unmerge(pkgsettings, self.myopts, vartree,
                                                        "clean", [xsplit[0]], ldpath_mtimes)
-                                               pkgsettings["ROOT"] = origroot
                                                if not retval:
                                                        emergelog(xterm_titles,
                                                                " --- AUTOCLEAN: Nothing unmerged.")
index 44b03d9986e19793c1937da27a81800f54be890f..cacc9970056140bd1ddba13b036cde3d73876911 100755 (executable)
@@ -25,7 +25,7 @@ ret=0
 einfo "Adjusting to prefix ..."
 for x in "$@" ; do
        if [[ -e ${x} ]] ; then
-               ebegin ${x##*/}
+               ebegin "  ${x##*/}"
                sed -i -e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}|g" "${x}"
                r=$?
                eend $r
index 21b2b444273672f7fde2de051f664aa538522e96..a511ea279b68478091078c8aa9337ee10255aceb 100644 (file)
@@ -714,15 +714,13 @@ def env_update(makelinks=1, target_root=None, prev_mtimes=None, contents=None):
                        # an older package installed ON TOP of a newer version will cause ldconfig
                        # to overwrite the symlinks we just made. -X means no links. After 'clean'
                        # we can safely create links.
-                       writemsg(">>> Regenerating %s/etc/ld.so.cache...\n" %
-                                       target_root+portage_const.EPREFIX)
+                       writemsg(">>> Regenerating %s/etc/ld.so.cache...\n" % target_root+portage_const.EPREFIX)
                        if makelinks:
                                commands.getstatusoutput("cd / ; "+portage_const.EPREFIX+"/sbin/ldconfig -r '%s'" % target_root)
                        else:
                                commands.getstatusoutput("cd / ; "+portage_const.EPREFIX+"/sbin/ldconfig -X -r '%s'" % target_root)
                elif ostype in ("FreeBSD","DragonFly"):
-                       writemsg(">>> Regenerating %s/var/run/ld-elf.so.hints...\n" %
-                                       target_root+portage_const.EPREFIX)
+                       writemsg(">>> Regenerating %svar/run/ld-elf.so.hints...\n" % target_root+portage_const.EPREFIX+os.sep)
                        commands.getstatusoutput(
                                "cd / ; "+portage_const.EPREFIX+"/sbin/ldconfig -elf -i -f '%s/var/run/ld-elf.so.hints' '%s/etc/ld.so.conf'" % \
                                (target_root+portage_const.EPREFIX, target_root+portage_const.EPREFIX))
@@ -2594,14 +2592,8 @@ def doebuild_environment(myebuild, mydo, myroot, mysettings, debug, use_cache, m
                mysettings["PORTAGE_DEBUG"] = "1"
 
        mysettings["EPREFIX"]  = portage_const.EPREFIX.rstrip(os.sep)
-       # In prefix we add prefix to root, such that many eclasses and
-       # ebuilds "just work" in a prefixed manner.  Beware of this.  At the
-       # bottom of this file we compensate the ROOT variable when portage
-       # is being called from ebuilds or eclasses (e.g. portageq) to avoid
-       # a double prefix.  In other words, inside portage ROOT should be
-       # ROOT, outside portage (in ebuilds and eclasses) ROOT is ROOT +
-       # EPREFIX.
-       mysettings["ROOT"]     = normalize_path(myroot + portage_const.EPREFIX + os.sep)
+       mysettings["ROOT"]     = myroot
+       mysettings["PROOT"]    = normalize_path(myroot + mysettings["EPREFIX"]) + os.sep
        mysettings["STARTDIR"] = getcwd()
 
        mysettings["EBUILD"]   = ebuild_path
@@ -2618,6 +2610,7 @@ def doebuild_environment(myebuild, mydo, myroot, mysettings, debug, use_cache, m
        mysettings["PN"] = mysplit[0]
        mysettings["PV"] = mysplit[1]
        mysettings["PR"] = mysplit[2]
+
        if portage_util.noiselimit < 0:
                mysettings["PORTAGE_QUIET"] = "1"
 
@@ -2662,10 +2655,8 @@ def doebuild_environment(myebuild, mydo, myroot, mysettings, debug, use_cache, m
 
        mysettings["HOME"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "homedir")
        mysettings["WORKDIR"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "work")
-       mysettings["EDEST"] = normalize_path(
-                       os.path.join(mysettings["PORTAGE_BUILDDIR"], "image") + os.sep)
-       mysettings["D"] = normalize_path(
-                       os.path.join(mysettings["PORTAGE_BUILDDIR"], "image" + mysettings["EPREFIX"]) + os.sep)
+       mysettings["EDEST"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "image") + os.sep
+       mysettings["D"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "image" + mysettings["EPREFIX"]) + os.sep
        mysettings["T"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "temp")
 
        mysettings["PORTAGE_BASHRC"] = os.path.join(
@@ -6201,7 +6192,6 @@ class dblink:
                # secondhand = list of symlinks that have been skipped due to
                #              their target not existing (will merge later),
 
-               origroot = destroot
                destroot = normalize_path(destroot + portage_const.EPREFIX)
 
                if not os.path.isdir(srcroot):
@@ -6245,12 +6235,8 @@ class dblink:
                        for v in otherversions:
                                # only allow versions with same slot to overwrite files
                                if myslot == self.vartree.dbapi.aux_get("/".join((self.cat, v)), ["SLOT"])[0]:
-                                       # dblink needs the original destroot, as it prefixes
-                                       # the entries from CONTENTS in vdb with root.  So to
-                                       # avoid a double prefix there, we don't need a
-                                       # prefixed root.
                                        mypkglist.append(
-                                               dblink(self.cat, v, origroot, self.settings,
+                                               dblink(self.cat, v, destroot, self.settings,
                                                        vartree=self.vartree))
 
                        print green("*")+" checking "+str(len(myfilelist))+" files for package collisions"
@@ -6466,7 +6452,7 @@ class dblink:
 
        def mergeme(self,srcroot,destroot,outfile,secondhand,stufftomerge,cfgfiledict,thismtime):
                from os.path import sep, join
-               prefix = normalize_path(portage_const.EPREFIX)
+               prefix = normalize_path(portage_const.EPREFIX) + sep
                srcroot = normalize_path(srcroot).rstrip(sep) + sep
                destroot = normalize_path(destroot).rstrip(sep) + sep
                # this is supposed to merge a list of files.  There will be 2 forms of argument passing.
@@ -7186,8 +7172,7 @@ def init_legacy_globals():
 
        kwargs = {}
        for k, envvar in (("config_root", "PORTAGE_CONFIGROOT"), ("target_root", "ROOT")):
-               kwargs[k] = os.path.join(
-                               os.environ.get(envvar, "/"))
+               kwargs[k] = os.environ.get(envvar, "/")
 
        db = create_trees(**kwargs)
 
@@ -7241,13 +7226,3 @@ dircache={}
 # ============================================================================
 # ============================================================================
 
-if os.environ.has_key("ROOT"):
-       root = normalize_path(os.environ["ROOT"]).rstrip(os.sep) + os.sep
-       # strip off prefix from the tail of the string, this happens when
-       # portage is called from within ebuilds or eclasses
-       prefix = portage_const.EPREFIX.rstrip(os.sep) + os.sep
-       if root.endswith(prefix):
-               root = root[0:-len(prefix)] + os.sep
-               os.environ["ROOT"] = root
-else:
-       root = "/"