summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/package.bbclass5
-rw-r--r--meta/lib/oe/package.py60
2 files changed, 44 insertions, 21 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index d2fa6175e6..2fe30dac0c 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1453,7 +1453,7 @@ if [ x"$D" = "x" ]; then
1453fi 1453fi
1454} 1454}
1455 1455
1456RPMDEPS = "${STAGING_LIBDIR_NATIVE}/rpm/rpmdeps --rcfile ${STAGING_LIBDIR_NATIVE}/rpm/rpmrc --macros ${STAGING_LIBDIR_NATIVE}/rpm/macros --define '_rpmconfigdir ${STAGING_LIBDIR_NATIVE}/rpm/'" 1456RPMDEPS = "${STAGING_LIBDIR_NATIVE}/rpm/rpmdeps --alldeps"
1457 1457
1458# Collect perfile run-time dependency metadata 1458# Collect perfile run-time dependency metadata
1459# Output: 1459# Output:
@@ -1470,7 +1470,6 @@ python package_do_filedeps() {
1470 pkgdest = d.getVar('PKGDEST') 1470 pkgdest = d.getVar('PKGDEST')
1471 packages = d.getVar('PACKAGES') 1471 packages = d.getVar('PACKAGES')
1472 rpmdeps = d.getVar('RPMDEPS') 1472 rpmdeps = d.getVar('RPMDEPS')
1473 magic = d.expand("${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc")
1474 1473
1475 def chunks(files, n): 1474 def chunks(files, n):
1476 return [files[i:i+n] for i in range(0, len(files), n)] 1475 return [files[i:i+n] for i in range(0, len(files), n)]
@@ -1482,7 +1481,7 @@ python package_do_filedeps() {
1482 if pkg.endswith('-dbg') or pkg.endswith('-doc') or pkg.find('-locale-') != -1 or pkg.find('-localedata-') != -1 or pkg.find('-gconv-') != -1 or pkg.find('-charmap-') != -1 or pkg.startswith('kernel-module-') or pkg.endswith('-src'): 1481 if pkg.endswith('-dbg') or pkg.endswith('-doc') or pkg.find('-locale-') != -1 or pkg.find('-localedata-') != -1 or pkg.find('-gconv-') != -1 or pkg.find('-charmap-') != -1 or pkg.startswith('kernel-module-') or pkg.endswith('-src'):
1483 continue 1482 continue
1484 for files in chunks(pkgfiles[pkg], 100): 1483 for files in chunks(pkgfiles[pkg], 100):
1485 pkglist.append((pkg, files, rpmdeps, pkgdest, magic)) 1484 pkglist.append((pkg, files, rpmdeps, pkgdest))
1486 1485
1487 processed = oe.utils.multiprocess_exec( pkglist, oe.package.filedeprunner) 1486 processed = oe.utils.multiprocess_exec( pkglist, oe.package.filedeprunner)
1488 1487
diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py
index 43748b277c..a79c668eaf 100644
--- a/meta/lib/oe/package.py
+++ b/meta/lib/oe/package.py
@@ -162,44 +162,68 @@ def file_translate(file):
162def filedeprunner(arg): 162def filedeprunner(arg):
163 import re, subprocess, shlex 163 import re, subprocess, shlex
164 164
165 (pkg, pkgfiles, rpmdeps, pkgdest, magic) = arg 165 (pkg, pkgfiles, rpmdeps, pkgdest) = arg
166 provides = {} 166 provides = {}
167 requires = {} 167 requires = {}
168 168
169 r = re.compile(r'[<>=]+ +[^ ]*') 169 file_re = re.compile(r'\s+\d+\s(.*)')
170 dep_re = re.compile(r'\s+(\S)\s+(.*)')
171 r = re.compile(r'[<>=]+\s+\S*')
170 172
171 def process_deps(pipe, pkg, pkgdest, provides, requires): 173 def process_deps(pipe, pkg, pkgdest, provides, requires):
174 file = None
172 for line in pipe: 175 for line in pipe:
173 f = line.decode("utf-8").split(" ", 1)[0].strip() 176 line = line.decode("utf-8")
174 line = line.decode("utf-8").split(" ", 1)[1].strip()
175 177
176 if line.startswith("Requires:"): 178 m = file_re.match(line)
179 if m:
180 file = m.group(1)
181 file = file.replace(pkgdest + "/" + pkg, "")
182 file = file_translate(file)
183 continue
184
185 m = dep_re.match(line)
186 if not m or not file:
187 continue
188
189 type, dep = m.groups()
190
191 if type == 'R':
177 i = requires 192 i = requires
178 elif line.startswith("Provides:"): 193 elif type == 'P':
179 i = provides 194 i = provides
180 else: 195 else:
181 continue 196 continue
182 197
183 file = f.replace(pkgdest + "/" + pkg, "") 198 if dep.startswith("python("):
184 file = file_translate(file) 199 continue
185 value = line.split(":", 1)[1].strip()
186 value = r.sub(r'(\g<0>)', value)
187 200
188 if value.startswith("rpmlib("): 201 # Ignore all perl(VMS::...) and perl(Mac::...) dependencies. These
202 # are typically used conditionally from the Perl code, but are
203 # generated as unconditional dependencies.
204 if dep.startswith('perl(VMS::') or dep.startswith('perl(Mac::'):
189 continue 205 continue
190 if value == "python": 206
207 # Ignore perl dependencies on .pl files.
208 if dep.startswith('perl(') and dep.endswith('.pl)'):
191 continue 209 continue
210
211 # Remove perl versions and perl module versions since they typically
212 # do not make sense when used as package versions.
213 if dep.startswith('perl') and r.search(dep):
214 dep = dep.split()[0]
215
216 # Put parentheses around any version specifications.
217 dep = r.sub(r'(\g<0>)',dep)
218
192 if file not in i: 219 if file not in i:
193 i[file] = [] 220 i[file] = []
194 i[file].append(value) 221 i[file].append(dep)
195 222
196 return provides, requires 223 return provides, requires
197 224
198 env = os.environ.copy()
199 env["MAGIC"] = magic
200
201 try: 225 try:
202 dep_popen = subprocess.Popen(shlex.split(rpmdeps) + pkgfiles, stdout=subprocess.PIPE, env=env) 226 dep_popen = subprocess.Popen(shlex.split(rpmdeps) + pkgfiles, stdout=subprocess.PIPE)
203 provides, requires = process_deps(dep_popen.stdout, pkg, pkgdest, provides, requires) 227 provides, requires = process_deps(dep_popen.stdout, pkg, pkgdest, provides, requires)
204 except OSError as e: 228 except OSError as e:
205 bb.error("rpmdeps: '%s' command failed, '%s'" % (shlex.split(rpmdeps) + pkgfiles, e)) 229 bb.error("rpmdeps: '%s' command failed, '%s'" % (shlex.split(rpmdeps) + pkgfiles, e))