diff --git a/easybuild/framework/easyblock.py b/easybuild/framework/easyblock.py index 4d51f2368a..ffa7739c29 100644 --- a/easybuild/framework/easyblock.py +++ b/easybuild/framework/easyblock.py @@ -1166,6 +1166,20 @@ def version(self): """ return self.cfg['version'] + @property + def extension_name(self) -> str: + """Determine a valid extension name for this software package. + + Uses `extension_name` from the easyconfig if set falling back to `name` + """ + ext_name = self.cfg['extension_name'] + return self.name if ext_name is None else ext_name + + @extension_name.setter + def extension_name(self, value: str): + """Set the extension name.""" + self.cfg['extension_name'] = value + @property def toolchain(self): """ diff --git a/easybuild/framework/extension.py b/easybuild/framework/extension.py index 3d39058afb..de0eee6ae6 100644 --- a/easybuild/framework/extension.py +++ b/easybuild/framework/extension.py @@ -138,6 +138,7 @@ def __init__(self, mself, ext, extra_params=None): restore_options = ( 'checksums', 'data_sources', + 'extension_name', 'patches', 'postinstallcmds', 'sanity_check_commands', diff --git a/test/framework/easyblock.py b/test/framework/easyblock.py index 5fe7aef824..ad6485cc30 100644 --- a/test/framework/easyblock.py +++ b/test/framework/easyblock.py @@ -1630,6 +1630,38 @@ def test_extension_source_tmpl(self): eb = EasyBlock(EasyConfig(self.eb_file)) eb.fetch_step() + def test_extension_name(self): + """Test that the 'extension_name' option and property work.""" + eb = EasyBlock(EasyConfig(TOY_EC)) + self.assertEqual(eb.extension_name, 'toy') + eb.cfg['extension_name'] = 'extra' + self.assertEqual(eb.extension_name, 'extra') + eb.extension_name = 'extra2' + self.assertEqual(eb.extension_name, 'extra2') + self.assertEqual(eb.cfg['extension_name'], 'extra2') + eb.close_log() + + self.contents = TOY_EC_TXT + cleandoc(""" + easyblock = 'ConfigureMake' + name = 'toy' + version = '0.0' + homepage = 'https://example.com' + description = 'test' + toolchain = SYSTEM + extension_name = 'alias' + exts_defaultclass = 'DummyExtension' + exts_list = [ + ('bar', '0.0', {'extension_name': 'bar-alias'}), + ('barbar', '1.2'), + ] + """) + self.writeEC() + eb = EasyBlock(EasyConfig(self.eb_file)) + self.assertEqual(eb.extension_name, 'alias') + eb.init_ext_instances() + self.assertEqual(eb.ext_instances[0].extension_name, 'bar-alias') + self.assertEqual(eb.ext_instances[1].extension_name, 'barbar') + def test_make_extension_list(self): """Test make_extension_list method, incl. 'extension_name' easyconfig parameter & option.""" self.contents = '\n'.join([