From 8cdea723f79a923dd9b4fe37011b8b62e48dced4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de> Date: Fri, 3 Feb 2023 15:26:03 +0100 Subject: [PATCH] BrainScaleS: Exclude system paths from build env This should fix problems with finding system-installed headers instead of the spack-provided ones (e.g. googletest). (In some cases sites might inject include paths via compiler settings (or other means)). --- packages/hxtorch/package.py | 29 ++++++++++++---------------- packages/pynn-brainscales/package.py | 18 ++++++++++++----- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py index 26930de5..240e09ee 100644 --- a/packages/hxtorch/package.py +++ b/packages/hxtorch/package.py @@ -61,6 +61,7 @@ class Hxtorch(WafPackage): configuration.""" include = [] + include_exclude_dirs = set(['/usr/include']) for dep in self.spec.traverse(deptype='build'): query = self.spec[dep.name] try: @@ -70,30 +71,24 @@ class Hxtorch(WafPackage): if os.path.exists(d): env.remove_path('SPACK_INCLUDE_DIRS', d) continue - include.extend(query.headers.directories) - print('headers (', dep.name, '):', query.headers.directories, "\n") + assert(isinstance(query.headers.directories, list)) + include_dirs = set(query.headers.directories) + include_dirs -= include_exclude_dirs + print('headers (', dep.name, '):', include_dirs, "\n") + include.extend(list(include_dirs)) except: pass library = [] + library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64']) for dep in self.spec.traverse(deptype=('link', 'run')): query = self.spec[dep.name] - # we probably should skip/remove the entries for the same - # dependencies as above; however, ".libs" relies on the package - # name being the same as the library name (e.g. approx. - # libPACKAGE.so) so we are just moving googletest to the front - if dep.name == 'googletest': - for d in [self.spec['googletest'].prefix.lib64, self.spec['googletest'].prefix.lib]: - if os.path.exists(d): - print('moving to front of SPACK_{LINK,RPATH}_DIRS\n', d) - env.remove_path('SPACK_LINK_DIRS', d) - env.prepend_path('SPACK_LINK_DIRS', d) - env.remove_path('SPACK_RPATH_DIRS', d) - env.prepend_path('SPACK_RPATH_DIRS', d) try: - print('libs (', dep.name, '):', query.libs.directories, "\n") - # extend at front - library = query.libs.directories + library + assert(isinstance(query.libs.directories, list)) + library_dirs = set(query.libs.directories) + library_dirs -= library_exclude_dirs + print('libs (', dep.name, '):', library_dirs, "\n") + library.extend(list(library_dirs)) except: pass diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py index 2f61e734..d90a7e37 100644 --- a/packages/pynn-brainscales/package.py +++ b/packages/pynn-brainscales/package.py @@ -60,20 +60,28 @@ class PynnBrainscales(WafPackage): configuration.""" include = [] + include_exclude_dirs = set(['/usr/include']) for dep in self.spec.traverse(deptype='build'): query = self.spec[dep.name] try: - include.extend(query.headers.directories) - print('headers:', query.headers.directories, "\n") + assert(isinstance(query.headers.directories, list)) + include_dirs = set(query.headers.directories) + include_dirs -= include_exclude_dirs + print('headers (', dep.name, '):', include_dirs, "\n") + include.extend(list(include_dirs)) except: pass library = [] + library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64']) for dep in self.spec.traverse(deptype=('link', 'run')): query = self.spec[dep.name] try: - library.extend(query.libs.directories) - print('libs:', query.libs.directories, "\n") + assert(isinstance(query.libs.directories, list)) + library_dirs = set(query.libs.directories) + library_dirs -= library_exclude_dirs + print('libs (', dep.name, '):', library_dirs, "\n") + library.extend(list(library_dirs)) except: pass @@ -82,7 +90,7 @@ class PynnBrainscales(WafPackage): query = self.spec[dep.name] try: path.append(query.prefix.bin) - print('bin:', query.prefix.bin, "\n") + print('bin (', dep.name, '):', query.prefix.bin, "\n") except: pass -- GitLab