Skip to content

Commit 52aba00

Browse files
authored
Merge pull request #4240 from branfosj/dummy
remove deprecated dummy toolchain
2 parents 71635b2 + 5a31b81 commit 52aba00

File tree

9 files changed

+35
-268
lines changed

9 files changed

+35
-268
lines changed

easybuild/framework/easyconfig/easyconfig.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -247,11 +247,6 @@ def det_subtoolchain_version(current_tc, subtoolchain_names, optional_toolchains
247247
# system toolchain: bottom of the hierarchy
248248
if is_system_toolchain(subtoolchain_name):
249249
add_system_to_minimal_toolchains = build_option('add_system_to_minimal_toolchains')
250-
if not add_system_to_minimal_toolchains and build_option('add_dummy_to_minimal_toolchains'):
251-
depr_msg = "Use --add-system-to-minimal-toolchains instead of --add-dummy-to-minimal-toolchains"
252-
_log.deprecated(depr_msg, '5.0')
253-
add_system_to_minimal_toolchains = True
254-
255250
system_subtoolchain = True
256251

257252
if add_system_to_minimal_toolchains and not incl_capabilities:
@@ -2483,8 +2478,6 @@ def copy_patch_files(patch_specs, target_dir):
24832478
def fix_deprecated_easyconfigs(paths):
24842479
"""Fix use of deprecated functionality in easyconfigs at specified locations."""
24852480

2486-
dummy_tc_regex = re.compile(r'^toolchain\s*=\s*{.*name.*dummy.*}', re.M)
2487-
24882481
easyconfig_paths = []
24892482
for path in paths:
24902483
easyconfig_paths.extend(find_easyconfigs(path))
@@ -2497,11 +2490,6 @@ def fix_deprecated_easyconfigs(paths):
24972490

24982491
fixed = False
24992492

2500-
# fix use of 'dummy' toolchain, use SYSTEM constant instead
2501-
if dummy_tc_regex.search(ectxt):
2502-
ectxt = dummy_tc_regex.sub("toolchain = SYSTEM", ectxt)
2503-
fixed = True
2504-
25052493
# fix use of local variables with a name other than a single letter or 'local_*'
25062494
ec = EasyConfig(path, local_var_naming_check=LOCAL_VAR_NAMING_CHECK_LOG)
25072495
for key in ec.unknown_keys:

easybuild/toolchains/compiler/dummycompiler.py

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

easybuild/toolchains/dummy.py

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

easybuild/tools/config.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ def mk_full_default_path(name, prefix=DEFAULT_PREFIX):
267267
'zip_logs',
268268
],
269269
False: [
270-
'add_dummy_to_minimal_toolchains',
271270
'add_system_to_minimal_toolchains',
272271
'allow_modules_tool_mismatch',
273272
'backup_patched_files',

easybuild/tools/docs.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
from easybuild.tools.config import build_option
6262
from easybuild.tools.filetools import read_file
6363
from easybuild.tools.modules import modules_tool
64-
from easybuild.tools.toolchain.toolchain import DUMMY_TOOLCHAIN_NAME, SYSTEM_TOOLCHAIN_NAME, is_system_toolchain
64+
from easybuild.tools.toolchain.toolchain import SYSTEM_TOOLCHAIN_NAME, is_system_toolchain
6565
from easybuild.tools.toolchain.utilities import search_toolchain
6666
from easybuild.tools.utilities import INDENT_2SPACES, INDENT_4SPACES
6767
from easybuild.tools.utilities import import_available_modules, mk_md_table, mk_rst_table, nub, quote_str
@@ -1024,8 +1024,7 @@ def list_toolchains(output_format=FORMAT_TXT):
10241024
"""Show list of known toolchains."""
10251025
_, all_tcs = search_toolchain('')
10261026

1027-
# filter deprecated 'dummy' toolchain
1028-
all_tcs = [x for x in all_tcs if x.NAME != DUMMY_TOOLCHAIN_NAME]
1027+
all_tcs = [x for x in all_tcs]
10291028
all_tcs_names = [x.NAME for x in all_tcs]
10301029

10311030
# start with dict that maps toolchain name to corresponding subclass of Toolchain

easybuild/tools/options.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,9 +343,6 @@ def override_options(self):
343343

344344
opts = OrderedDict({
345345
'accept-eula-for': ("Accept EULA for specified software", 'strlist', 'store', []),
346-
'add-dummy-to-minimal-toolchains': ("Include dummy toolchain in minimal toolchain searches "
347-
"[DEPRECATED, use --add-system-to-minimal-toolchains instead!]",
348-
None, 'store_true', False),
349346
'add-system-to-minimal-toolchains': ("Include system toolchain in minimal toolchain searches",
350347
None, 'store_true', False),
351348
'allow-loaded-modules': ("List of software names for which to allow loaded modules in initial environment",

easybuild/tools/toolchain/toolchain.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@
7474

7575
_log = fancylogger.getLogger('tools.toolchain', fname=False)
7676

77-
# name/version for dummy toolchain
78-
# if name==DUMMY_TOOLCHAIN_NAME and version==DUMMY_TOOLCHAIN_VERSION, do not load dependencies
79-
# NOTE: use of 'dummy' toolchain is deprecated, replaced by 'system' toolchain (which always loads dependencies)
80-
DUMMY_TOOLCHAIN_NAME = 'dummy'
81-
DUMMY_TOOLCHAIN_VERSION = 'dummy'
82-
8377
SYSTEM_TOOLCHAIN_NAME = 'system'
8478

8579
CCACHE = 'ccache'
@@ -105,7 +99,7 @@
10599

106100
def is_system_toolchain(tc_name):
107101
"""Return whether toolchain with specified name is a system toolchain or not."""
108-
return tc_name in [DUMMY_TOOLCHAIN_NAME, SYSTEM_TOOLCHAIN_NAME]
102+
return tc_name in [SYSTEM_TOOLCHAIN_NAME]
109103

110104

111105
def env_vars_external_module(name, version, metadata):
@@ -197,10 +191,6 @@ def __init__(self, name=None, version=None, mns=None, class_constants=None, tcde
197191
if name is None:
198192
raise EasyBuildError("Toolchain init: no name provided")
199193
self.name = name
200-
if self.name == DUMMY_TOOLCHAIN_NAME:
201-
self.log.deprecated("Use of 'dummy' toolchain is deprecated, use 'system' toolchain instead", '5.0',
202-
silent=build_option('silent'))
203-
self.name = SYSTEM_TOOLCHAIN_NAME
204194

205195
if version is None:
206196
version = self.VERSION
@@ -237,7 +227,7 @@ def __init__(self, name=None, version=None, mns=None, class_constants=None, tcde
237227
self.init_modpaths = self.mns.det_init_modulepaths(tc_dict)
238228

239229
def is_system_toolchain(self):
240-
"""Return boolean to indicate whether this toolchain is a system(/dummy) toolchain."""
230+
"""Return boolean to indicate whether this toolchain is a system toolchain."""
241231
return is_system_toolchain(self.name)
242232

243233
def set_minimal_build_env(self):

test/framework/easyconfig.py

Lines changed: 30 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -3576,19 +3576,6 @@ def test_det_subtoolchain_version(self):
35763576
for subtoolchain_name in subtoolchains[current_tc['name']]]
35773577
self.assertEqual(versions, [None, ''])
35783578

3579-
# --add-dummy-to-minimal-toolchains is still supported, but deprecated
3580-
self.allow_deprecated_behaviour()
3581-
init_config(build_options={'add_system_to_minimal_toolchains': False, 'add_dummy_to_minimal_toolchains': True})
3582-
self.mock_stderr(True)
3583-
versions = [det_subtoolchain_version(current_tc, subtoolchain_name, optional_toolchains, cands)
3584-
for subtoolchain_name in subtoolchains[current_tc['name']]]
3585-
stderr = self.get_stderr()
3586-
self.mock_stderr(False)
3587-
self.assertEqual(versions, [None, ''])
3588-
depr_msg = "WARNING: Deprecated functionality, will no longer work in v5.0: "
3589-
depr_msg += "Use --add-system-to-minimal-toolchains instead of --add-dummy-to-minimal-toolchains"
3590-
self.assertIn(depr_msg, stderr)
3591-
35923579
# and GCCcore if existing too
35933580
init_config(build_options={'add_system_to_minimal_toolchains': True})
35943581
current_tc = {'name': 'GCC', 'version': '4.9.3-2.25'}
@@ -4130,9 +4117,6 @@ def test_fix_deprecated_easyconfigs(self):
41304117
"""Test fix_deprecated_easyconfigs function."""
41314118
test_ecs_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'easyconfigs', 'test_ecs')
41324119
toy_ec = os.path.join(test_ecs_dir, 't', 'toy', 'toy-0.0.eb')
4133-
gzip_ec = os.path.join(test_ecs_dir, 'g', 'gzip', 'gzip-1.4.eb')
4134-
4135-
gzip_ec_txt = read_file(gzip_ec)
41364120
toy_ec_txt = read_file(toy_ec)
41374121

41384122
test_ec = os.path.join(self.test_prefix, 'test.eb')
@@ -4149,115 +4133,42 @@ def test_fix_deprecated_easyconfigs(self):
41494133
regex = re.compile(r'^(toolchain\s*=.*)$', re.M)
41504134
test_ectxt = regex.sub(r'\1\n\nsome_list = [x + "1" for x in ["one", "two", "three"]]', test_ectxt)
41514135

4152-
# test fixing the use of 'dummy' toolchain to SYSTEM
4153-
tc_regex = re.compile('^toolchain = .*', re.M)
4154-
tc_strs = [
4155-
"{'name': 'dummy', 'version': 'dummy'}",
4156-
"{'name': 'dummy', 'version': ''}",
4157-
"{'name': 'dummy', 'version': '1.2.3'}",
4158-
"{'version': '', 'name': 'dummy'}",
4159-
"{'version': 'dummy', 'name': 'dummy'}",
4160-
]
4161-
41624136
unknown_params_error_pattern = "Use of 2 unknown easyconfig parameters detected in test.eb: foo, some_list"
41634137

4164-
for tc_str in tc_strs:
4165-
# first check if names of local variables get fixed if 'dummy' toolchain is not used
4166-
init_config(build_options={'local_var_naming_check': 'error', 'silent': True})
4167-
4168-
write_file(test_ec, test_ectxt)
4169-
self.assertErrorRegex(EasyBuildError, unknown_params_error_pattern, EasyConfig, test_ec)
4170-
4171-
self.mock_stderr(True)
4172-
self.mock_stdout(True)
4173-
fix_deprecated_easyconfigs([test_ec])
4174-
stderr, stdout = self.get_stderr(), self.get_stdout()
4175-
self.mock_stderr(False)
4176-
self.mock_stdout(False)
4177-
self.assertFalse(stderr)
4178-
self.assertIn("test.eb... FIXED!", stdout)
4179-
4180-
# parsing now works
4181-
ec = EasyConfig(test_ec)
4182-
4183-
# cleanup
4184-
remove_file(glob.glob(os.path.join(test_ec + '.orig*'))[0])
4185-
4186-
# now inject use of 'dummy' toolchain
4187-
write_file(test_ec, tc_regex.sub("toolchain = %s" % tc_str, test_ectxt))
4188-
4189-
test_ec_txt = read_file(test_ec)
4190-
regex = re.compile("^toolchain = {.*'name': 'dummy'.*$", re.M)
4191-
self.assertTrue(regex.search(test_ec_txt), "Pattern '%s' found in: %s" % (regex.pattern, test_ec_txt))
4192-
4193-
# mimic default behaviour where only warnings are being printed;
4194-
# use of dummy toolchain or local variables not following recommended naming scheme is not fatal by default
4195-
init_config(build_options={'local_var_naming_check': 'warn', 'silent': False})
4196-
self.mock_stderr(True)
4197-
self.mock_stdout(True)
4198-
ec = EasyConfig(test_ec)
4199-
stderr, stdout = self.get_stderr(), self.get_stdout()
4200-
self.mock_stderr(False)
4201-
self.mock_stdout(False)
4202-
4203-
self.assertFalse(stdout)
4204-
4205-
warnings = [
4206-
"WARNING: Use of 2 unknown easyconfig parameters detected in test.eb: foo, some_list",
4207-
"Use of 'dummy' toolchain is deprecated, use 'system' toolchain instead",
4208-
]
4209-
for warning in warnings:
4210-
self.assertIn(warning, stderr)
4211-
4212-
init_config(build_options={'local_var_naming_check': 'error', 'silent': True})
4213-
4214-
# easyconfig doesn't parse because of local variables with name other than 'local_*'
4215-
self.assertErrorRegex(EasyBuildError, unknown_params_error_pattern, EasyConfig, test_ec)
4216-
4217-
self.mock_stderr(True)
4218-
self.mock_stdout(True)
4219-
fix_deprecated_easyconfigs([toy_ec, test_ec, gzip_ec])
4220-
stderr, stdout = self.get_stderr(), self.get_stdout()
4221-
self.mock_stderr(False)
4222-
self.mock_stdout(False)
4223-
4224-
ectxt = read_file(test_ec)
4225-
self.assertFalse(regex.search(ectxt), "Pattern '%s' *not* found in: %s" % (regex.pattern, ectxt))
4226-
regex = re.compile("^toolchain = SYSTEM$", re.M)
4227-
self.assertTrue(regex.search(ectxt), "Pattern '%s' found in: %s" % (regex.pattern, ectxt))
4228-
4229-
self.assertEqual(gzip_ec_txt, read_file(gzip_ec))
4230-
self.assertEqual(toy_ec_txt, read_file(toy_ec))
4231-
self.assertTrue(test_ec_txt != read_file(test_ec))
4138+
# check if names of local variables get fixed
4139+
init_config(build_options={'local_var_naming_check': 'error', 'silent': True})
42324140

4233-
# original easyconfig is backed up automatically
4234-
test_ecs = sorted([f for f in os.listdir(self.test_prefix) if f.startswith('test.eb')])
4235-
self.assertEqual(len(test_ecs), 2)
4236-
backup_test_ec = os.path.join(self.test_prefix, test_ecs[1])
4237-
self.assertEqual(test_ec_txt, read_file(backup_test_ec))
4141+
write_file(test_ec, test_ectxt)
4142+
self.assertErrorRegex(EasyBuildError, unknown_params_error_pattern, EasyConfig, test_ec)
42384143

4239-
remove_file(backup_test_ec)
4144+
self.mock_stderr(True)
4145+
self.mock_stdout(True)
4146+
fix_deprecated_easyconfigs([test_ec])
4147+
stderr, stdout = self.get_stderr(), self.get_stdout()
4148+
self.mock_stderr(False)
4149+
self.mock_stdout(False)
4150+
self.assertFalse(stderr)
4151+
self.assertIn("test.eb... FIXED!", stdout)
42404152

4241-
# parsing works now, toolchain is replaced with system toolchain
4242-
ec = EasyConfig(test_ec)
4243-
self.assertEqual(ec['toolchain'], {'name': 'system', 'version': 'system'})
4244-
self.assertEqual(ec['configopts'], "--foobar --barfoo --barfoobaz")
4153+
# parsing now works
4154+
ec = EasyConfig(test_ec)
4155+
self.assertEqual(ec['configopts'], "--foobar --barfoo --barfoobaz")
4156+
self.assertFalse(stderr)
4157+
stdout = stdout.split('\n')
4158+
self.assertEqual(len(stdout), 6)
4159+
patterns = [
4160+
r"^\* \[1/1\] fixing .*/test.eb\.\.\. FIXED!$",
4161+
r"^\s*\(changes made in place, original copied to .*/test.eb.orig_[0-9_]+\)$",
4162+
r'^$',
4163+
r"^All done! Fixed 1 easyconfigs \(out of 1 found\).$",
4164+
r'^$',
4165+
r'^$',
4166+
]
4167+
for idx, pattern in enumerate(patterns):
4168+
self.assertTrue(re.match(pattern, stdout[idx]), "Pattern '%s' matches '%s'" % (pattern, stdout[idx]))
42454169

4246-
self.assertFalse(stderr)
4247-
stdout = stdout.split('\n')
4248-
self.assertEqual(len(stdout), 8)
4249-
patterns = [
4250-
r"^\* \[1/3\] fixing .*/t/toy/toy-0.0.eb\.\.\. \(no changes made\)$",
4251-
r"^\* \[2/3\] fixing .*/test.eb\.\.\. FIXED!$",
4252-
r"^\s*\(changes made in place, original copied to .*/test.eb.orig_[0-9_]+\)$",
4253-
r"^\* \[3/3\] fixing .*/g/gzip/gzip-1.4.eb\.\.\. \(no changes made\)$",
4254-
r'^$',
4255-
r"^All done! Fixed 1 easyconfigs \(out of 3 found\).$",
4256-
r'^$',
4257-
r'^$',
4258-
]
4259-
for idx, pattern in enumerate(patterns):
4260-
self.assertTrue(re.match(pattern, stdout[idx]), "Pattern '%s' matches '%s'" % (pattern, stdout[idx]))
4170+
# cleanup
4171+
remove_file(glob.glob(os.path.join(test_ec + '.orig*'))[0])
42614172

42624173
def test_parse_list_comprehension_scope(self):
42634174
"""Test parsing of an easyconfig file that uses a local variable in list comprehension."""

0 commit comments

Comments
 (0)