From 2d69680d04e5e1a7d41514819db2408cdb15d8ea Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Fri, 24 Oct 2025 13:50:10 +0200 Subject: [PATCH 1/2] add search_path_vars_headers and search_path_vars_linker properties to Toolchain --- easybuild/tools/toolchain/toolchain.py | 20 ++++++++++++++++++++ test/framework/toolchain.py | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/easybuild/tools/toolchain/toolchain.py b/easybuild/tools/toolchain/toolchain.py index d89c10b71a..fe872dad73 100644 --- a/easybuild/tools/toolchain/toolchain.py +++ b/easybuild/tools/toolchain/toolchain.py @@ -247,6 +247,26 @@ def __init__(self, name=None, version=None, mns=None, class_constants=None, tcde self.mod_short_name = self.mns.det_short_module_name(tc_dict) self.init_modpaths = self.mns.det_init_modulepaths(tc_dict) + @property + def search_path_vars_headers(self): + """Return list of environment variables used as search paths for headers""" + return self._search_path_vars('cpp_headers') + + @property + def search_path_vars_linker(self): + """Return list of environment variables used as search paths by the linker""" + return self._search_path_vars('linker') + + def _search_path_vars(self, search_object): + """Return list of environment variables used as search paths for the given object""" + search_path_opt = self.search_path[search_object] + + # default 'flags' option does not use search paths in the build environment + if search_path_opt == 'flags': + return [] + + return SEARCH_PATH[search_object][search_path_opt] + def is_system_toolchain(self): """Return boolean to indicate whether this toolchain is a system toolchain.""" return is_system_toolchain(self.name) diff --git a/test/framework/toolchain.py b/test/framework/toolchain.py index 11f5b5b0e3..0b36039d42 100644 --- a/test/framework/toolchain.py +++ b/test/framework/toolchain.py @@ -974,6 +974,11 @@ def test_search_path_cpp_headers(self): "not found in toolchain environment" ) self.assertIn(env_var, tc.variables, assert_fail_msg) + # check return of tc.search_path_vars_headers + expected_search_path_vars = cpp_headers_mode[build_opt] + if build_opt == 'flags': + expected_search_path_vars = [] + self.assertCountEqual(tc.search_path_vars_headers, expected_search_path_vars) self.modtool.purge() # test with toolchain option for build_opt in cpp_headers_mode: @@ -989,6 +994,11 @@ def test_search_path_cpp_headers(self): "not found in toolchain environment" ) self.assertIn(env_var, tc.variables, assert_fail_msg) + # check return of tc.search_path_vars_headers + expected_search_path_vars = cpp_headers_mode[tc_opt] + if tc_opt == 'flags': + expected_search_path_vars = [] + self.assertCountEqual(tc.search_path_vars_headers, expected_search_path_vars) self.modtool.purge() # test wrong toolchain option tc = self.get_toolchain("foss", version="2018a") @@ -1016,6 +1026,11 @@ def test_search_path_linker(self): "not found in toolchain environment" ) self.assertIn(env_var, tc.variables, assert_fail_msg) + # check return of tc.search_path_vars_linker + expected_search_path_vars = linker_mode[build_opt] + if build_opt == 'flags': + expected_search_path_vars = [] + self.assertCountEqual(tc.search_path_vars_linker, expected_search_path_vars) self.modtool.purge() # test with toolchain option for build_opt in linker_mode: @@ -1031,6 +1046,11 @@ def test_search_path_linker(self): "not found in toolchain environment" ) self.assertIn(env_var, tc.variables, assert_fail_msg) + # check return of tc.search_path_vars_linker + expected_search_path_vars = linker_mode[tc_opt] + if tc_opt == 'flags': + expected_search_path_vars = [] + self.assertCountEqual(tc.search_path_vars_linker, expected_search_path_vars) self.modtool.purge() # test wrong toolchain option tc = self.get_toolchain("foss", version="2018a") From 19efb5e3740761bb6146088dd74b2897852e5aee Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 5 Nov 2025 16:48:11 +0100 Subject: [PATCH 2/2] add error message to Toolchain._search_path_vars() --- easybuild/tools/toolchain/toolchain.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easybuild/tools/toolchain/toolchain.py b/easybuild/tools/toolchain/toolchain.py index fe872dad73..cfb908b684 100644 --- a/easybuild/tools/toolchain/toolchain.py +++ b/easybuild/tools/toolchain/toolchain.py @@ -259,7 +259,10 @@ def search_path_vars_linker(self): def _search_path_vars(self, search_object): """Return list of environment variables used as search paths for the given object""" - search_path_opt = self.search_path[search_object] + try: + search_path_opt = self.search_path[search_object] + except KeyError: + raise EasyBuildError("Failed to retrieve search path options for '%s'", search_object) # default 'flags' option does not use search paths in the build environment if search_path_opt == 'flags':