From b9489551cc35af3f7703549d1451beaca07f9d24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Fri, 10 Feb 2023 10:04:27 +0100
Subject: [PATCH] BrainScaleS: Fail earlier

Until now we used a lot of try/except to keep going when preparing the
environment for the build; it should just work now, so let's fail early.
---
 packages/hxtorch/package.py          | 30 +++++++++++++---------------
 packages/pynn-brainscales/package.py | 18 ++++++++---------
 2 files changed, 22 insertions(+), 26 deletions(-)

diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py
index efd1b729..fdaf01a5 100644
--- a/packages/hxtorch/package.py
+++ b/packages/hxtorch/package.py
@@ -62,47 +62,45 @@ class Hxtorch(WafPackage):
 
         include = []
         include_exclude_dirs = set(['/usr/include'])
-        for dep in self.spec.traverse(deptype='build'):
+        for dep in self.spec.traverse(deptype='build', root=False):
             query = self.spec[dep.name]
+            if dep.name in ['pthreadpool', 'fxdiv']:
+                print('skipping {} in SPACK_INCLUDE_DIRS/CPATH/C{{,_PLUS}}_INCLUDE_PATH\n'.format(dep.name))
+                for d in query.headers.directories:
+                    if os.path.exists(d):
+                        env.remove_path('SPACK_INCLUDE_DIRS', d)
+                continue
             try:
-                if dep.name in ['pthreadpool', 'fxdiv']:
-                    print('skipping {} in SPACK_INCLUDE_DIRS/CPATH/C{{,_PLUS}}_INCLUDE_PATH\n'.format(dep.name))
-                    for d in query.headers.directories:
-                        if os.path.exists(d):
-                            env.remove_path('SPACK_INCLUDE_DIRS', d)
-                    continue
-                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:
+            except error.NoHeadersError:
+                # we don't care if no header directories are found
                 pass
 
         library = []
         library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64'])
-        for dep in self.spec.traverse(deptype=('link', 'run')):
+        for dep in self.spec.traverse(deptype=('link', 'run'), root=False):
             query = self.spec[dep.name]
             try:
-                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:
+            except error.NoLibrariesError:
+                # we don't care if no library directories are found
                 pass
 
         path = []
-        for dep in self.spec.traverse(deptype=('build', 'link', 'run')):
+        for dep in self.spec.traverse(deptype=('build', 'link', 'run'), root=False):
             if dep.name in ['pthreadpool', 'fxdiv']:
                 print('skipping {} for bin'.format(dep.name))
                 continue
             query = self.spec[dep.name]
-            try:
+            if os.path.exists(self.prefix.bin):
                 path.append(query.prefix.bin)
                 print('bin (', dep.name, '):', query.prefix.bin, "\n")
-            except:
-                pass
 
         # llvm might be built with ~shared_libs but still builds shared libs
         if not any('llvm' in lib for lib in library):
diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py
index 49bb2e59..a85cb4bd 100644
--- a/packages/pynn-brainscales/package.py
+++ b/packages/pynn-brainscales/package.py
@@ -61,38 +61,36 @@ class PynnBrainscales(WafPackage):
 
         include = []
         include_exclude_dirs = set(['/usr/include'])
-        for dep in self.spec.traverse(deptype='build'):
+        for dep in self.spec.traverse(deptype='build', root=False):
             query = self.spec[dep.name]
             try:
-                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:
+            except error.NoHeadersError:
+                # we don't care if no header directories are found
                 pass
 
         library = []
         library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64'])
-        for dep in self.spec.traverse(deptype=('link', 'run')):
+        for dep in self.spec.traverse(deptype=('link', 'run'), root=False):
             query = self.spec[dep.name]
             try:
-                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:
+            except error.NoLibrariesError:
+                # we don't care if no library directories are found
                 pass
 
         path = []
-        for dep in self.spec.traverse(deptype=('build', 'link', 'run')):
+        for dep in self.spec.traverse(deptype=('build', 'link', 'run'), root=False):
             query = self.spec[dep.name]
-            try:
+            if os.path.exists(self.prefix.bin):
                 path.append(query.prefix.bin)
                 print('bin (', dep.name, '):', query.prefix.bin, "\n")
-            except:
-                pass
 
         # llvm might be built with ~shared_libs but still builds shared libs
         if not any('llvm' in lib for lib in library):
-- 
GitLab