diff options
-rw-r--r-- | meta/classes/package.bbclass | 5 | ||||
-rw-r--r-- | meta/lib/oe/package.py | 47 |
2 files changed, 29 insertions, 23 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index cc466bd1b2..65cf5fac5f 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
@@ -1434,7 +1434,7 @@ if [ x"$D" = "x" ]; then | |||
1434 | fi | 1434 | fi |
1435 | } | 1435 | } |
1436 | 1436 | ||
1437 | RPMDEPS = "${STAGING_LIBDIR_NATIVE}/rpm/rpmdeps --rcfile ${STAGING_LIBDIR_NATIVE}/rpm/rpmrc --macros ${STAGING_LIBDIR_NATIVE}/rpm/macros --define '_rpmconfigdir ${STAGING_LIBDIR_NATIVE}/rpm/'" | 1437 | RPMDEPS = "${STAGING_LIBDIR_NATIVE}/rpm/rpmdeps --alldeps" |
1438 | 1438 | ||
1439 | # Collect perfile run-time dependency metadata | 1439 | # Collect perfile run-time dependency metadata |
1440 | # Output: | 1440 | # Output: |
@@ -1451,7 +1451,6 @@ python package_do_filedeps() { | |||
1451 | pkgdest = d.getVar('PKGDEST') | 1451 | pkgdest = d.getVar('PKGDEST') |
1452 | packages = d.getVar('PACKAGES') | 1452 | packages = d.getVar('PACKAGES') |
1453 | rpmdeps = d.getVar('RPMDEPS') | 1453 | rpmdeps = d.getVar('RPMDEPS') |
1454 | magic = d.expand("${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc") | ||
1455 | 1454 | ||
1456 | def chunks(files, n): | 1455 | def chunks(files, n): |
1457 | return [files[i:i+n] for i in range(0, len(files), n)] | 1456 | return [files[i:i+n] for i in range(0, len(files), n)] |
@@ -1463,7 +1462,7 @@ python package_do_filedeps() { | |||
1463 | 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-'): | 1462 | 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-'): |
1464 | continue | 1463 | continue |
1465 | for files in chunks(pkgfiles[pkg], 100): | 1464 | for files in chunks(pkgfiles[pkg], 100): |
1466 | pkglist.append((pkg, files, rpmdeps, pkgdest, magic)) | 1465 | pkglist.append((pkg, files, rpmdeps, pkgdest)) |
1467 | 1466 | ||
1468 | processed = oe.utils.multiprocess_exec( pkglist, oe.package.filedeprunner) | 1467 | processed = oe.utils.multiprocess_exec( pkglist, oe.package.filedeprunner) |
1469 | 1468 | ||
diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py index 52c5f16cf8..811d27964b 100644 --- a/meta/lib/oe/package.py +++ b/meta/lib/oe/package.py | |||
@@ -57,44 +57,51 @@ def file_translate(file): | |||
57 | def filedeprunner(arg): | 57 | def filedeprunner(arg): |
58 | import re, subprocess, shlex | 58 | import re, subprocess, shlex |
59 | 59 | ||
60 | (pkg, pkgfiles, rpmdeps, pkgdest, magic) = arg | 60 | (pkg, pkgfiles, rpmdeps, pkgdest) = arg |
61 | provides = {} | 61 | provides = {} |
62 | requires = {} | 62 | requires = {} |
63 | 63 | ||
64 | r = re.compile(r'[<>=]+ +[^ ]*') | 64 | file_re = re.compile(r'\s+\d+\s(.*)') |
65 | dep_re = re.compile(r'\s+(\S)\s+(.*)') | ||
66 | r = re.compile(r'[<>=]+\s+\S*') | ||
65 | 67 | ||
66 | def process_deps(pipe, pkg, pkgdest, provides, requires): | 68 | def process_deps(pipe, pkg, pkgdest, provides, requires): |
69 | file = None | ||
67 | for line in pipe: | 70 | for line in pipe: |
68 | f = line.decode("utf-8").split(" ", 1)[0].strip() | 71 | line = line.decode("utf-8") |
69 | line = line.decode("utf-8").split(" ", 1)[1].strip() | ||
70 | 72 | ||
71 | if line.startswith("Requires:"): | 73 | m = file_re.match(line) |
74 | if m: | ||
75 | file = m.group(1) | ||
76 | file = file.replace(pkgdest + "/" + pkg, "") | ||
77 | file = file_translate(file) | ||
78 | continue | ||
79 | |||
80 | m = dep_re.match(line) | ||
81 | if not m or not file: | ||
82 | continue | ||
83 | |||
84 | type, dep = m.groups() | ||
85 | |||
86 | if type == 'R': | ||
72 | i = requires | 87 | i = requires |
73 | elif line.startswith("Provides:"): | 88 | elif type == 'P': |
74 | i = provides | 89 | i = provides |
75 | else: | 90 | else: |
76 | continue | 91 | continue |
77 | |||
78 | file = f.replace(pkgdest + "/" + pkg, "") | ||
79 | file = file_translate(file) | ||
80 | value = line.split(":", 1)[1].strip() | ||
81 | value = r.sub(r'(\g<0>)', value) | ||
82 | 92 | ||
83 | if value.startswith("rpmlib("): | 93 | if dep.startswith("python("): |
84 | continue | ||
85 | if value == "python": | ||
86 | continue | 94 | continue |
95 | dep = r.sub(r'(\g<0>)',dep) | ||
96 | |||
87 | if file not in i: | 97 | if file not in i: |
88 | i[file] = [] | 98 | i[file] = [] |
89 | i[file].append(value) | 99 | i[file].append(dep) |
90 | 100 | ||
91 | return provides, requires | 101 | return provides, requires |
92 | 102 | ||
93 | env = os.environ.copy() | ||
94 | env["MAGIC"] = magic | ||
95 | |||
96 | try: | 103 | try: |
97 | dep_popen = subprocess.Popen(shlex.split(rpmdeps) + pkgfiles, stdout=subprocess.PIPE, env=env) | 104 | dep_popen = subprocess.Popen(shlex.split(rpmdeps) + pkgfiles, stdout=subprocess.PIPE) |
98 | provides, requires = process_deps(dep_popen.stdout, pkg, pkgdest, provides, requires) | 105 | provides, requires = process_deps(dep_popen.stdout, pkg, pkgdest, provides, requires) |
99 | except OSError as e: | 106 | except OSError as e: |
100 | bb.error("rpmdeps: '%s' command failed, '%s'" % (shlex.split(rpmdeps) + pkgfiles, e)) | 107 | bb.error("rpmdeps: '%s' command failed, '%s'" % (shlex.split(rpmdeps) + pkgfiles, e)) |