summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/portage.py33
1 files changed, 26 insertions, 7 deletions
diff --git a/pym/portage.py b/pym/portage.py
index 832e49d0f..cd1a78a71 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -536,7 +536,7 @@ 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):
+def env_update(makelinks=1, target_root=None, prev_mtimes=None, contents=None):
if target_root is None:
global root
target_root = root
@@ -672,10 +672,13 @@ def env_update(makelinks=1, target_root=None, prev_mtimes=None):
newprelink.write("-b "+x+"\n")
newprelink.close()
+ mtime_changed = False
+ lib_dirs = set()
for lib_dir in portage_util.unique_array(specials["LDPATH"]+['usr/lib','usr/lib64','usr/lib32','lib','lib64','lib32']):
x = os.path.join(target_root, lib_dir.lstrip(os.sep))
try:
newldpathtime = os.stat(x)[stat.ST_MTIME]
+ lib_dirs.add(normalize_path(os.path.sep + lib_dir))
except OSError, oe:
if oe.errno == errno.ENOENT:
try:
@@ -685,7 +688,6 @@ def env_update(makelinks=1, target_root=None, prev_mtimes=None):
# ignore this path because it doesn't exist
continue
raise
- mtime_changed = False
if x in prev_mtimes:
if prev_mtimes[x] == newldpathtime:
pass
@@ -696,8 +698,22 @@ def env_update(makelinks=1, target_root=None, prev_mtimes=None):
prev_mtimes[x] = newldpathtime
mtime_changed = True
- if mtime_changed:
- ld_cache_update = True
+ if contents is None and mtime_changed:
+ ld_cache_update = True
+
+ if makelinks and \
+ not ld_cache_update and \
+ contents is not None:
+ libdir_contents_changed = False
+ for mypath, mydata in contents.iteritems():
+ if mydata[0] not in ("obj","sym"):
+ continue
+ head, tail = os.path.split(mypath)
+ if head in lib_dirs:
+ libdir_contents_changed = True
+ break
+ if not libdir_contents_changed:
+ makelinks = False
# Only run ldconfig as needed
if (ld_cache_update or makelinks):
@@ -5784,6 +5800,7 @@ class dblink:
"""The caller must ensure that lockdb() and unlockdb() are called
before and after this method."""
+ contents = self.getcontents()
# Now, don't assume that the name of the ebuild is the same as the
# name of the dir; the package may have been moved.
myebuildpath = None
@@ -5858,7 +5875,8 @@ class dblink:
raise
del e
portage_locks.unlockdir(catdir_lock)
- env_update(target_root=self.myroot, prev_mtimes=ldpath_mtimes)
+ env_update(target_root=self.myroot, prev_mtimes=ldpath_mtimes,
+ contents=contents)
def _unmerge_pkgfiles(self, pkgfiles):
@@ -6225,7 +6243,7 @@ class dblink:
self.dbdir = self.dbpkgdir
self.delete()
movefile(self.dbtmpdir, self.dbpkgdir, mysettings=self.settings)
-
+ contents = self.getcontents()
self.unlockdb()
#write out our collection of md5sums
@@ -6257,7 +6275,8 @@ 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)
+ target_root=self.settings["ROOT"], prev_mtimes=prev_mtimes,
+ contents=contents)
#dircache may break autoclean because it remembers the -MERGING-pkg file
global dircache
if dircache.has_key(self.dbcatdir):