diff --git a/easybuild/framework/easyconfig/easyconfig.py b/easybuild/framework/easyconfig/easyconfig.py index 4d8fc2d782..f4c4be464e 100644 --- a/easybuild/framework/easyconfig/easyconfig.py +++ b/easybuild/framework/easyconfig/easyconfig.py @@ -834,14 +834,16 @@ def check_deprecated(self, path): deprecated = self['deprecated'] if deprecated: if isinstance(deprecated, string_type): - depr_msgs.append("easyconfig file '%s' is marked as deprecated:\n%s\n" % (path, deprecated)) + if 'easyconfig' not in build_option('silence_deprecation_warnings'): + depr_msgs.append("easyconfig file '%s' is marked as deprecated:\n%s\n" % (path, deprecated)) else: raise EasyBuildError("Wrong type for value of 'deprecated' easyconfig parameter: %s", type(deprecated)) if self.toolchain.is_deprecated(): # allow use of deprecated toolchains when running unit tests, # because test easyconfigs/modules often use old toolchain versions (and updating them is far from trivial) - if not build_option('unit_testing_mode'): + if (not build_option('unit_testing_mode') + and 'toolchain' not in build_option('silence_deprecation_warnings')): depr_msgs.append("toolchain '%(name)s/%(version)s' is marked as deprecated" % self['toolchain']) if depr_msgs: diff --git a/easybuild/main.py b/easybuild/main.py index 5dc6eff54c..319c80b5ae 100644 --- a/easybuild/main.py +++ b/easybuild/main.py @@ -603,8 +603,7 @@ def main(args=None, logfile=None, do_build=None, testing=False, modtool=None): eb_go, cfg_settings = set_up_configuration(args=args, logfile=logfile, testing=testing) options, orig_paths = eb_go.options, eb_go.args - silence_deprecation_warnings = build_option('silence_deprecation_warnings') or [] - if 'python2' not in silence_deprecation_warnings: + if 'python2' not in build_option('silence_deprecation_warnings'): python2_is_deprecated() global _log diff --git a/easybuild/tools/config.py b/easybuild/tools/config.py index 113addd7e6..43344541e7 100644 --- a/easybuild/tools/config.py +++ b/easybuild/tools/config.py @@ -254,7 +254,6 @@ def mk_full_default_path(name, prefix=DEFAULT_PREFIX): 'rpath_filter', 'rpath_override_dirs', 'required_linked_shared_libs', - 'silence_deprecation_warnings', 'skip', 'stop', 'subdir_user_modules', @@ -335,6 +334,7 @@ def mk_full_default_path(name, prefix=DEFAULT_PREFIX): 'include_easyblocks_from_pr', 'robot', 'search_paths', + 'silence_deprecation_warnings', ], WARN: [ 'check_ebroot_env_vars', diff --git a/easybuild/tools/modules.py b/easybuild/tools/modules.py index 5832cd8082..386643e706 100644 --- a/easybuild/tools/modules.py +++ b/easybuild/tools/modules.py @@ -274,9 +274,7 @@ def set_and_check_version(self): depr_msg = "Support for %s version < %s is deprecated, " % (self.NAME, self.DEPR_VERSION) depr_msg += "found version %s" % self.version - silence_deprecation_warnings = build_option('silence_deprecation_warnings') or [] - - if self.version.startswith('6') and 'Lmod6' in silence_deprecation_warnings: + if self.version.startswith('6') and 'Lmod6' in build_option('silence_deprecation_warnings'): self.log.warning(depr_msg) else: self.log.deprecated(depr_msg, '5.0') diff --git a/easybuild/tools/options.py b/easybuild/tools/options.py index 7fcd0dea0e..57ac2b89ef 100644 --- a/easybuild/tools/options.py +++ b/easybuild/tools/options.py @@ -339,6 +339,8 @@ def override_options(self): # override options descr = ("Override options", "Override default EasyBuild behavior.") + all_deprecations = ('python2', 'Lmod6', 'easyconfig', 'toolchain') + opts = OrderedDict({ 'accept-eula': ("Accept EULA for specified software [DEPRECATED, use --accept-eula-for instead!]", 'strlist', 'store', []), @@ -494,7 +496,9 @@ def override_options(self): 'set-default-module': ("Set the generated module as default", None, 'store_true', False), 'set-gid-bit': ("Set group ID bit on newly created directories", None, 'store_true', False), 'show-progress-bar': ("Show progress bar in terminal output", None, 'store_true', True), - 'silence-deprecation-warnings': ("Silence specified deprecation warnings", 'strlist', 'extend', None), + 'silence-deprecation-warnings': ( + "Silence specified deprecation warnings out of (%s)" % ', '.join(all_deprecations), + 'strlist', 'extend', []), 'skip-extensions': ("Skip installation of extensions", None, 'store_true', False), 'skip-test-cases': ("Skip running test cases", None, 'store_true', False, 't'), 'skip-test-step': ("Skip running the test step (e.g. unit tests)", None, 'store_true', False), diff --git a/test/framework/easyconfig.py b/test/framework/easyconfig.py index 54b0cccfc7..477a8d5960 100644 --- a/test/framework/easyconfig.py +++ b/test/framework/easyconfig.py @@ -3819,6 +3819,26 @@ def test_deprecated(self): error_pattern = r"easyconfig file '.*/test.eb' is marked as deprecated:\nthis is just a test\n \(see also" self.assertErrorRegex(EasyBuildError, error_pattern, EasyConfig, test_ec) + with self.mocked_stdout_stderr(): + # But this can be silenced + init_config(build_options={'silence_deprecation_warnings': ['easyconfig']}) + EasyConfig(test_ec) + self.assertFalse(self.get_stderr()) + self.assertFalse(self.get_stdout()) + + def test_deprecated_toolchain(self): + """Test use of deprecated toolchain""" + topdir = os.path.dirname(os.path.abspath(__file__)) + deprecated_toolchain_ec = os.path.join(topdir, 'easyconfigs', 'test_ecs', 't', 'toy', 'toy-0.0-gompi-2018a.eb') + init_config(build_options={'silence_deprecation_warnings': [], 'unit_testing_mode': False}) + error_pattern = r"toolchain 'gompi/2018a' is marked as deprecated \(see also" + self.assertErrorRegex(EasyBuildError, error_pattern, EasyConfig, deprecated_toolchain_ec) + with self.mocked_stdout_stderr(): + # But this can be silenced + init_config(build_options={'silence_deprecation_warnings': ['toolchain'], 'unit_testing_mode': False}) + EasyConfig(deprecated_toolchain_ec) + self.assertFalse(self.get_stderr()) + self.assertFalse(self.get_stdout()) def test_filename(self): """Test filename method of EasyConfig class."""