Skip to content

Commit ab9975d

Browse files
committed
Merge branch 'develop' into make_rpath_readelf_check_optional
2 parents 2d198ed + 7188468 commit ab9975d

File tree

10 files changed

+54
-179
lines changed

10 files changed

+54
-179
lines changed

.github/workflows/bootstrap_script.yml

Lines changed: 0 additions & 137 deletions
This file was deleted.

easybuild/framework/easyblock.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1436,7 +1436,7 @@ def make_module_extra_extensions(self):
14361436

14371437
# set environment variable that specifies list of extensions
14381438
# We need only name and version, so don't resolve templates
1439-
exts_list = ','.join(['-'.join(ext[:2]) for ext in self.cfg.get_ref('exts_list')])
1439+
exts_list = self.make_extension_string(ext_sep=',', sort=False)
14401440
env_var_name = convert_name(self.name, upper=True)
14411441
lines.append(self.module_generator.set_environment('EBEXTSLIST%s' % env_var_name, exts_list))
14421442

@@ -1717,6 +1717,27 @@ def load_dependency_modules(self):
17171717
# EXTENSIONS UTILITY FUNCTIONS
17181718
#
17191719

1720+
def _make_extension_list(self):
1721+
"""
1722+
Return a list of extension names and their versions included in this installation
1723+
1724+
Each entry should be a (name, version) tuple or just (name, ) if no version exists
1725+
"""
1726+
# We need only name and version, so don't resolve templates
1727+
# Each extension in exts_list is either a string or a list/tuple with name, version as first entries
1728+
return [(ext, ) if isinstance(ext, string_type) else ext[:2] for ext in self.cfg.get_ref('exts_list')]
1729+
1730+
def make_extension_string(self, name_version_sep='-', ext_sep=', ', sort=True):
1731+
"""
1732+
Generate a string with a list of extensions.
1733+
1734+
The name and version are separated by name_version_sep and each extension is separated by ext_sep
1735+
"""
1736+
exts_list = (name_version_sep.join(ext) for ext in self._make_extension_list())
1737+
if sort:
1738+
exts_list = sorted(exts_list, key=str.lower)
1739+
return ext_sep.join(exts_list)
1740+
17201741
def prepare_for_extensions(self):
17211742
"""
17221743
Also do this before (eg to set the template)

easybuild/tools/module_generator.py

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -612,28 +612,17 @@ def use(self, paths, prefix=None, guarded=False, user_modpath=None):
612612

613613
def _generate_extension_list(self):
614614
"""
615-
Generate a string with a comma-separated list of extensions.
616-
"""
617-
# We need only name and version, so don't resolve templates
618-
exts_list = self.app.cfg.get_ref('exts_list')
619-
extensions = ', '.join(sorted(['-'.join(ext[:2]) for ext in exts_list], key=str.lower))
615+
Generate a string with a list of extensions.
620616
621-
return extensions
617+
The name and version are separated by name_version_sep and each extension is separated by ext_sep
618+
"""
619+
return self.app.make_extension_string()
622620

623621
def _generate_extensions_list(self):
624622
"""
625623
Generate a list of all extensions in name/version format
626624
"""
627-
exts_list = self.app.cfg['exts_list']
628-
# the format is extension_name/extension_version
629-
exts_ver_list = []
630-
for ext in exts_list:
631-
if isinstance(ext, tuple):
632-
exts_ver_list.append('%s/%s' % (ext[0], ext[1]))
633-
elif isinstance(ext, string_type):
634-
exts_ver_list.append(ext)
635-
636-
return sorted(exts_ver_list, key=str.lower)
625+
return self.app.make_extension_string(name_version_sep='/', ext_sep=',').split(',')
637626

638627
def _generate_help_text(self):
639628
"""

easybuild/tools/run.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -623,19 +623,19 @@ def parse_cmd_output(cmd, stdouterr, ec, simple, log_all, log_ok, regexp):
623623
"""
624624
if strictness == IGNORE:
625625
check_ec = False
626-
use_regexp = False
626+
fail_on_error_match = False
627627
elif strictness == WARN:
628628
check_ec = True
629-
use_regexp = False
629+
fail_on_error_match = False
630630
elif strictness == ERROR:
631631
check_ec = True
632-
use_regexp = True
632+
fail_on_error_match = True
633633
else:
634634
raise EasyBuildError("invalid strictness setting: %s", strictness)
635635

636636
# allow for overriding the regexp setting
637637
if not regexp:
638-
use_regexp = False
638+
fail_on_error_match = False
639639

640640
if ec and (log_all or log_ok):
641641
# We don't want to error if the user doesn't care
@@ -650,14 +650,16 @@ def parse_cmd_output(cmd, stdouterr, ec, simple, log_all, log_ok, regexp):
650650
_log.debug('cmd "%s" exited with exit code %s and output:\n%s' % (cmd, ec, stdouterr))
651651

