From 6a68c139c82aad612b83260c88a7f3acbdfd737d Mon Sep 17 00:00:00 2001 From: Daniel Mach Date: Fri, 22 Mar 2013 09:40:15 -0400 Subject: [PATCH] Multilib fix - consider only *.so* libs which are also listed in Provides. --- src/pypungi/multilib.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/pypungi/multilib.py b/src/pypungi/multilib.py index 37800285..85f88803 100755 --- a/src/pypungi/multilib.py +++ b/src/pypungi/multilib.py @@ -20,13 +20,13 @@ import re import fnmatch import pathmatch -#from pypungi import is_package, is_source, is_debug, is_noarch import pypungi LINE_PATTERN_RE = re.compile(r"^\s*(?P[^#]+)(:?\s+(?P#.*))?$") RUNTIME_PATTERN_SPLIT_RE = re.compile(r"^\s*(?P[^\s]+)\s+(?P[^\s]+)(:?\s+(?P#.*))?$") +SONAME_PATTERN_RE = re.compile(r"^(.+\.so\.[a-zA-Z0-9_\.]+).*$") def read_lines(lines): @@ -156,6 +156,13 @@ class RuntimeMultilibMethod(MultilibMethodBase): if self.is_kernel(po): return False + # gather all *.so.* provides from the RPM header + provides = set() + for i in po.provides: + match = SONAME_PATTERN_RE.match(i[0]) + if match is not None: + provides.add(match.group(1)) + for path in po.returnFileEntries() + po.returnFileEntries("ghost"): dirname, filename = path.rsplit("/", 1) dirname = dirname.rstrip("/") @@ -167,7 +174,13 @@ class RuntimeMultilibMethod(MultilibMethodBase): if file_pattern == "-": return True if fnmatch.fnmatch(filename, file_pattern): - return True + if ".so.*" in file_pattern: + if filename in provides: + # return only if the lib is provided in RPM header + # (some libs may be private, hence not exposed in Provides) + return True + else: + return True return False