Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions easybuild/tools/systemtools.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ def get_cpu_family():
return family


def get_cpu_arch_name():
def get_cpu_arch_name(show_warning=True):
"""
Determine CPU architecture name via archspec (if available).
"""
Expand All @@ -476,6 +476,10 @@ def get_cpu_arch_name():
cpu_arch_name = str(res.name)

if cpu_arch_name is None:
if show_warning and not HAVE_ARCHSPEC:
print_warning("Could not detect CPU architecture name which may affect functionality. "
"Please install the 'archspec' Python package into the same Python environment as EasyBuild.",
log=_log)
cpu_arch_name = UNKNOWN

return cpu_arch_name
Expand Down Expand Up @@ -1345,7 +1349,7 @@ def get_system_info():
'core_count': get_avail_core_count(),
'total_memory': get_total_memory(),
'cpu_arch': get_cpu_architecture(),
'cpu_arch_name': get_cpu_arch_name(),
'cpu_arch_name': get_cpu_arch_name(show_warning=False),
'cpu_model': get_cpu_model(),
'cpu_speed': get_cpu_speed(),
'cpu_vendor': get_cpu_vendor(),
Expand Down
17 changes: 16 additions & 1 deletion test/framework/systemtools.py
Original file line number Diff line number Diff line change
Expand Up @@ -872,8 +872,12 @@ def test_cpu_architecture(self):

def test_cpu_arch_name_native(self):
"""Test getting CPU arch name."""
arch_name = get_cpu_arch_name()
with self.mocked_stderr():
arch_name = get_cpu_arch_name()
stderr = self.get_stderr()
self.assertIsInstance(arch_name, str)
if st.HAVE_ARCHSPEC:
self.assertEqual(stderr, "")

def test_cpu_arch_name(self):
"""Test getting CPU arch name."""
Expand All @@ -891,6 +895,17 @@ def __init__(self, name):
arch_name = get_cpu_arch_name()
self.assertEqual(arch_name, 'UNKNOWN')

# When archspec is unavailable, direct calls should warn the user.
st.HAVE_ARCHSPEC = False
try:
with self.mocked_stderr():
arch_name = get_cpu_arch_name()
stderr = self.get_stderr()
self.assertEqual(arch_name, 'UNKNOWN')
self.assertRegex(stderr, r"Could not detect CPU architecture.*install the 'archspec' Python package")
finally:
st.HAVE_ARCHSPEC = True

def test_cpu_vendor_native(self):
"""Test getting CPU vendor."""
cpu_vendor = get_cpu_vendor()
Expand Down
Loading