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" \
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..."
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,
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:
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)
pkgsettings, self.edebug, vartree=vartree,
mydbapi=portdb, tree="porttree",
prev_mtimes=ldpath_mtimes)
+ pkgsettings["ROOT"] = origroot
if retval != os.EX_OK:
return retval
finally:
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
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.")
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."
# 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"]
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
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:
# ============================================================================
# ============================================================================
-# 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
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 = "/"