From fb742f7da315e7fd8605f7f56f1bf8a1f9fd211c Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 9 Jun 2007 00:19:59 +0000 Subject: For bug #152828, run ${CHOST}-ldconfig when ${CBUILD} != ${CHOST}. (trunk r6770) svn path=/main/branches/2.1.2/; revision=6771 --- pym/portage.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'pym') diff --git a/pym/portage.py b/pym/portage.py index dee836a3f..f8b769921 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -538,13 +538,16 @@ def elog_process(cpv, mysettings): #parse /etc/env.d and generate /etc/profile.env -def env_update(makelinks=1, target_root=None, prev_mtimes=None, contents=None): +def env_update(makelinks=1, target_root=None, prev_mtimes=None, contents=None, + env=None): if target_root is None: global root target_root = root if prev_mtimes is None: global mtimedb prev_mtimes = mtimedb["ldpath"] + if env is None: + env = os.environ envd_dir = os.path.join(target_root, "etc", "env.d") portage_util.ensure_dirs(envd_dir, mode=0755) fns = listdir(envd_dir, EmptyOnError=1) @@ -729,8 +732,14 @@ def env_update(makelinks=1, target_root=None, prev_mtimes=None, contents=None): if not libdir_contents_changed: makelinks = False + ldconfig = "/sbin/ldconfig" + if "CHOST" in env and "CBUILD" in env and \ + env["CHOST"] != env["CBUILD"]: + from portage_exec import find_binary + ldconfig = find_binary("%s-ldconfig" % env["CHOST"]) + # Only run ldconfig as needed - if (ld_cache_update or makelinks): + if (ld_cache_update or makelinks) and ldconfig: # ldconfig has very different behaviour between FreeBSD and Linux if ostype=="Linux" or ostype.lower().endswith("gnu"): # We can't update links if we haven't cleaned other versions first, as @@ -739,14 +748,15 @@ def env_update(makelinks=1, target_root=None, prev_mtimes=None, contents=None): # we can safely create links. writemsg(">>> Regenerating %setc/ld.so.cache...\n" % target_root) if makelinks: - commands.getstatusoutput("cd / ; /sbin/ldconfig -r '%s'" % target_root) + os.system("cd / ; %s -r '%s'" % (ldconfig, target_root)) else: - commands.getstatusoutput("cd / ; /sbin/ldconfig -X -r '%s'" % target_root) + os.system("cd / ; %s -X -r '%s'" % (ldconfig, target_root)) elif ostype in ("FreeBSD","DragonFly"): - writemsg(">>> Regenerating %svar/run/ld-elf.so.hints...\n" % target_root) - commands.getstatusoutput( - "cd / ; /sbin/ldconfig -elf -i -f '%svar/run/ld-elf.so.hints' '%setc/ld.so.conf'" % \ - (target_root, target_root)) + writemsg(">>> Regenerating %svar/run/ld-elf.so.hints...\n" % \ + target_root) + os.system(("cd / ; %s -elf -i " + \ + "-f '%svar/run/ld-elf.so.hints' '%setc/ld.so.conf'") % \ + (ldconfig, target_root, target_root)) del specials["LDPATH"] @@ -7072,7 +7082,7 @@ class dblink: del e portage_locks.unlockdir(catdir_lock) env_update(target_root=self.myroot, prev_mtimes=ldpath_mtimes, - contents=contents) + contents=contents, env=self.settings.environ()) return os.EX_OK def _unmerge_pkgfiles(self, pkgfiles, new_contents=None): @@ -7583,7 +7593,7 @@ class dblink: #update environment settings, library paths. DO NOT change symlinks. env_update(makelinks=(not downgrade), target_root=self.settings["ROOT"], prev_mtimes=prev_mtimes, - contents=contents) + contents=contents, env=self.settings.environ()) #dircache may break autoclean because it remembers the -MERGING-pkg file global dircache if dircache.has_key(self.dbcatdir): -- cgit v1.2.3-1-g7c22