diff options
Diffstat (limited to 'meta/lib/oe')
-rw-r--r-- | meta/lib/oe/package.py | 60 |
1 files changed, 42 insertions, 18 deletions
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)) |