From 5200c1387a753e6d6270ad6691890327df40b47a Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Mon, 16 Oct 2006 08:53:15 +0000 Subject: [PATCH] Add EPREFIX to ROOT for ebuilds and eclasses, this avoids a lot of 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 | 16 +++++++++++++++- pym/portage.py | 32 ++++++++++++++------------------ 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/bin/emerge b/bin/emerge index 03bd2a790..81e9f981f 100755 --- a/bin/emerge +++ b/bin/emerge @@ -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." diff --git a/pym/portage.py b/pym/portage.py index 0c076f26e..a4995dc44 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -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 = "/" -- 2.26.2