From 6067100db91e25b80fac8fad4181c380c20e5e38 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Thu, 29 Feb 2024 17:57:18 +0100
Subject: [PATCH] fix(BSS-2): build on JUSUF

This is a hacky way to fix the build on JUSUF where we need modules to
be loaded (i.e. the environment to contain non-spack-managed/known
stuff).
---
 packages/hxtorch/package.py          | 19 ++++++++++++-------
 packages/pynn-brainscales/package.py | 19 ++++++++++++-------
 2 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py
index 12c259c5..7c666829 100644
--- a/packages/hxtorch/package.py
+++ b/packages/hxtorch/package.py
@@ -124,11 +124,13 @@ class Hxtorch(WafPackage):
                 print("libs: manually inserting at front ", self.spec['googletest'].prefix.lib)
                 library.insert(0, self.spec['googletest'].prefix.lib)
 
-        env.set('CPATH', ':'.join(include))
-        env.set('C_INCLUDE_PATH', ':'.join(include))
-        env.set('CPLUS_INCLUDE_PATH', ':'.join(include))
-        env.set('LIBRARY_PATH', ':'.join(library))
-        env.set('WAF_CONFIGURE_LD_LIBRARY_PATH', ':'.join(library))
+        for dir in reversed(include):
+            env.prepend_path('CPATH', dir)
+            env.prepend_path('C_INCLUDE_PATH', dir)
+            env.prepend_path('CPLUS_INCLUDE_PATH', dir)
+        for dir in reversed(library):
+            env.prepend_path('LIBRARY_PATH', dir)
+            env.prepend_path('WAF_CONFIGURE_LD_LIBRARY_PATH', dir)
         env.prepend_path('PATH', ':'.join(path))
 
     def _setup_common_env(self, env):
@@ -144,8 +146,9 @@ class Hxtorch(WafPackage):
             dep = self.spec[ppu_dep_name]
             dep_include_dirs = set(dep.headers.directories)
             ppu_include_dirs.extend(list(dep_include_dirs))
-        env.set('C_INCLUDE_PATH', ':'.join(ppu_include_dirs))
-        env.set('CPLUS_INCLUDE_PATH', ':'.join(ppu_include_dirs))
+        for dir in reversed(include):
+            env.prepend_path('C_INCLUDE_PATH', dir)
+            env.prepend_path('CPLUS_INCLUDE_PATH', dir)
 
     def setup_dependent_build_environment(self, env, dependent_spec):
         self._setup_common_env(env)
@@ -164,6 +167,8 @@ class Hxtorch(WafPackage):
         if 'SPACK_COMPILER_IMPLICIT_RPATHS' in env:
             env['LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['LIBRARY_PATH']
             env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['WAF_CONFIGURE_LD_LIBRARY_PATH']
+            if 'LD_LIBRARY_PATH' in env:
+                env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['WAF_CONFIGURE_LD_LIBRARY_PATH'] + ':' + env['LD_LIBRARY_PATH']
 
         self.waf('setup', '--repo-db-url=https://github.com/electronicvisions/projects',
             '--without-munge',
diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py
index 833661bb..8e208904 100644
--- a/packages/pynn-brainscales/package.py
+++ b/packages/pynn-brainscales/package.py
@@ -101,11 +101,13 @@ class PynnBrainscales(WafPackage):
             print("libs: manually adding ", self.spec['llvm'].prefix.lib)
             library.append(self.spec['llvm'].prefix.lib)
 
-        env.set('CPATH', ':'.join(include))
-        env.set('C_INCLUDE_PATH', ':'.join(include))
-        env.set('CPLUS_INCLUDE_PATH', ':'.join(include))
-        env.set('LIBRARY_PATH', ':'.join(library))
-        env.set('WAF_CONFIGURE_LD_LIBRARY_PATH', ':'.join(library))
+        for dir in reversed(include):
+            env.prepend_path('CPATH', dir)
+            env.prepend_path('C_INCLUDE_PATH', dir)
+            env.prepend_path('CPLUS_INCLUDE_PATH', dir)
+        for dir in reversed(library):
+            env.prepend_path('LIBRARY_PATH', dir)
+            env.prepend_path('WAF_CONFIGURE_LD_LIBRARY_PATH', dir)
         env.prepend_path('PATH', ':'.join(path))
 
     def _setup_common_env(self, env):
@@ -121,8 +123,9 @@ class PynnBrainscales(WafPackage):
             dep = self.spec[ppu_dep_name]
             dep_include_dirs = set(dep.headers.directories)
             ppu_include_dirs.extend(list(dep_include_dirs))
-        env.set('C_INCLUDE_PATH', ':'.join(ppu_include_dirs))
-        env.set('CPLUS_INCLUDE_PATH', ':'.join(ppu_include_dirs))
+        for dir in reversed(include):
+            env.prepend_path('C_INCLUDE_PATH', dir)
+            env.prepend_path('CPLUS_INCLUDE_PATH', dir)
 
     def setup_dependent_build_environment(self, env, dependent_spec):
         self._setup_common_env(env)
@@ -141,6 +144,8 @@ class PynnBrainscales(WafPackage):
         if 'SPACK_COMPILER_IMPLICIT_RPATHS' in env:
             env['LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['LIBRARY_PATH']
             env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['WAF_CONFIGURE_LD_LIBRARY_PATH']
+            if 'LD_LIBRARY_PATH' in env:
+                env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['WAF_CONFIGURE_LD_LIBRARY_PATH'] + ':' + env['LD_LIBRARY_PATH']
 
         self.waf('setup', '--repo-db-url=https://github.com/electronicvisions/projects',
             '--without-munge',
-- 
GitLab