sb/pkgconfig: Cache pkgconfig based on a file name not name

- Caching on name falsely assumed checks across different config
  instances in nested build sets as used in vertical stack
  building was valid. This stopped a valid check for a prefix
  seeing if a valid BSP config was present.

Updates #3893
This commit is contained in:
Chris Johns 2020-03-03 11:02:58 +11:00
parent 4295d3d377
commit 96d55ab432

View File

@ -91,6 +91,7 @@ class package(object):
no_dup_flags = ['-I', '-l', '-L'] no_dup_flags = ['-I', '-l', '-L']
dual_opts = ['-D', '-U', '-I', '-l', '-L'] dual_opts = ['-D', '-U', '-I', '-l', '-L']
lib_list_splitter = re.compile('[\s,]+') lib_list_splitter = re.compile('[\s,]+')
loaded_prefixes = None
loaded = {} loaded = {}
@staticmethod @staticmethod
@ -416,15 +417,15 @@ class package(object):
return ok return ok
def load(self, name): def load(self, name):
if name in package.loaded:
package._copy(package.loaded[name], self)
return
self._log('loading: %s' % (name)) self._log('loading: %s' % (name))
if self.name_: if self.name_:
self._clean() self._clean()
self.name_ = name self.name_ = name
file = self._find_package(name) file = self._find_package(name)
if file: if file:
if file in package.loaded:
package._copy(package.loaded[file], self)
return
self._log('load: %s (%s)' % (name, file)) self._log('load: %s (%s)' % (name, file))
if self.src: if self.src:
self.src('==%s%s' % ('=' * 80, os.linesep)) self.src('==%s%s' % ('=' * 80, os.linesep))
@ -474,8 +475,9 @@ class package(object):
if requires: if requires:
for r in package.splitter(requires): for r in package.splitter(requires):
if r[0] not in self.nodes[nt]: if r[0] not in self.nodes[nt]:
if r[0] in package.loaded: file = self._find_package(r[0])
pkg = package.loaded[r[0]] if file in package.loaded:
pkg = package.loaded[file]
else: else:
pkg = package(r[0], self.prefix, self.output) pkg = package(r[0], self.prefix, self.output)
ver = pkg.get('version') ver = pkg.get('version')
@ -486,8 +488,8 @@ class package(object):
self._log('failed: %s (%s %s %s)' % (r[0], ver, r[1], r[2])) self._log('failed: %s (%s %s %s)' % (r[0], ver, r[1], r[2]))
self.nodes['failed'][r[0]] = pkg self.nodes['failed'][r[0]] = pkg
if self.exists(): if self.exists():
self._log('load: exists') self._log('load: exists and loaded; cache as loaded')
package.loaded[name] = self package.loaded[self.file_] = self
def get(self, label, private = True): def get(self, label, private = True):
self._log('get: %s (%s)' % (label, ','.join(self.fields))) self._log('get: %s (%s)' % (label, ','.join(self.fields)))