diff options
-rw-r--r-- | meta/classes/package.bbclass | 5 | ||||
-rw-r--r-- | meta/lib/oe/package.py | 60 |
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 | |||
1453 | fi | 1453 | fi |
1454 | } | 1454 | } |
1455 | 1455 | ||
1456 | RPMDEPS = "${STAGING_LIBDIR_NATIVE}/rpm/rpmdeps --rcfile ${STAGING_LIBDIR_NATIVE}/rpm/rpmrc --macros ${STAGING_LIBDIR_NATIVE}/rpm/macros --define '_rpmconfigdir ${STAGING_LIBDIR_NATIVE}/rpm/'" | 1456 | RPMDEPS = "${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): | |||
162 | def filedeprunner(arg): | 162 | def 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)) |