652652
# parse the stdout/stderr for errors when strictness dictates this or when regexp is passed in
653-
if use_regexp or regexp:
654-
res = parse_log_for_error(stdouterr, regexp, msg="Command used: %s" % cmd)
655-
if len(res) > 0:
656-
message = "Found %s errors in command output (output: %s)" % (len(res), "\n\t".join([r[0] for r in res]))
657-
if use_regexp:
658-
raise EasyBuildError(message)
653+
if fail_on_error_match or regexp:
654+
res = parse_log_for_error(stdouterr, regexp, stdout=False)
655+
if res:
656+
errors = "\n\t" + "\n\t".join([r[0] for r in res])
657+
error_str = "error" if len(res) == 1 else "errors"
658+
if fail_on_error_match:
659+
raise EasyBuildError("Found %s %s in output of %s:%s", len(res), error_str, cmd, errors)
659660
else:
660-
_log.warning(message)
661+
_log.warning("Found %s potential %s (some may be harmless) in output of %s:%s",
662+
len(res), error_str, cmd, errors)
661663

662664
if simple:
663665
if ec:

test/framework/easyblock.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,7 +1033,7 @@ def test_init_extensions(self):
10331033
toy_ec_txt = read_file(toy_ec_file)
10341034

10351035
test_ec = os.path.join(self.test_prefix, 'test.eb')
1036-
test_ec_txt = toy_ec_txt.replace("('barbar', '0.0', {", "('barbar', '0.0', {'easyblock': 'DummyExtension',")
1036+
test_ec_txt = toy_ec_txt.replace("('barbar', '1.2', {", "('barbar', '1.2', {'easyblock': 'DummyExtension',")
10371037
write_file(test_ec, test_ec_txt)
10381038
ec = process_easyconfig(test_ec)[0]
10391039
eb = get_easyblock_instance(ec)
@@ -1837,7 +1837,7 @@ def test_collect_exts_file_info(self):
18371837
self.assertIsInstance(exts_file_info, list)
18381838
self.assertEqual(len(exts_file_info), 4)
18391839

1840-
self.assertEqual(exts_file_info[0], {'name': 'ls'})
1840+
self.assertEqual(exts_file_info[0], {'name': 'ulimit'})
18411841

18421842
self.assertEqual(exts_file_info[1]['name'], 'bar')
18431843
self.assertEqual(exts_file_info[1]['src'], os.path.join(toy_ext_sources, 'bar-0.0.tar.gz'))
@@ -1849,7 +1849,7 @@ def test_collect_exts_file_info(self):
18491849
self.assertEqual(exts_file_info[1]['patches'][1]['path'], os.path.join(toy_ext_sources, bar_patch2))
18501850

18511851
self.assertEqual(exts_file_info[2]['name'], 'barbar')
1852-
self.assertEqual(exts_file_info[2]['src'], os.path.join(toy_ext_sources, 'barbar-0.0.tar.gz'))
1852+
self.assertEqual(exts_file_info[2]['src'], os.path.join(toy_ext_sources, 'barbar-1.2.tar.gz'))
18531853
self.assertNotIn('patches', exts_file_info[2])
18541854

18551855
self.assertEqual(exts_file_info[3]['name'], 'toy')
@@ -1862,7 +1862,7 @@ def test_collect_exts_file_info(self):
18621862
self.assertIsInstance(exts_file_info, list)
18631863
self.assertEqual(len(exts_file_info), 4)
18641864

1865-
self.assertEqual(exts_file_info[0], {'name': 'ls'})
1865+
self.assertEqual(exts_file_info[0], {'name': 'ulimit'})
18661866

18671867
self.assertEqual(exts_file_info[1]['name'], 'bar')
18681868
self.assertNotIn('src', exts_file_info[1])

test/framework/easyconfigs/test_ecs/t/toy/toy-0.0-gompi-2018a-test.eb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ exts_default_options = {
2727
}
2828

