For bug #152828, run ${CHOST}-ldconfig when ${CBUILD} != ${CHOST}.
authorZac Medico <zmedico@gentoo.org>
Sat, 9 Jun 2007 00:17:22 +0000 (00:17 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 9 Jun 2007 00:17:22 +0000 (00:17 -0000)
svn path=/main/trunk/; revision=6770

pym/portage/__init__.py
pym/portage/dbapi/vartree.py

index 4c6a9ce0d3fb61bae9f19fa0f4cf9c8f7d826edf..8a81cea90be18c2f0881776dc2808de1c316f8e2 100644 (file)
@@ -460,13 +460,16 @@ class digraph:
 
 #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)
@@ -651,8 +654,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.process 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
@@ -661,14 +670,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"]
 
index 09f08528bf44dbc62d4ee8620c2c7328fee5fbc3..7122fcac1324ff3085a787f0826397ee5a9fc167 100644 (file)
@@ -1091,7 +1091,7 @@ class dblink(object):
                                                del e
                                        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):
@@ -1692,7 +1692,7 @@ class dblink(object):
                #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):