Add EPREFIX to ROOT for ebuilds and eclasses, this avoids a lot of
authorFabian Groffen <grobian@gentoo.org>
Mon, 16 Oct 2006 08:53:15 +0000 (08:53 -0000)
committerFabian Groffen <grobian@gentoo.org>
Mon, 16 Oct 2006 08:53:15 +0000 (08:53 -0000)
porting work.  However, one has to take care that it doesn't yield in
double prefixes.  Some misc fixes for prefixes being added or not
slashed.

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

bin/emerge
pym/portage.py

index 03bd2a790a90550a25887202e385f1bd4ab88412..81e9f981fefd893bba97efab6fc3b4edca1fb8d8 100755 (executable)
@@ -2190,6 +2190,11 @@ 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" \
@@ -2205,11 +2210,13 @@ 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..."
@@ -2219,6 +2226,7 @@ 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,
@@ -2258,6 +2266,7 @@ 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:
@@ -2276,12 +2285,14 @@ 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)
@@ -2292,6 +2303,7 @@ 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:
@@ -2335,6 +2347,7 @@ 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
@@ -2368,6 +2381,7 @@ 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.")
@@ -4244,7 +4258,7 @@ def emerge_main():
                emergehelp.help(myaction, myopts, havecolor)
                sys.exit(0)
 
-       if portage.wheelgid == portage.portage_gid and portage.wheelgid > 500:
+       if portage.wheelgid == portage.portage_gid and portage.wheelgid < 500:
                print "emerge: wheel group use is being deprecated. Please update group and passwd to"
                print "        include the portage user as noted above, and then use group portage."
 
index 0c076f26ea05878bdc30171ab1c2266f20daf013..a4995dc445775de9123b45c429dc3fb62b18c2d3 100644 (file)
@@ -723,17 +723,17 @@ 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 %setc/ld.so.cache...\n" %
+                       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 %svar/run/ld-elf.so.hints...\n" %
+                       writemsg(">>> Regenerating %s/var/run/ld-elf.so.hints...\n" %
                                        target_root+portage_const.EPREFIX)
                        commands.getstatusoutput(
-                               "cd / ; "+portage_const.EPREFIX+"/sbin/ldconfig -elf -i -f '%svar/run/ld-elf.so.hints' '%setc/ld.so.conf'" % \
+                               "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))
 
        del specials["LDPATH"]
@@ -2589,7 +2589,14 @@ def doebuild_environment(myebuild, mydo, myroot, mysettings, debug, use_cache, m
                mysettings["PORTAGE_DEBUG"] = "1"
 
        mysettings["EPREFIX"]  = portage_const.EPREFIX.rstrip(os.sep)
-       mysettings["ROOT"]     = myroot
+       # 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["STARTDIR"] = getcwd()
 
        mysettings["EBUILD"]   = ebuild_path
@@ -4502,7 +4509,7 @@ class vardbapi(dbapi):
 
        def counter_tick_core(self,myroot,incrementing=1,mycpv=None):
                "This method will grab the next COUNTER value and record it back to the global file.  Returns new counter value."
-               cpath=myroot+"var/cache/edb/counter"
+               cpath=os.path.join(myroot+portage_const.EPREFIX, "var/cache/edb/counter")
                changed=0
                min_counter = 0
                if mycpv:
@@ -7117,7 +7124,6 @@ dircache={}
 # ============================================================================
 # ============================================================================
 
-# XXX Fix this
 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
@@ -7125,16 +7131,6 @@ if os.environ.has_key("ROOT"):
        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 = os.sep
-
-if root != os.sep:
-       if not os.path.exists(root[:-1]):
-               writemsg("!!! Error: ROOT "+root+" does not exist.  Please correct this.\n")
-               writemsg("!!! Exiting.\n\n")
-               sys.exit(1)
-       elif not os.path.isdir(root[:-1]):
-               writemsg("!!! Error: ROOT "+root[:-1]+" is not a directory. Please correct this.\n")
-               writemsg("!!! Exiting.\n\n")
-               sys.exit(1)
-
+       root = "/"