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