2929
exts_list = [
30-
'ls', # extension that is part of "standard library"
30+
'ulimit', # extension that is part of "standard library"
3131
('bar', '0.0', {
3232
'buildopts': " && gcc bar.c -o anotherbar",
33-
'checksums': ['f3676716b610545a4e8035087f5be0a0248adee0abb3930d3edb76d498ae91e7'], # checksum for
33+
'checksums': ['f3676716b610545a4e8035087f5be0a0248adee0abb3930d3edb76d498ae91e7'], # checksum for
3434
# custom extension filter to verify use of stdin value being passed to filter command
3535
'exts_filter': ("cat | grep '^bar$'", '%(name)s'),
3636
'patches': [
@@ -43,7 +43,7 @@ exts_list = [
4343
# cfr. https://github.com/easybuilders/easybuild-framework/pull/3034
4444
'keepsymlinks': True,
4545
}),
46-
('barbar', '0.0', {
46+
('barbar', '1.2', {
4747
'start_dir': 'src',
4848
}),
4949
(name, version, {

test/framework/module_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ def test_module_extensions(self):
749749

750750
patterns = [
751751
r'^if convertToCanonical\(LmodVersion\(\)\) >= convertToCanonical\("8\.2\.8"\) then\n' +
752-
r'\s*extensions\("bar/0.0,barbar/0.0,ls,toy/0.0"\)\nend$',
752+
r'\s*extensions\("bar/0.0,barbar/1.2,toy/0.0,ulimit"\)\nend$',
753753
]
754754

755755
for pattern in patterns:

test/framework/options.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5747,7 +5747,7 @@ def test_inject_checksums(self):
57475747
r"^== \* bar-0\.0\.tar\.gz: %s$" % bar_tar_gz_sha256,
57485748
r"^== \* %s: %s$" % (bar_patch, bar_patch_sha256),
57495749
r"^== \* %s: %s$" % (bar_patch_bis, bar_patch_bis_sha256),
5750-
r"^== \* barbar-0\.0\.tar\.gz: d5bd9908cdefbe2d29c6f8d5b45b2aaed9fd904b5e6397418bb5094fbdb3d838$",
5750+
r"^== \* barbar-1\.2\.tar\.gz: d5bd9908cdefbe2d29c6f8d5b45b2aaed9fd904b5e6397418bb5094fbdb3d838$",
57515751
]
57525752
for pattern in patterns:
57535753
regex = re.compile(pattern, re.M)
@@ -5803,7 +5803,7 @@ def test_inject_checksums(self):
58035803
self.assertEqual(ec['checksums'], [{'toy-0.0.tar.gz': toy_source_sha256},
58045804
{'toy-0.0_fix-silly-typo-in-printf-statement.patch': toy_patch_sha256}])
58055805
self.assertEqual(ec['exts_default_options'], {'source_urls': ['http://example.com/%(name)s']})
5806-
self.assertEqual(ec['exts_list'][0], 'ls')
5806+
self.assertEqual(ec['exts_list'][0], 'ulimit')
58075807
self.assertEqual(ec['exts_list'][1], ('bar', '0.0', {
58085808
'buildopts': " && gcc bar.c -o anotherbar",
58095809
'checksums': [
@@ -5817,7 +5817,7 @@ def test_inject_checksums(self):
58175817
'unknowneasyconfigparameterthatshouldbeignored': 'foo',
58185818
'keepsymlinks': True,
58195819
}))
5820-
self.assertEqual(ec['exts_list'][2], ('barbar', '0.0', {
5820+
self.assertEqual(ec['exts_list'][2], ('barbar', '1.2', {
58215821
'checksums': ['d5bd9908cdefbe2d29c6f8d5b45b2aaed9fd904b5e6397418bb5094fbdb3d838'],
58225822
'start_dir': 'src',
58235823
}))
556 Bytes
Binary file not shown.

test/framework/toy_build.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,7 +1088,7 @@ def test_toy_advanced(self):
10881088
toy_mod_txt = read_file(toy_module)
10891089

10901090
patterns = [
1091-
'^setenv.*EBEXTSLISTTOY.*bar-0.0,barbar-0.0',
1091+
'^setenv.*EBEXTSLISTTOY.*ulimit,bar-0.0,barbar-1.2',
10921092
# set by ToyExtension easyblock used to install extensions
10931093
'^setenv.*TOY_EXT_BAR.*bar',
10941094
'^setenv.*TOY_EXT_BARBAR.*barbar',
@@ -2197,7 +2197,7 @@ def test_reproducibility_ext_easyblocks(self):
21972197
ec1 = os.path.join(self.test_prefix, 'toy1.eb')
21982198
ec1_txt = '\n'.join([
21992199
toy_ec_txt,
2200-
"exts_list = [('barbar', '0.0', {'start_dir': 'src'})]",
2200+
"exts_list = [('barbar', '1.2', {'start_dir': 'src'})]",
22012201
"",
22022202
])
22032203
write_file(ec1, ec1_txt)
@@ -2998,7 +2998,7 @@ def test_toy_multi_deps(self):
29982998
test_ec = os.path.join(self.test_prefix, 'test.eb')
29992999

30003000
# also inject (minimal) list of extensions to test iterative installation of extensions
3001-
test_ec_txt += "\nexts_list = [('barbar', '0.0', {'start_dir': 'src'})]"
3001+
test_ec_txt += "\nexts_list = [('barbar', '1.2', {'start_dir': 'src'})]"
30023002

30033003
test_ec_txt += "\nmulti_deps = {'GCC': ['4.6.3', '7.3.0-2.30']}"
30043004
write_file(test_ec, test_ec_txt)

0 commit comments

Comments
 (0)