From 86946e8998fd6ab9e296ff580d64f2712b2bf48d Mon Sep 17 00:00:00 2001 From: Viktor Rehnberg Date: Wed, 6 Nov 2024 12:38:42 +0000 Subject: [PATCH 01/87] Pythonpkg fix_python_shebang_for default ['bin/*'] Make fix_python_shebang_for = ['bin/*'] default in PythonPackage easyblock. As discussed in: https://github.com/easybuilders/easybuild-easyblocks/issues/3498 --- easybuild/easyblocks/generic/pythonpackage.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index f45cc6c8e1..1e896bb6f7 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -413,6 +413,9 @@ def extra_options(extra_vars=None): "The template %(python)s will be replace by the currently used Python binary.", CUSTOM], 'check_ldshared': [None, 'Check Python value of $LDSHARED, correct if needed to "$CC -shared"', CUSTOM], 'download_dep_fail': [True, "Fail if downloaded dependencies are detected", CUSTOM], + 'fix_python_shebang_for': [['bin/*'], "List of files for which Python shebang should be fixed " + "to '#!/usr/bin/env python' (glob patterns supported) " + "(default: ['bin/*'])", CUSTOM] 'install_src': [None, "Source path to pass to the install command (e.g. a whl file)." "Defaults to '.' for unpacked sources or the first source file specified", CUSTOM], 'install_target': ['install', "Option to pass to setup.py", CUSTOM], From 539af08cece2eaca471569276575e8822315b422 Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Thu, 7 Nov 2024 12:41:17 +0100 Subject: [PATCH 02/87] gromacs: make it possible to disable single precision as build target. --- easybuild/easyblocks/g/gromacs.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/easybuild/easyblocks/g/gromacs.py b/easybuild/easyblocks/g/gromacs.py index b73f36ce18..b48f60cc0f 100644 --- a/easybuild/easyblocks/g/gromacs.py +++ b/easybuild/easyblocks/g/gromacs.py @@ -63,6 +63,8 @@ def extra_options(): extra_vars.update({ 'double_precision': [None, "Build with double precision enabled (-DGMX_DOUBLE=ON), " + "default is to build double precision unless CUDA is enabled", CUSTOM], + 'single_precision': [None, "Build with single precision enabled (-DGMX_DOUBLE=OFF), " + + "default is to build single precision", CUSTOM], 'mpisuffix': ['_mpi', "Suffix to append to MPI-enabled executables (only for GROMACS < 4.6)", CUSTOM], 'mpiexec': ['mpirun', "MPI executable to use when running tests", CUSTOM], 'mpiexec_numproc_flag': ['-np', "Flag to introduce the number of MPI tasks when running tests", CUSTOM], @@ -744,10 +746,15 @@ def run_all_steps(self, *args, **kwargs): 'mpi': 'install' } - precisions = ['single'] + precisions = [] + if self.cfg.get('single_precision') is None or self.cfg.get('single_precision'): + precisions.append('single') if self.cfg.get('double_precision') is None or self.cfg.get('double_precision'): precisions.append('double') + if precisions == []: + raise EasyBuildError("No precision selected. At least one of single/double_precision must be unset or True") + mpitypes = ['nompi'] if self.toolchain.options.get('usempi', None): mpitypes.append('mpi') From 16f891048c031853c8a2c98e45939b92c4893869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Thu, 7 Nov 2024 15:57:44 +0100 Subject: [PATCH 03/87] Missing comma --- easybuild/easyblocks/generic/pythonpackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index 1e896bb6f7..4b76d7e14b 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -415,7 +415,7 @@ def extra_options(extra_vars=None): 'download_dep_fail': [True, "Fail if downloaded dependencies are detected", CUSTOM], 'fix_python_shebang_for': [['bin/*'], "List of files for which Python shebang should be fixed " "to '#!/usr/bin/env python' (glob patterns supported) " - "(default: ['bin/*'])", CUSTOM] + "(default: ['bin/*'])", CUSTOM], 'install_src': [None, "Source path to pass to the install command (e.g. a whl file)." "Defaults to '.' for unpacked sources or the first source file specified", CUSTOM], 'install_target': ['install', "Option to pass to setup.py", CUSTOM], From 1d17e414e2db7c6f1cc05ade46749332bbe6e467 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 25 Oct 2023 11:33:07 +0200 Subject: [PATCH 04/87] Error out on unknown configure args --- easybuild/easyblocks/generic/configuremake.py | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/easybuild/easyblocks/generic/configuremake.py b/easybuild/easyblocks/generic/configuremake.py index f84f4dad45..33fbea7b5b 100644 --- a/easybuild/easyblocks/generic/configuremake.py +++ b/easybuild/easyblocks/generic/configuremake.py @@ -45,11 +45,12 @@ from easybuild.easyblocks import VERSION as EASYBLOCKS_VERSION from easybuild.framework.easyblock import EasyBlock from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools.build_log import print_warning -from easybuild.tools.config import source_paths, build_option +from easybuild.tools.build_log import print_warning, EasyBuildError +from easybuild.tools.config import source_paths, build_option, ERROR, IGNORE, WARN from easybuild.tools.filetools import CHECKSUM_TYPE_SHA256, adjust_permissions, compute_checksum, download_file from easybuild.tools.filetools import read_file, remove_file -from easybuild.tools.run import run_shell_cmd +from easybuild.tools.run import extract_errors_from_log, run_shell_cmd +from easybuild.tools.utilities import nub # string that indicates that a configure script was generated by Autoconf # note: bytes string since this constant is used to check the contents of 'configure' which is read as bytes @@ -195,6 +196,11 @@ def extra_options(extra_vars=None): 'tar_config_opts': [False, "Override tar settings as determined by configure.", CUSTOM], 'test_cmd': [None, "Test command to use ('runtest' value is appended, default: '%s')" % DEFAULT_TEST_CMD, CUSTOM], + 'unrecognized_configure_options': [ERROR, + "Action to do when unrecognized arguments passed to ./configure are" + " detected, defaults to aborting the build. Can be set to '" + WARN + + "' or '" + IGNORE + "' (NOT RECOMMENDED! It might hide actual errors" + " e.g. misspelling of intended or changed options)", CUSTOM], }) return extra_vars @@ -325,6 +331,24 @@ def configure_step(self, cmd_prefix=''): res = run_shell_cmd(cmd) + action = self.cfg['unrecognized_configure_options'] + valid_actions = (ERROR, WARN, IGNORE) + # Always verify the EC param + if action not in valid_actions: + raise EasyBuildError('Invalid value for `unrecognized_configure_options`: %s. Must be one of: ', + action, ', '.join(valid_actions)) + if action != IGNORE: + unrecognized_options_str = 'configure: WARNING: unrecognized options:' + unrecognized_options = extract_errors_from_log(res.output, unrecognized_options_str)[1] + # Keep only unique options (remove the warning string and strip whitespace) + unrecognized_options = nub(x.split(unrecognized_options_str)[-1].strip() for x in unrecognized_options) + if unrecognized_options: + msg = 'Found unrecognized configure options: ' + '; '.join(unrecognized_options) + if action == WARN: + print_warning(msg) + else: + raise EasyBuildError(msg) + return res.output def build_step(self, verbose=None, path=None): From 2739cf0a4f720797140a748fbbc51c126c29d9df Mon Sep 17 00:00:00 2001 From: Ake Sandgren Date: Mon, 11 Nov 2024 07:46:10 +0100 Subject: [PATCH 05/87] gromacs: make single precision default value True. --- easybuild/easyblocks/g/gromacs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/g/gromacs.py b/easybuild/easyblocks/g/gromacs.py index b48f60cc0f..4450448b86 100644 --- a/easybuild/easyblocks/g/gromacs.py +++ b/easybuild/easyblocks/g/gromacs.py @@ -63,7 +63,7 @@ def extra_options(): extra_vars.update({ 'double_precision': [None, "Build with double precision enabled (-DGMX_DOUBLE=ON), " + "default is to build double precision unless CUDA is enabled", CUSTOM], - 'single_precision': [None, "Build with single precision enabled (-DGMX_DOUBLE=OFF), " + + 'single_precision': [True, "Build with single precision enabled (-DGMX_DOUBLE=OFF), " + "default is to build single precision", CUSTOM], 'mpisuffix': ['_mpi', "Suffix to append to MPI-enabled executables (only for GROMACS < 4.6)", CUSTOM], 'mpiexec': ['mpirun', "MPI executable to use when running tests", CUSTOM], @@ -747,7 +747,7 @@ def run_all_steps(self, *args, **kwargs): } precisions = [] - if self.cfg.get('single_precision') is None or self.cfg.get('single_precision'): + if self.cfg.get('single_precision'): precisions.append('single') if self.cfg.get('double_precision') is None or self.cfg.get('double_precision'): precisions.append('double') From 2e6170594f564c918262779931f045886a80ac52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Tue, 12 Nov 2024 23:48:20 +0100 Subject: [PATCH 06/87] QuantumESPRESSO: Let internal EasyBlock not create a log file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes the increased memory usage when running the EasyConfig test suite as log files would stay open. Signed-off-by: Jan André Reuter --- easybuild/easyblocks/q/quantumespresso.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyblocks/q/quantumespresso.py b/easybuild/easyblocks/q/quantumespresso.py index 162abde86b..d5607d1581 100644 --- a/easybuild/easyblocks/q/quantumespresso.py +++ b/easybuild/easyblocks/q/quantumespresso.py @@ -28,6 +28,7 @@ @author: Kenneth Hoste (Ghent University) @author: Ake Sandgren (HPC2N, Umea University) @author: Davide Grassano (CECAM, EPFL) +@author: Jan Reuter (Juelich Supercomputing Centre) """ import fileinput @@ -84,6 +85,8 @@ def __init__(self, ec, *args, **kwargs): # Required to avoid CMakeMake default extra_opts to override the ConfigMake ones new_ec = EasyConfig(ec.path, extra_options=eb.extra_options()) + # Disable log file for nested EasyBlock + kwargs['logfile'] = self.logfile self.ebclass = eb(new_ec, *args, **kwargs) class EB_QuantumESPRESSOcmake(CMakeMake): From 8c30f6ba11b500b69776d98447216008d14b67c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Fri, 22 Nov 2024 16:53:36 +0100 Subject: [PATCH 07/87] Move sitecustomize.py into site-packages --- easybuild/easyblocks/p/python.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/easybuild/easyblocks/p/python.py b/easybuild/easyblocks/p/python.py index 01355b23e5..f7372845a8 100644 --- a/easybuild/easyblocks/p/python.py +++ b/easybuild/easyblocks/p/python.py @@ -142,9 +142,6 @@ def __init__(self, *args, **kwargs): self.pyshortver = '.'.join(self.version.split('.')[:2]) - # Used for EBPYTHONPREFIXES handler script - self.pythonpath = os.path.join(log_path(), 'python') - ext_defaults = { # Use PYPI_SOURCE as the default for source_urls of extensions. 'source_urls': [PYPI_SOURCE], @@ -504,7 +501,8 @@ def install_step(self): symlink('pip' + self.pyshortver, pip_binary_path, use_abspath_source=False) if self.cfg.get('ebpythonprefixes'): - write_file(os.path.join(self.installdir, self.pythonpath, 'sitecustomize.py'), SITECUSTOMIZE) + site_packages_path = os.path.join('lib', 'python' + self.pyshortver, 'site-packages') + write_file(os.path.join(self.installdir, site_packages_path, 'sitecustomize.py'), SITECUSTOMIZE) # symlink lib/python*/lib-dynload to lib64/python*/lib-dynload if it doesn't exist; # see https://github.com/easybuilders/easybuild-easyblocks/issues/1957 @@ -640,7 +638,16 @@ def make_module_extra(self, *args, **kwargs): """Add path to sitecustomize.py to $PYTHONPATH""" txt = super(EB_Python, self).make_module_extra() + # Legacy support for existing installations doing "--rebuild --module-only" if self.cfg.get('ebpythonprefixes'): - txt += self.module_generator.prepend_paths(PYTHONPATH, self.pythonpath) + new_dir = os.path.join('lib', 'python' + self.pyshortver, 'site-packages') + old_dir = os.path.join(log_path(), 'python') + if not os.path.exists(os.path.join(self.installdir, new_dir, 'sitecustomize.py')): + if not os.path.exists(os.path.join(self.installdir, old_dir, 'sitecustomize.py')): + raise EasyBuildError("sitecustomize.py is missing from installation.") + else: + txt += self.module_generator.prepend_paths(PYTHONPATH, os.path.join(self.installdir, old_dir)) + + return txt From f573a3978502e315554a097f68833fa53ca6adf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Fri, 22 Nov 2024 17:45:42 +0100 Subject: [PATCH 08/87] Remove error since it breaks CI --- easybuild/easyblocks/p/python.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/easybuild/easyblocks/p/python.py b/easybuild/easyblocks/p/python.py index f7372845a8..f4f66dfbb8 100644 --- a/easybuild/easyblocks/p/python.py +++ b/easybuild/easyblocks/p/python.py @@ -643,11 +643,6 @@ def make_module_extra(self, *args, **kwargs): new_dir = os.path.join('lib', 'python' + self.pyshortver, 'site-packages') old_dir = os.path.join(log_path(), 'python') if not os.path.exists(os.path.join(self.installdir, new_dir, 'sitecustomize.py')): - if not os.path.exists(os.path.join(self.installdir, old_dir, 'sitecustomize.py')): - raise EasyBuildError("sitecustomize.py is missing from installation.") - else: - txt += self.module_generator.prepend_paths(PYTHONPATH, os.path.join(self.installdir, old_dir)) - - + txt += self.module_generator.prepend_paths(PYTHONPATH, os.path.join(self.installdir, old_dir)) return txt From db0e35b05346ab964182121e71fee220ba7c6157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Fri, 22 Nov 2024 17:51:03 +0100 Subject: [PATCH 09/87] Fix using relative path --- easybuild/easyblocks/p/python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/p/python.py b/easybuild/easyblocks/p/python.py index f4f66dfbb8..0d2b61d106 100644 --- a/easybuild/easyblocks/p/python.py +++ b/easybuild/easyblocks/p/python.py @@ -643,6 +643,6 @@ def make_module_extra(self, *args, **kwargs): new_dir = os.path.join('lib', 'python' + self.pyshortver, 'site-packages') old_dir = os.path.join(log_path(), 'python') if not os.path.exists(os.path.join(self.installdir, new_dir, 'sitecustomize.py')): - txt += self.module_generator.prepend_paths(PYTHONPATH, os.path.join(self.installdir, old_dir)) + txt += self.module_generator.prepend_paths(PYTHONPATH, old_dir) return txt From 6d6f56f07e4b45b8ae66e8b2d430cd198f5425fd Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 23 Nov 2024 16:35:28 +0000 Subject: [PATCH 10/87] remove use of deprecated parse_log_for_error in rpackage --- easybuild/easyblocks/generic/rpackage.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/generic/rpackage.py b/easybuild/easyblocks/generic/rpackage.py index c7aabcc36a..b2b5221ce8 100644 --- a/easybuild/easyblocks/generic/rpackage.py +++ b/easybuild/easyblocks/generic/rpackage.py @@ -43,7 +43,7 @@ from easybuild.tools.build_log import EasyBuildError, print_warning from easybuild.tools.environment import setvar from easybuild.tools.filetools import mkdir, copy_file -from easybuild.tools.run import run_shell_cmd, parse_log_for_error +from easybuild.tools.run import run_shell_cmd def make_R_install_option(opt, values, cmdline=False): @@ -183,8 +183,16 @@ def check_install_output(self, output): """ Check output of installation command, and clean up installation if needed. """ - errors = parse_log_for_error(output, regExp="^ERROR:") + reg = re.compile("^ERROR:", re.I) + + errors = [] + for line in output.split('\n'): + r = reg.search(line) + if r: + errors.append([line, r.groups()]) + if errors: + self.log.info("R package %s failed with error:\n%s", self.name, '\n'.join([x[0] for x in res])) self.handle_installation_errors() cmd = "R -q --no-save" stdin = """ From ddb6c94e3b9eb90b650591aefdcf77f8d71a3bad Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 23 Nov 2024 16:36:30 +0000 Subject: [PATCH 11/87] oops --- easybuild/easyblocks/generic/rpackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/rpackage.py b/easybuild/easyblocks/generic/rpackage.py index b2b5221ce8..1fcca38db8 100644 --- a/easybuild/easyblocks/generic/rpackage.py +++ b/easybuild/easyblocks/generic/rpackage.py @@ -192,7 +192,7 @@ def check_install_output(self, output): errors.append([line, r.groups()]) if errors: - self.log.info("R package %s failed with error:\n%s", self.name, '\n'.join([x[0] for x in res])) + self.log.info("R package %s failed with error:\n%s", self.name, '\n'.join([x[0] for x in errors])) self.handle_installation_errors() cmd = "R -q --no-save" stdin = """ From dd3f00a5db62e44729b6193ee52edf556698a56f Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 24 Nov 2024 11:05:19 +0100 Subject: [PATCH 12/87] add CUPTI and nvvm lib dirs to LIBRARY_PATH --- easybuild/easyblocks/c/cuda.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/c/cuda.py b/easybuild/easyblocks/c/cuda.py index 10d6bc3083..022f6ef95d 100644 --- a/easybuild/easyblocks/c/cuda.py +++ b/easybuild/easyblocks/c/cuda.py @@ -43,7 +43,7 @@ from easybuild.easyblocks.generic.binary import Binary from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.config import IGNORE +from easybuild.tools.config import build_option, IGNORE from easybuild.tools.filetools import adjust_permissions, change_dir, copy_dir, expand_glob_paths from easybuild.tools.filetools import patch_perl_script_autoflush, remove_file, symlink, which, write_file from easybuild.tools.run import run_cmd, run_cmd_qa @@ -356,10 +356,18 @@ def make_module_req_guess(self): lib_path.append(os.path.join('nvvm', 'lib64')) inc_path.append(os.path.join('nvvm', 'include')) + library_path = ['lib64', os.path.join('stubs', 'lib64')] + # add lib_path entries to library_path when LD_LIBRARY_PATH is filtered + # and LIBRARY_PATH is not filtered. + # E.g. in an environment such as EESSI. + filtered_env_vars = build_option('filter_env_vars') or [] + if 'LD_LIBRARY_PATH' in filtered_env_vars and 'LIBRARY_PATH' not in filtered_env_vars: + library_path += lib_path + guesses.update({ 'CPATH': inc_path, 'LD_LIBRARY_PATH': lib_path, - 'LIBRARY_PATH': ['lib64', os.path.join('stubs', 'lib64')], + 'LIBRARY_PATH': library_path, 'PATH': bin_path, 'PKG_CONFIG_PATH': ['pkgconfig'], }) From 5077104baf2e0c80d035ba65e5bca3e4d7ce30d1 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Mon, 25 Nov 2024 14:54:54 +0100 Subject: [PATCH 13/87] simplify change --- easybuild/easyblocks/c/cuda.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/easybuild/easyblocks/c/cuda.py b/easybuild/easyblocks/c/cuda.py index 022f6ef95d..a56275f957 100644 --- a/easybuild/easyblocks/c/cuda.py +++ b/easybuild/easyblocks/c/cuda.py @@ -43,7 +43,7 @@ from easybuild.easyblocks.generic.binary import Binary from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.config import build_option, IGNORE +from easybuild.tools.config import IGNORE from easybuild.tools.filetools import adjust_permissions, change_dir, copy_dir, expand_glob_paths from easybuild.tools.filetools import patch_perl_script_autoflush, remove_file, symlink, which, write_file from easybuild.tools.run import run_cmd, run_cmd_qa @@ -356,18 +356,10 @@ def make_module_req_guess(self): lib_path.append(os.path.join('nvvm', 'lib64')) inc_path.append(os.path.join('nvvm', 'include')) - library_path = ['lib64', os.path.join('stubs', 'lib64')] - # add lib_path entries to library_path when LD_LIBRARY_PATH is filtered - # and LIBRARY_PATH is not filtered. - # E.g. in an environment such as EESSI. - filtered_env_vars = build_option('filter_env_vars') or [] - if 'LD_LIBRARY_PATH' in filtered_env_vars and 'LIBRARY_PATH' not in filtered_env_vars: - library_path += lib_path - guesses.update({ 'CPATH': inc_path, 'LD_LIBRARY_PATH': lib_path, - 'LIBRARY_PATH': library_path, + 'LIBRARY_PATH': lib_path + [os.path.join('stubs', 'lib64')], 'PATH': bin_path, 'PKG_CONFIG_PATH': ['pkgconfig'], }) From 2a963bb1b623b42164c9c0125edf2a8bedd100e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Nov 2024 17:16:56 +0100 Subject: [PATCH 14/87] force use of bash for Allwmake scripts --- easybuild/easyblocks/o/openfoam.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/o/openfoam.py b/easybuild/easyblocks/o/openfoam.py index 88ae377417..fd9d892c7a 100644 --- a/easybuild/easyblocks/o/openfoam.py +++ b/easybuild/easyblocks/o/openfoam.py @@ -340,7 +340,7 @@ def build_step(self): cleancmd = "wcleanAll" # make directly in install directory - cmd_tmpl = "%(precmd)s && %(cleancmd)s && %(prebuildopts)s %(makecmd)s" % { + cmd_tmpl = "%(precmd)s && %(cleancmd)s && %(prebuildopts)s bash %(makecmd)s" % { 'precmd': precmd, 'cleancmd': cleancmd, 'prebuildopts': self.cfg['prebuildopts'], @@ -371,7 +371,7 @@ def build_step(self): if self.looseversion >= LooseVersion('2406'): # Also build the plugins - cmd += ' && %s %s -log' % (self.cfg['prebuildopts'], + cmd += ' && %s bash %s -log' % (self.cfg['prebuildopts'], os.path.join(self.builddir, self.openfoamdir, 'Allwmake-plugins')) run_cmd(cmd_tmpl % cmd, log_all=True, simple=True, log_output=True) From e4a3ff1932350d575dffc7597435609fad6dd691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Nov 2024 17:18:58 +0100 Subject: [PATCH 15/87] fix indentation --- easybuild/easyblocks/o/openfoam.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/o/openfoam.py b/easybuild/easyblocks/o/openfoam.py index fd9d892c7a..4ffa5e98d6 100644 --- a/easybuild/easyblocks/o/openfoam.py +++ b/easybuild/easyblocks/o/openfoam.py @@ -372,7 +372,7 @@ def build_step(self): if self.looseversion >= LooseVersion('2406'): # Also build the plugins cmd += ' && %s bash %s -log' % (self.cfg['prebuildopts'], - os.path.join(self.builddir, self.openfoamdir, 'Allwmake-plugins')) + os.path.join(self.builddir, self.openfoamdir, 'Allwmake-plugins')) run_cmd(cmd_tmpl % cmd, log_all=True, simple=True, log_output=True) From b0f4de0982a09e3af40689641eb0dbc578b3f654 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 28 Nov 2024 09:40:35 +0100 Subject: [PATCH 16/87] fix detection of math library in numpy build --- easybuild/easyblocks/n/numpy.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/easybuild/easyblocks/n/numpy.py b/easybuild/easyblocks/n/numpy.py index 968cefa919..a29dda4ded 100644 --- a/easybuild/easyblocks/n/numpy.py +++ b/easybuild/easyblocks/n/numpy.py @@ -204,6 +204,17 @@ def get_libs_for_mkl(varname): 'includes': includes, } + numpy_version = LooseVersion(self.version) + + if numpy_version < '1.26': + # NumPy detects the required math by trying to link a minimal code containing a call to `log(0.)`. + # The first try is without any libraries, which works with `gcc -fno-math-errno` (our optimization default) + # because the call gets removed due to not having any effect. So it concludes that `-lm` is not required. + # This then fails to detect availability of functions such as `acosh` which do not get removed in the same + # way and so less exact replacements are used instead which e.g. fail the tests on PPC. + # This variable makes it try `-lm` first and is supported until the Meson backend is used in 1.26+. + env.setvar('MATHLIB', 'm') + super(EB_numpy, self).configure_step() if LooseVersion(self.version) < LooseVersion('1.21'): From 259051b07ac70b65ea2815cb717c4df2550ba8c5 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 28 Nov 2024 10:52:49 +0100 Subject: [PATCH 17/87] Remove `numpy_version` variable again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jan André Reuter --- easybuild/easyblocks/n/numpy.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/easybuild/easyblocks/n/numpy.py b/easybuild/easyblocks/n/numpy.py index a29dda4ded..e1b92eca55 100644 --- a/easybuild/easyblocks/n/numpy.py +++ b/easybuild/easyblocks/n/numpy.py @@ -204,9 +204,7 @@ def get_libs_for_mkl(varname): 'includes': includes, } - numpy_version = LooseVersion(self.version) - - if numpy_version < '1.26': + if LooseVersion(self.version) < LooseVersion('1.26'): # NumPy detects the required math by trying to link a minimal code containing a call to `log(0.)`. # The first try is without any libraries, which works with `gcc -fno-math-errno` (our optimization default) # because the call gets removed due to not having any effect. So it concludes that `-lm` is not required. From d1c3e886ad9aea87e3d15fbb5eb8c7302e0a32f5 Mon Sep 17 00:00:00 2001 From: Stefan Wolfsheimer Date: Fri, 29 Nov 2024 07:57:16 +0100 Subject: [PATCH 18/87] WRF: set NETCFF env variable --- easybuild/easyblocks/w/wrf.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/w/wrf.py b/easybuild/easyblocks/w/wrf.py index 3c9c76f18e..76463fcb8f 100644 --- a/easybuild/easyblocks/w/wrf.py +++ b/easybuild/easyblocks/w/wrf.py @@ -95,8 +95,10 @@ def configure_step(self): wrfdir = os.path.join(self.builddir, self.wrfsubdir) - # define $NETCDF* for netCDF dependency (used when creating WRF module file) - set_netcdf_env_vars(self.log) + set_netcdf_env_vars(self.log) + netcdf_fortran = get_software_root('NETCDFMINFORTRAN') + if netcdf_fortran: + env.setvar('NETCDFF', netcdf_fortran) # HDF5 (optional) dependency hdf5 = get_software_root('HDF5') From df15a8daa45a22694b301528842e327aa68ddafc Mon Sep 17 00:00:00 2001 From: Stefan Wolfsheimer Date: Fri, 29 Nov 2024 09:48:54 +0100 Subject: [PATCH 19/87] wps.py: set NETCDFF_DIR --- easybuild/easyblocks/w/wps.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyblocks/w/wps.py b/easybuild/easyblocks/w/wps.py index 6549d493d0..73f6359899 100644 --- a/easybuild/easyblocks/w/wps.py +++ b/easybuild/easyblocks/w/wps.py @@ -106,6 +106,9 @@ def configure_step(self): wrfdir = os.path.join(wrf, det_wrf_subdir(get_software_version('WRF'))) else: raise EasyBuildError("WRF module not loaded?") + netcdf_fortran = get_software_root('NETCDFMINFORTRAN') + if netcdf_fortran: + env.setvar('NETCDFF_DIR', netcdf_fortran) self.compile_script = 'compile' From 2c6f0e3e95bddc12e9f947c5bb9275876f1bfcfb Mon Sep 17 00:00:00 2001 From: Stefan Wolfsheimer Date: Fri, 29 Nov 2024 13:52:37 +0100 Subject: [PATCH 20/87] fix PEP8 --- easybuild/easyblocks/w/wrf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/w/wrf.py b/easybuild/easyblocks/w/wrf.py index 76463fcb8f..696237f551 100644 --- a/easybuild/easyblocks/w/wrf.py +++ b/easybuild/easyblocks/w/wrf.py @@ -95,7 +95,7 @@ def configure_step(self): wrfdir = os.path.join(self.builddir, self.wrfsubdir) - set_netcdf_env_vars(self.log) + set_netcdf_env_vars(self.log) netcdf_fortran = get_software_root('NETCDFMINFORTRAN') if netcdf_fortran: env.setvar('NETCDFF', netcdf_fortran) From 5d1651491a5c5136bdabb3da9f792a70ca946212 Mon Sep 17 00:00:00 2001 From: Stefan Wolfsheimer Date: Fri, 29 Nov 2024 18:01:25 +0100 Subject: [PATCH 21/87] revert change to wrf.py --- easybuild/easyblocks/w/wrf.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/easybuild/easyblocks/w/wrf.py b/easybuild/easyblocks/w/wrf.py index 696237f551..3c9c76f18e 100644 --- a/easybuild/easyblocks/w/wrf.py +++ b/easybuild/easyblocks/w/wrf.py @@ -95,10 +95,8 @@ def configure_step(self): wrfdir = os.path.join(self.builddir, self.wrfsubdir) + # define $NETCDF* for netCDF dependency (used when creating WRF module file) set_netcdf_env_vars(self.log) - netcdf_fortran = get_software_root('NETCDFMINFORTRAN') - if netcdf_fortran: - env.setvar('NETCDFF', netcdf_fortran) # HDF5 (optional) dependency hdf5 = get_software_root('HDF5') From ee216590a83315ab7e6deaddcdb1030502a3e9fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Sat, 30 Nov 2024 13:43:01 +0100 Subject: [PATCH 22/87] pass the preferred host compiler to the CUDA compiler --- easybuild/easyblocks/generic/cmakemake.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easybuild/easyblocks/generic/cmakemake.py b/easybuild/easyblocks/generic/cmakemake.py index 797a504fb2..b5bd33f250 100644 --- a/easybuild/easyblocks/generic/cmakemake.py +++ b/easybuild/easyblocks/generic/cmakemake.py @@ -328,6 +328,11 @@ def configure_step(self, srcdir=None, builddir=None): # ensure CMake uses EB python, not system or virtualenv python options.update(get_cmake_python_config_dict()) + # pass the preferred host compiler to the CUDA compiler + cuda_root = get_software_root('CUDA') + if cuda_root: + self.cfg.update('preconfigopts', 'CUDAHOSTCXX=%s' % which(os.getenv('CXX', 'g++'))) + if not self.cfg.get('allow_system_boost', False): boost_root = get_software_root('Boost') if boost_root: From 0857b9fbcab2f975408aa59623d128aa75e00d5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 2 Dec 2024 14:15:07 +0100 Subject: [PATCH 23/87] also set CMAKE_CUDA_COMPILER and CMAKE_CUDA_ARCHITECTURES --- easybuild/easyblocks/generic/cmakemake.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/generic/cmakemake.py b/easybuild/easyblocks/generic/cmakemake.py index b5bd33f250..296e6f26fe 100644 --- a/easybuild/easyblocks/generic/cmakemake.py +++ b/easybuild/easyblocks/generic/cmakemake.py @@ -328,10 +328,18 @@ def configure_step(self, srcdir=None, builddir=None): # ensure CMake uses EB python, not system or virtualenv python options.update(get_cmake_python_config_dict()) - # pass the preferred host compiler to the CUDA compiler + # pass the preferred host compiler, CUDA compiler, and CUDA architectures to the CUDA compiler cuda_root = get_software_root('CUDA') if cuda_root: - self.cfg.update('preconfigopts', 'CUDAHOSTCXX=%s' % which(os.getenv('CXX', 'g++'))) + options['CMAKE_CUDA_HOST_COMPILER'] = which(os.getenv('CXX', 'g++')) + options['CMAKE_CUDA_COMPILER'] = 'nvcc' + cuda_cc = build_option('cuda_compute_capabilities') or self.cfg['cuda_compute_capabilities'] + if cuda_cc: + options['CMAKE_CUDA_ARCHITECTURES'] = '"%s"' % ';'.join([cc.replace('.', '') for cc in cuda_cc]) + else: + raise EasyBuildError('List of CUDA compute capabilities must be specified, either via ' + 'cuda_compute_capabilities easyconfig parameter or via ' + '--cuda-compute-capabilities') if not self.cfg.get('allow_system_boost', False): boost_root = get_software_root('Boost') From 90495ed23d26b3d5fd8162bf5d7b4c073a0682fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 2 Dec 2024 14:48:16 +0100 Subject: [PATCH 24/87] use absolute path for nvcc Co-authored-by: ocaisa --- easybuild/easyblocks/generic/cmakemake.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/cmakemake.py b/easybuild/easyblocks/generic/cmakemake.py index 296e6f26fe..3f8e591cd1 100644 --- a/easybuild/easyblocks/generic/cmakemake.py +++ b/easybuild/easyblocks/generic/cmakemake.py @@ -332,7 +332,7 @@ def configure_step(self, srcdir=None, builddir=None): cuda_root = get_software_root('CUDA') if cuda_root: options['CMAKE_CUDA_HOST_COMPILER'] = which(os.getenv('CXX', 'g++')) - options['CMAKE_CUDA_COMPILER'] = 'nvcc' + options['CMAKE_CUDA_COMPILER'] = which('nvcc') cuda_cc = build_option('cuda_compute_capabilities') or self.cfg['cuda_compute_capabilities'] if cuda_cc: options['CMAKE_CUDA_ARCHITECTURES'] = '"%s"' % ';'.join([cc.replace('.', '') for cc in cuda_cc]) From 14c889fcb56a1982be4f06357f3837229d1f9993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Fri, 15 Nov 2024 08:28:42 +0100 Subject: [PATCH 25/87] Reintroduce #3472 after framework changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan André Reuter --- easybuild/easyblocks/generic/bundle.py | 45 ++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index b8abecf8fc..5f098f83d7 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -31,6 +31,7 @@ @author: Pieter De Baets (Ghent University) @author: Jens Timmerman (Ghent University) @author: Jasper Grimm (University of York) +@author: Jan Andre Reuter (Juelich Supercomputing Centre) """ import copy import os @@ -71,8 +72,8 @@ def __init__(self, *args, **kwargs): self.altroot = None self.altversion = None - # list of EasyConfig instances for components - self.comp_cfgs = [] + # list of EasyConfig instances and their EasyBlocks for components + self.comp_instances = [] # list of EasyConfig instances of components for which to run sanity checks self.comp_cfgs_sanity_check = [] @@ -198,7 +199,7 @@ def __init__(self, *args, **kwargs): if comp_cfg['patches']: self.cfg.update('patches', comp_cfg['patches']) - self.comp_cfgs.append(comp_cfg) + self.comp_instances.append((comp_cfg, comp_cfg.easyblock(comp_cfg))) self.cfg.update('checksums', checksums_patches) @@ -217,7 +218,7 @@ def check_checksums(self): """ checksum_issues = super(Bundle, self).check_checksums() - for comp in self.comp_cfgs: + for comp, _ in self.comp_instances: checksum_issues.extend(self.check_checksums_for(comp, sub="of component %s" % comp['name'])) return checksum_issues @@ -247,14 +248,12 @@ def build_step(self): def install_step(self): """Install components, if specified.""" comp_cnt = len(self.cfg['components']) - for idx, cfg in enumerate(self.comp_cfgs): + for idx, (cfg, comp) in enumerate(self.comp_instances): print_msg("installing bundle component %s v%s (%d/%d)..." % (cfg['name'], cfg['version'], idx + 1, comp_cnt)) self.log.info("Installing component %s v%s using easyblock %s", cfg['name'], cfg['version'], cfg.easyblock) - comp = cfg.easyblock(cfg) - # correct build/install dirs comp.builddir = self.builddir comp.install_subdir, comp.installdir = self.install_subdir, self.installdir @@ -324,6 +323,38 @@ def install_step(self): # close log for this component comp.close_log() + def make_module_req_guess(self): + """ + Set module requirements from all comppnents, e.g. $PATH, etc. + During the install step, we only set these requirements temporarily. + Later on when building the module, those paths are not considered. + Therefore, iterate through all the components again and gather + the requirements. + + Do not remove duplicates or check for existance of folders, + as this is done in the generic EasyBlock while creating + the modulefile already. + """ + # Start with the paths from the generic EasyBlock. + # If not added here, they might be missing entirely and fail sanity checks. + final_reqs = super(Bundle, self).make_module_req_guess() + + for cfg, comp in self.comp_instances: + self.log.info("Gathering module paths for component %s v%s", cfg['name'], cfg['version']) + reqs = comp.make_module_req_guess() + + try: + for key, value in sorted(reqs.items()): + if isinstance(reqs, string_type): + value = [value] + final_reqs.setdefault(key, []) + final_reqs[key] += value + except AttributeError: + raise EasyBuildError("Cannot process module requirements of bundle component %s v%s", + cfg['name'], cfg['version']) + + return final_reqs + def make_module_extra(self, *args, **kwargs): """Set extra stuff in module file, e.g. $EBROOT*, $EBVERSION*, etc.""" if not self.altroot and not self.altversion: From fd3cd657cdfc8b209f6660c324a456c575d90080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Fri, 15 Nov 2024 08:33:16 +0100 Subject: [PATCH 26/87] Update clang_aomp for bundle changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan André Reuter --- easybuild/easyblocks/c/clang_aomp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/c/clang_aomp.py b/easybuild/easyblocks/c/clang_aomp.py index 6f046cdb28..7e8181faba 100644 --- a/easybuild/easyblocks/c/clang_aomp.py +++ b/easybuild/easyblocks/c/clang_aomp.py @@ -145,7 +145,7 @@ def configure_step(self): raise EasyBuildError("Could not find 'ROCm-Device-Libs' source directory in %s", self.builddir) num_comps = len(self.cfg['components']) - for idx, comp in enumerate(self.comp_cfgs): + for idx, (comp, _) in enumerate(self.comp_instances): name = comp['name'] msg = "configuring bundle component %s %s (%d/%d)..." % (name, comp['version'], idx + 1, num_comps) print_msg(msg) From 43ec3552236795f8cd92742e8736dea2d75161f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Fri, 15 Nov 2024 08:33:28 +0100 Subject: [PATCH 27/87] Transfer logfile from bundle to components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes the increased memory usage when running the EasyConfig test suite as log files would stay open. Signed-off-by: Jan André Reuter --- easybuild/easyblocks/generic/bundle.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 5f098f83d7..dd17b82a83 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -199,7 +199,7 @@ def __init__(self, *args, **kwargs): if comp_cfg['patches']: self.cfg.update('patches', comp_cfg['patches']) - self.comp_instances.append((comp_cfg, comp_cfg.easyblock(comp_cfg))) + self.comp_instances.append((comp_cfg, comp_cfg.easyblock(comp_cfg, logfile=self.logfile))) self.cfg.update('checksums', checksums_patches) @@ -320,9 +320,6 @@ def install_step(self): new_val = path env.setvar(envvar, new_val) - # close log for this component - comp.close_log() - def make_module_req_guess(self): """ Set module requirements from all comppnents, e.g. $PATH, etc. From bce45f57918edf9d839fc4bb3c6090d8c39ae7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Wed, 4 Dec 2024 10:19:29 +0100 Subject: [PATCH 28/87] Bundle: Address review comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan André Reuter --- easybuild/easyblocks/generic/bundle.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index dd17b82a83..2571df7f32 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -322,15 +322,15 @@ def install_step(self): def make_module_req_guess(self): """ - Set module requirements from all comppnents, e.g. $PATH, etc. + Set module requirements from all components, e.g. $PATH, etc. During the install step, we only set these requirements temporarily. Later on when building the module, those paths are not considered. Therefore, iterate through all the components again and gather the requirements. - Do not remove duplicates or check for existance of folders, + Do not remove duplicates or check for existence of folders, as this is done in the generic EasyBlock while creating - the modulefile already. + the module file already. """ # Start with the paths from the generic EasyBlock. # If not added here, they might be missing entirely and fail sanity checks. @@ -342,10 +342,10 @@ def make_module_req_guess(self): try: for key, value in sorted(reqs.items()): - if isinstance(reqs, string_type): + if isinstance(value, string_type): value = [value] final_reqs.setdefault(key, []) - final_reqs[key] += value + final_reqs[key].append(value) except AttributeError: raise EasyBuildError("Cannot process module requirements of bundle component %s v%s", cfg['name'], cfg['version']) From 4ebf4a36a1ba66e032cec324b9c00c587ae0839a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Wed, 4 Dec 2024 15:32:17 +0100 Subject: [PATCH 29/87] Bundle: Add comment to try-except block in make_module_req_guess() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan André Reuter --- easybuild/easyblocks/generic/bundle.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 2571df7f32..caaad68cd2 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -340,6 +340,9 @@ def make_module_req_guess(self): self.log.info("Gathering module paths for component %s v%s", cfg['name'], cfg['version']) reqs = comp.make_module_req_guess() + # Try-except block to fail with an easily understandable error message. + # This should only trigger when an EasyBlock returns non-dict module requirements + # for make_module_req_guess() which should then be fixed in the components EasyBlock. try: for key, value in sorted(reqs.items()): if isinstance(value, string_type): From a9d5ea1da8703a540727f6f4e0e5cbccf5fc7cb7 Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Wed, 4 Dec 2024 17:36:39 +0000 Subject: [PATCH 30/87] Rename `post_install_step` to `post_processing_step` Matches https://github.com/easybuilders/easybuild-framework/pull/4715 --- easybuild/easyblocks/a/aedt.py | 2 +- easybuild/easyblocks/a/aocc.py | 4 ++-- easybuild/easyblocks/a/aomp.py | 4 ++-- easybuild/easyblocks/c/clang.py | 4 ++-- easybuild/easyblocks/c/crispr_dav.py | 2 +- easybuild/easyblocks/c/cuda.py | 4 ++-- easybuild/easyblocks/d/dualsphysics.py | 4 ++-- easybuild/easyblocks/e/easybuildmeta.py | 4 ++-- easybuild/easyblocks/f/fftwmpi.py | 4 ++-- easybuild/easyblocks/g/gcc.py | 4 ++-- easybuild/easyblocks/generic/binary.py | 4 ++-- easybuild/easyblocks/generic/systemcompiler.py | 2 +- easybuild/easyblocks/generic/systemmpi.py | 2 +- easybuild/easyblocks/h/hadoop.py | 2 +- easybuild/easyblocks/i/imkl.py | 4 ++-- easybuild/easyblocks/i/imkl_fftw.py | 4 ++-- easybuild/easyblocks/i/impi.py | 4 ++-- easybuild/easyblocks/j/java.py | 4 ++-- easybuild/easyblocks/m/mathematica.py | 4 ++-- easybuild/easyblocks/m/metagenome_atlas.py | 2 +- easybuild/easyblocks/p/perl.py | 4 ++-- 21 files changed, 36 insertions(+), 36 deletions(-) diff --git a/easybuild/easyblocks/a/aedt.py b/easybuild/easyblocks/a/aedt.py index a381e2fd24..27685a3115 100644 --- a/easybuild/easyblocks/a/aedt.py +++ b/easybuild/easyblocks/a/aedt.py @@ -71,7 +71,7 @@ def install_step(self): ]) run_shell_cmd("./Linux/AnsysEM/Disk1/InstData/setup.exe %s" % options) - def post_install_step(self): + def post_processing_step(self): """Disable OS check and set LC_ALL/LANG for runtime""" if not self.subdir: self._set_subdir() diff --git a/easybuild/easyblocks/a/aocc.py b/easybuild/easyblocks/a/aocc.py index 24da9f3c5e..b42c12d063 100644 --- a/easybuild/easyblocks/a/aocc.py +++ b/easybuild/easyblocks/a/aocc.py @@ -214,7 +214,7 @@ def install_step(self): super(EB_AOCC, self).install_step() - def post_install_step(self): + def post_processing_step(self): """ For AOCC <5.0.0: Create wrappers for the compilers to make sure compilers picks up GCCcore as GCC toolchain. @@ -245,7 +245,7 @@ def post_install_step(self): self._create_compiler_config_files(compilers_to_add_config_files) self._create_compiler_wrappers(compilers_to_wrap) - super(EB_AOCC, self).post_install_step() + super(EB_AOCC, self).post_processing_step() def sanity_check_step(self): """Custom sanity check for AOCC, based on sanity check for Clang.""" diff --git a/easybuild/easyblocks/a/aomp.py b/easybuild/easyblocks/a/aomp.py index 2a1f0472d8..f62c124b19 100644 --- a/easybuild/easyblocks/a/aomp.py +++ b/easybuild/easyblocks/a/aomp.py @@ -133,8 +133,8 @@ def configure_step(self): # Only build selected components self.cfg['installopts'] = 'select ' + ' '.join(components) - def post_install_step(self): - super(EB_AOMP, self).post_install_step() + def post_processing_step(self): + super(EB_AOMP, self).post_processing_step() # The install script will create a symbolic link as the install # directory, this creates problems for EB as it won't remove the # symlink. To remedy this we remove the link here and rename the actual diff --git a/easybuild/easyblocks/c/clang.py b/easybuild/easyblocks/c/clang.py index ddefa7cbff..3ee17819e3 100644 --- a/easybuild/easyblocks/c/clang.py +++ b/easybuild/easyblocks/c/clang.py @@ -612,9 +612,9 @@ def install_step(self): except OSError as err: raise EasyBuildError("Failed to copy static analyzer dirs to install dir: %s", err) - def post_install_step(self): + def post_processing_step(self): """Install python bindings.""" - super(EB_Clang, self).post_install_step() + super(EB_Clang, self).post_processing_step() # copy Python bindings here in post-install step so that it is not done more than once in multi_deps context if self.cfg['python_bindings']: diff --git a/easybuild/easyblocks/c/crispr_dav.py b/easybuild/easyblocks/c/crispr_dav.py index e85da91da2..edf0e5e431 100644 --- a/easybuild/easyblocks/c/crispr_dav.py +++ b/easybuild/easyblocks/c/crispr_dav.py @@ -46,7 +46,7 @@ def __init__(self, *args, **kwargs): super(EB_CRISPR_minus_DAV, self).__init__(*args, **kwargs) self.cfg['extract_sources'] = True - def post_install_step(self): + def post_processing_step(self): """Update configuration files with correct paths to dependencies and files in installation.""" # getting paths of deps + files we will work with diff --git a/easybuild/easyblocks/c/cuda.py b/easybuild/easyblocks/c/cuda.py index b66563045e..3fa3a3a949 100644 --- a/easybuild/easyblocks/c/cuda.py +++ b/easybuild/easyblocks/c/cuda.py @@ -218,7 +218,7 @@ def install_step(self): self.log.debug("Running patch %s", patch['name']) run_shell_cmd("/bin/sh " + patch['path'] + " --accept-eula --silent --installdir=" + self.installdir) - def post_install_step(self): + def post_processing_step(self): """ Create wrappers for the specified host compilers, generate the appropriate stub symlinks, and create version independent pkgconfig files @@ -288,7 +288,7 @@ def create_wrapper(wrapper_name, wrapper_comp): symlink(pc_file, link, use_abspath_source=False) change_dir(cwd) - super(EB_CUDA, self).post_install_step() + super(EB_CUDA, self).post_processing_step() def sanity_check_step(self): """Custom sanity check for CUDA.""" diff --git a/easybuild/easyblocks/d/dualsphysics.py b/easybuild/easyblocks/d/dualsphysics.py index 5fc794a59e..964312b5c3 100644 --- a/easybuild/easyblocks/d/dualsphysics.py +++ b/easybuild/easyblocks/d/dualsphysics.py @@ -90,9 +90,9 @@ def install_step(self): ] super(EB_DualSPHysics, self).install_step() - def post_install_step(self): + def post_processing_step(self): """Custom post-installation step: ensure rpath is patched into binaries/libraries if configured.""" - super(EB_DualSPHysics, self).post_install_step() + super(EB_DualSPHysics, self).post_processing_step() if build_option('rpath'): # only the compiled binary (e.g. DualSPHysics5.0CPU_linux64) is rpath'd, the precompiled libraries diff --git a/easybuild/easyblocks/e/easybuildmeta.py b/easybuild/easyblocks/e/easybuildmeta.py index f0d24e79c7..88ad7a742f 100644 --- a/easybuild/easyblocks/e/easybuildmeta.py +++ b/easybuild/easyblocks/e/easybuildmeta.py @@ -136,10 +136,10 @@ def install_step(self): except OSError as err: raise EasyBuildError("Failed to install EasyBuild packages: %s", err) - def post_install_step(self): + def post_processing_step(self): """Remove setuptools.pth file that hard includes a system-wide (site-packages) path, if it is there.""" - super(EB_EasyBuildMeta, self).post_install_step() + super(EB_EasyBuildMeta, self).post_processing_step() setuptools_pth = os.path.join(self.installdir, self.pylibdir, 'setuptools.pth') if os.path.exists(setuptools_pth): diff --git a/easybuild/easyblocks/f/fftwmpi.py b/easybuild/easyblocks/f/fftwmpi.py index cb285a576b..00059e1e39 100644 --- a/easybuild/easyblocks/f/fftwmpi.py +++ b/easybuild/easyblocks/f/fftwmpi.py @@ -59,7 +59,7 @@ def prepare_step(self, *args, **kwargs): if not fftw_root: raise EasyBuildError("Required FFTW dependency is missing!") - def post_install_step(self): + def post_processing_step(self): """Custom post install step for FFTW.MPI""" # remove everything except include files that are already in non-MPI FFTW dependency. @@ -68,7 +68,7 @@ def post_install_step(self): glob.glob(os.path.join(self.installdir, 'lib*/pkgconfig')) + glob.glob(os.path.join(self.installdir, 'lib*/cmake')) + [os.path.join(self.installdir, p) for p in ['bin', 'share']]) - super(EB_FFTW_period_MPI, self).post_install_step() + super(EB_FFTW_period_MPI, self).post_processing_step() def sanity_check_step(self): """Custom sanity check for FFTW.MPI: check if all libraries/headers for MPI interfaces are there.""" diff --git a/easybuild/easyblocks/g/gcc.py b/easybuild/easyblocks/g/gcc.py index bb0ba20ef4..e23f260572 100644 --- a/easybuild/easyblocks/g/gcc.py +++ b/easybuild/easyblocks/g/gcc.py @@ -966,11 +966,11 @@ def install_step(self, *args, **kwargs): else: super(EB_GCC, self).install_step(*args, **kwargs) - def post_install_step(self, *args, **kwargs): + def post_processing_step(self, *args, **kwargs): """ Post-processing after installation: add symlinks for cc, c++, f77, f95 """ - super(EB_GCC, self).post_install_step(*args, **kwargs) + super(EB_GCC, self).post_processing_step(*args, **kwargs) # Add symlinks for cc/c++/f77/f95. bindir = os.path.join(self.installdir, 'bin') diff --git a/easybuild/easyblocks/generic/binary.py b/easybuild/easyblocks/generic/binary.py index c241946620..c0cd005266 100644 --- a/easybuild/easyblocks/generic/binary.py +++ b/easybuild/easyblocks/generic/binary.py @@ -131,7 +131,7 @@ def install_step(self): raise EasyBuildError("Incorrect value type for install_cmds, should be list or tuple: ", install_cmds) - def post_install_step(self): + def post_processing_step(self): """Copy installation to actual installation directory in case of a staged installation.""" if self.cfg.get('staged_install', False): staged_installdir = self.installdir @@ -145,7 +145,7 @@ def post_install_step(self): raise EasyBuildError("Failed to move staged install from %s to %s: %s", staged_installdir, self.installdir, err) - super(Binary, self).post_install_step() + super(Binary, self).post_processing_step() def sanity_check_rpath(self): """Skip the rpath sanity check, this is binary software""" diff --git a/easybuild/easyblocks/generic/systemcompiler.py b/easybuild/easyblocks/generic/systemcompiler.py index a95991ddda..c901cc86c7 100644 --- a/easybuild/easyblocks/generic/systemcompiler.py +++ b/easybuild/easyblocks/generic/systemcompiler.py @@ -270,7 +270,7 @@ def make_module_extra(self, *args, **kwargs): extras = super(SystemCompiler, self).make_module_extra(*args, **kwargs) return extras - def post_install_step(self, *args, **kwargs): + def post_processing_step(self, *args, **kwargs): """Do nothing.""" pass diff --git a/easybuild/easyblocks/generic/systemmpi.py b/easybuild/easyblocks/generic/systemmpi.py index c98381cc40..ee72758bca 100644 --- a/easybuild/easyblocks/generic/systemmpi.py +++ b/easybuild/easyblocks/generic/systemmpi.py @@ -221,7 +221,7 @@ def make_installdir(self, dontcreate=None): """Custom implementation of make installdir: do nothing, do not touch system MPI directories and files.""" pass - def post_install_step(self): + def post_processing_step(self): """Do nothing.""" pass diff --git a/easybuild/easyblocks/h/hadoop.py b/easybuild/easyblocks/h/hadoop.py index cf59603333..dc5069c6db 100644 --- a/easybuild/easyblocks/h/hadoop.py +++ b/easybuild/easyblocks/h/hadoop.py @@ -76,7 +76,7 @@ def install_step(self): else: super(EB_Hadoop, self).install_step() - def post_install_step(self): + def post_processing_step(self): """After the install, copy the extra native libraries into place.""" for native_library, lib_path in self.cfg['extra_native_libs']: lib_root = get_software_root(native_library) diff --git a/easybuild/easyblocks/i/imkl.py b/easybuild/easyblocks/i/imkl.py index 8234626f27..eebbb6081f 100644 --- a/easybuild/easyblocks/i/imkl.py +++ b/easybuild/easyblocks/i/imkl.py @@ -348,11 +348,11 @@ def build_mkl_flexiblas(self, flexiblasdir): if res.exit_code: raise EasyBuildError("Building FlexiBLAS-compatible library (cmd: %s) failed", cmd) - def post_install_step(self): + def post_processing_step(self): """ Install group libraries and interfaces (if desired). """ - super(EB_imkl, self).post_install_step() + super(EB_imkl, self).post_processing_step() # extract examples examples_subdir = os.path.join(self.installdir, self.mkl_basedir, self.examples_subdir) diff --git a/easybuild/easyblocks/i/imkl_fftw.py b/easybuild/easyblocks/i/imkl_fftw.py index 18cd02246b..ba9cfc39d9 100644 --- a/easybuild/easyblocks/i/imkl_fftw.py +++ b/easybuild/easyblocks/i/imkl_fftw.py @@ -64,9 +64,9 @@ def make_module_extra(self): # bypass extra module variables for imkl return super(EB_imkl, self).make_module_extra() - def post_install_step(self): + def post_processing_step(self): """Custom post install step for imkl-FFTW""" - # bypass post_install_step of imkl easyblock + # bypass post_processing_step of imkl easyblock pass def sanity_check_step(self): diff --git a/easybuild/easyblocks/i/impi.py b/easybuild/easyblocks/i/impi.py index ef61bf4087..429ea36139 100644 --- a/easybuild/easyblocks/i/impi.py +++ b/easybuild/easyblocks/i/impi.py @@ -164,9 +164,9 @@ def install_step(self): else: raise EasyBuildError("Rebuild of libfabric is requested, but ofi_internal is set to False.") - def post_install_step(self): + def post_processing_step(self): """Custom post install step for IMPI, fix broken env scripts after moving installed files.""" - super(EB_impi, self).post_install_step() + super(EB_impi, self).post_processing_step() impiver = LooseVersion(self.version) diff --git a/easybuild/easyblocks/j/java.py b/easybuild/easyblocks/j/java.py index a835f671e2..441c5e8501 100644 --- a/easybuild/easyblocks/j/java.py +++ b/easybuild/easyblocks/j/java.py @@ -87,12 +87,12 @@ def install_step(self): else: PackedBinary.install_step(self) - def post_install_step(self): + def post_processing_step(self): """ Custom post-installation step: - ensure correct glibc is used when installing into custom sysroot and using RPATH """ - super(EB_Java, self).post_install_step() + super(EB_Java, self).post_processing_step() # patch binaries and libraries when using alternate sysroot in combination with RPATH sysroot = build_option('sysroot') diff --git a/easybuild/easyblocks/m/mathematica.py b/easybuild/easyblocks/m/mathematica.py index cc6b68608b..b993851ede 100644 --- a/easybuild/easyblocks/m/mathematica.py +++ b/easybuild/easyblocks/m/mathematica.py @@ -109,7 +109,7 @@ def install_step(self): if orig_display is not None: os.environ['DISPLAY'] = orig_display - def post_install_step(self): + def post_processing_step(self): """Activate installation by using activation key, if provided.""" if self.cfg['activation_key']: # activation key is printed by using '$ActivationKey' in Mathematica, so no reason to keep it 'secret' @@ -126,7 +126,7 @@ def post_install_step(self): else: self.log.info("No activation key provided, so skipping activation of the installation.") - super(EB_Mathematica, self).post_install_step() + super(EB_Mathematica, self).post_processing_step() def sanity_check_step(self): """Custom sanity check for Mathematica.""" diff --git a/easybuild/easyblocks/m/metagenome_atlas.py b/easybuild/easyblocks/m/metagenome_atlas.py index 2391595cee..1899522dd2 100644 --- a/easybuild/easyblocks/m/metagenome_atlas.py +++ b/easybuild/easyblocks/m/metagenome_atlas.py @@ -39,7 +39,7 @@ class EB_Metagenome_Atlas(PythonPackage): Support for building/installing Metagenome-Atlas. """ - def post_install_step(self): + def post_processing_step(self): """Create snakemake config files""" # https://metagenome-atlas.readthedocs.io/en/latest/usage/getting_started.html#set-up-of-cluster-execution diff --git a/easybuild/easyblocks/p/perl.py b/easybuild/easyblocks/p/perl.py index 159f755273..52a72950a4 100644 --- a/easybuild/easyblocks/p/perl.py +++ b/easybuild/easyblocks/p/perl.py @@ -155,7 +155,7 @@ def prepare_for_extensions(self): # from specified sysroot rather than from host OS setvar('OPENSSL_PREFIX', sysroot) - def post_install_step(self, *args, **kwargs): + def post_processing_step(self, *args, **kwargs): """ Custom post-installation step for Perl: avoid excessive long shebang lines in Perl scripts. """ @@ -177,7 +177,7 @@ def post_install_step(self, *args, **kwargs): # specify pattern for paths (relative to install dir) of files for which shebang should be patched self.cfg['fix_perl_shebang_for'] = 'bin/*' - super(EB_Perl, self).post_install_step(*args, **kwargs) + super(EB_Perl, self).post_processing_step(*args, **kwargs) def sanity_check_step(self): """Custom sanity check for Perl.""" From 4b0522acf511f0e67edad4635b473d054ca40155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Wed, 4 Dec 2024 20:41:02 +0100 Subject: [PATCH 31/87] Bundle: Replace append with extend when copying reqs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan André Reuter --- easybuild/easyblocks/generic/bundle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index caaad68cd2..62228fd5a0 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -348,7 +348,7 @@ def make_module_req_guess(self): if isinstance(value, string_type): value = [value] final_reqs.setdefault(key, []) - final_reqs[key].append(value) + final_reqs[key].extend(value) except AttributeError: raise EasyBuildError("Cannot process module requirements of bundle component %s v%s", cfg['name'], cfg['version']) From 9bb5841bdf5afa3cfe496ccc2e4b49b3a9e8d947 Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:10:24 +0000 Subject: [PATCH 32/87] use re.findall --- easybuild/easyblocks/generic/rpackage.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/easybuild/easyblocks/generic/rpackage.py b/easybuild/easyblocks/generic/rpackage.py index 1fcca38db8..bb7e6715eb 100644 --- a/easybuild/easyblocks/generic/rpackage.py +++ b/easybuild/easyblocks/generic/rpackage.py @@ -183,16 +183,10 @@ def check_install_output(self, output): """ Check output of installation command, and clean up installation if needed. """ - reg = re.compile("^ERROR:", re.I) - - errors = [] - for line in output.split('\n'): - r = reg.search(line) - if r: - errors.append([line, r.groups()]) + errors = re.findall(r"^ERROR:.*", output, flags=re.I|re.M) if errors: - self.log.info("R package %s failed with error:\n%s", self.name, '\n'.join([x[0] for x in errors])) + self.log.info("R package %s failed with error:\n%s", self.name, '\n'.join(errors)) self.handle_installation_errors() cmd = "R -q --no-save" stdin = """ From 63719f37a41025031512795595d633a649266ce9 Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:11:05 +0000 Subject: [PATCH 33/87] hound --- easybuild/easyblocks/generic/rpackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/rpackage.py b/easybuild/easyblocks/generic/rpackage.py index bb7e6715eb..6ca009de95 100644 --- a/easybuild/easyblocks/generic/rpackage.py +++ b/easybuild/easyblocks/generic/rpackage.py @@ -183,7 +183,7 @@ def check_install_output(self, output): """ Check output of installation command, and clean up installation if needed. """ - errors = re.findall(r"^ERROR:.*", output, flags=re.I|re.M) + errors = re.findall(r"^ERROR:.*", output, flags=re.I | re.M) if errors: self.log.info("R package %s failed with error:\n%s", self.name, '\n'.join(errors)) From b1cef7e50ed0bffb7b1d0098a7e8d58ef9727a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Wed, 11 Dec 2024 01:05:52 +0100 Subject: [PATCH 34/87] Include meson ninja extra options to scipy --- easybuild/easyblocks/s/scipy.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/easybuild/easyblocks/s/scipy.py b/easybuild/easyblocks/s/scipy.py index e9860c751f..42e25926a4 100644 --- a/easybuild/easyblocks/s/scipy.py +++ b/easybuild/easyblocks/s/scipy.py @@ -51,15 +51,17 @@ class EB_scipy(FortranPythonPackage, PythonPackage, MesonNinja): """Support for installing the scipy Python package as part of a Python installation.""" @staticmethod - def extra_options(): + def extra_options(extra_vars=None): """Easyconfig parameters specific to scipy.""" - extra_vars = ({ + extra_vars = PythonPackage.extra_options(extra_vars=extra_vars) + extra_vars = MesonNinja.extra_options(extra_vars=extra_vars) + extra_vars.update({ 'enable_slow_tests': [False, "Run scipy test suite, including tests marked as slow", CUSTOM], 'ignore_test_result': [None, "Run scipy test suite, but ignore test failures (True/False/None). Default " "(None) implies True for scipy < 1.9, and False for scipy >= 1.9", CUSTOM], }) - return PythonPackage.extra_options(extra_vars=extra_vars) + return extra_vars def __init__(self, *args, **kwargs): """Set scipy-specific test command.""" From b6fedfe480eb3d6642b500aa8f86ed1734ce9bce Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Fri, 13 Dec 2024 16:53:25 +0100 Subject: [PATCH 35/87] show path of output file for matlab --- easybuild/easyblocks/m/matlab.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/m/matlab.py b/easybuild/easyblocks/m/matlab.py index 56475545cd..8cf8aef6e8 100644 --- a/easybuild/easyblocks/m/matlab.py +++ b/easybuild/easyblocks/m/matlab.py @@ -206,8 +206,8 @@ def install_step(self): regex.pattern, cmd, out) with open(self.outputfile) as f: if regex.search(f.read()): - raise EasyBuildError("Found error pattern '%s' in output file of installer", - regex.pattern) + raise EasyBuildError("Found error pattern '%s' in output file of installer at %s", + regex.pattern, self.outputfile) def sanity_check_step(self): """Custom sanity check for MATLAB.""" From f536db32b965c302cd58b6d8445d633f959957f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Sun, 15 Dec 2024 17:07:07 +0100 Subject: [PATCH 36/87] Remove backwards compat for module only rebuilds. Also uses property to clean up small code duplication --- easybuild/easyblocks/p/python.py | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/easybuild/easyblocks/p/python.py b/easybuild/easyblocks/p/python.py index 0d2b61d106..8cb78b2bcf 100644 --- a/easybuild/easyblocks/p/python.py +++ b/easybuild/easyblocks/p/python.py @@ -478,6 +478,10 @@ def build_step(self, *args, **kwargs): super(EB_Python, self).build_step(*args, **kwargs) + @property + def site_packages_path(self): + return os.path.join('lib', 'python' + self.pyshortver, 'site-packages') + def install_step(self): """Extend make install to make sure that the 'python' command is present.""" @@ -501,8 +505,7 @@ def install_step(self): symlink('pip' + self.pyshortver, pip_binary_path, use_abspath_source=False) if self.cfg.get('ebpythonprefixes'): - site_packages_path = os.path.join('lib', 'python' + self.pyshortver, 'site-packages') - write_file(os.path.join(self.installdir, site_packages_path, 'sitecustomize.py'), SITECUSTOMIZE) + write_file(os.path.join(self.installdir, self.site_packages_path, 'sitecustomize.py'), SITECUSTOMIZE) # symlink lib/python*/lib-dynload to lib64/python*/lib-dynload if it doesn't exist; # see https://github.com/easybuilders/easybuild-easyblocks/issues/1957 @@ -523,8 +526,7 @@ def install_step(self): def _sanity_check_ebpythonprefixes(self): """Check that EBPYTHONPREFIXES works""" temp_prefix = tempfile.mkdtemp(suffix='-tmp-prefix') - site_packages_path = os.path.join('lib', 'python' + self.pyshortver, 'site-packages') - temp_site_packages_path = os.path.join(temp_prefix, site_packages_path) + temp_site_packages_path = os.path.join(temp_prefix, self.site_packages_path) mkdir(temp_site_packages_path, parents=True) # Must exist res = run_shell_cmd("%s=%s python -c 'import sys; print(sys.path)'" % (EBPYTHONPREFIXES, temp_prefix)) out = res.output.strip() @@ -532,7 +534,7 @@ def _sanity_check_ebpythonprefixes(self): if not out.startswith('[') or not out.endswith(']'): raise EasyBuildError("Unexpected output for sys.path: %s", out) paths = eval(out) - base_site_packages_path = os.path.join(self.installdir, site_packages_path) + base_site_packages_path = os.path.join(self.installdir, self.site_packages_path) try: base_prefix_idx = paths.index(base_site_packages_path) except ValueError: @@ -633,16 +635,3 @@ def sanity_check_step(self): raise EasyBuildError("Expected to find exactly one _tkinter*.so: %s", tkinter_so_hits) super(EB_Python, self).sanity_check_step(custom_paths=custom_paths, custom_commands=custom_commands) - - def make_module_extra(self, *args, **kwargs): - """Add path to sitecustomize.py to $PYTHONPATH""" - txt = super(EB_Python, self).make_module_extra() - - # Legacy support for existing installations doing "--rebuild --module-only" - if self.cfg.get('ebpythonprefixes'): - new_dir = os.path.join('lib', 'python' + self.pyshortver, 'site-packages') - old_dir = os.path.join(log_path(), 'python') - if not os.path.exists(os.path.join(self.installdir, new_dir, 'sitecustomize.py')): - txt += self.module_generator.prepend_paths(PYTHONPATH, old_dir) - - return txt From 79b8ce37c440861b2f06d841eb445ca4f1921ecb Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 22:38:49 +0100 Subject: [PATCH 37/87] remove support for 32bits from IntelBase easyblock and derivates --- easybuild/easyblocks/generic/intelbase.py | 17 +-- easybuild/easyblocks/i/icc.py | 87 ++++++------ easybuild/easyblocks/i/imkl.py | 166 +++++++++------------- easybuild/easyblocks/i/impi.py | 109 +++++++------- easybuild/easyblocks/i/itac.py | 14 +- 5 files changed, 160 insertions(+), 233 deletions(-) diff --git a/easybuild/easyblocks/generic/intelbase.py b/easybuild/easyblocks/generic/intelbase.py index 8232390e38..751d758735 100644 --- a/easybuild/easyblocks/generic/intelbase.py +++ b/easybuild/easyblocks/generic/intelbase.py @@ -136,12 +136,7 @@ def get_guesses_tools(self): """Find reasonable paths for a subset of Intel tools, ignoring CPATH, LD_LIBRARY_PATH and LIBRARY_PATH""" guesses = super(IntelBase, self).make_module_req_guess() - - if self.cfg['m32']: - guesses['PATH'] = [os.path.join(self.subdir, 'bin32')] - else: - guesses['PATH'] = [os.path.join(self.subdir, 'bin64')] - + guesses['PATH'] = [os.path.join(self.subdir, 'bin64')] guesses['MANPATH'] = [os.path.join(self.subdir, 'man')] # make sure $CPATH, $LD_LIBRARY_PATH and $LIBRARY_PATH are not updated in generated module file, @@ -155,13 +150,8 @@ def get_guesses_tools(self): def get_custom_paths_tools(self, binaries): """Custom sanity check paths for certain Intel tools.""" - if self.cfg['m32']: - files = [os.path.join('bin32', b) for b in binaries] - dirs = ['lib32', 'include'] - else: - files = [os.path.join('bin64', b) for b in binaries] - dirs = ['lib64', 'include'] - + files = [os.path.join('bin64', b) for b in binaries] + dirs = ['lib64', 'include'] custom_paths = { 'files': [os.path.join(self.subdir, f) for f in files], 'dirs': [os.path.join(self.subdir, d) for d in dirs], @@ -181,7 +171,6 @@ def extra_options(extra_vars=None): # used to be True, but False since SL5.6/SL6 # disables TMP_PATH env and command line option 'usetmppath': [False, "Use temporary path for installation", CUSTOM], - 'm32': [False, "Enable 32-bit toolchain", CUSTOM], 'components': [None, "List of components to install", CUSTOM], }) diff --git a/easybuild/easyblocks/i/icc.py b/easybuild/easyblocks/i/icc.py index 0debf99be8..b2195a5ec4 100644 --- a/easybuild/easyblocks/i/icc.py +++ b/easybuild/easyblocks/i/icc.py @@ -165,59 +165,52 @@ def make_module_req_guess(self): 'TBBROOT': ['tbb'], }) - if self.cfg['m32']: - # 32-bit toolchain - guesses['PATH'].extend(['bin/ia32', 'tbb/bin/ia32']) - # in the end we set 'LIBRARY_PATH' equal to 'LD_LIBRARY_PATH' - guesses['LD_LIBRARY_PATH'].append('lib/ia32') + # 64-bit toolkit + guesses['PATH'].extend([ + 'bin/intel64', + 'debugger/gdb/intel64/bin', + 'ipp/bin/intel64', + 'mpi/intel64/bin', + 'tbb/bin/emt64', + 'tbb/bin/intel64', + ]) + + # in the end we set 'LIBRARY_PATH' equal to 'LD_LIBRARY_PATH' + guesses['LD_LIBRARY_PATH'].extend([ + 'compiler/lib/intel64', + 'debugger/ipt/intel64/lib', + 'ipp/lib/intel64', + 'mkl/lib/intel64', + 'mpi/intel64', + 'tbb/lib/intel64/%s' % get_tbb_gccprefix(os.path.join(self.installdir, 'tbb/lib/intel64')), + ]) + + if LooseVersion(self.version) < LooseVersion('2016'): + prefix = 'composer_xe_%s' % self.version + # for some older versions, name of subdirectory is slightly different + if not os.path.isdir(os.path.join(self.installdir, prefix)): + cand_prefix = 'composerxe-%s' % self.version + if os.path.isdir(os.path.join(self.installdir, cand_prefix)): + prefix = cand_prefix + + # debugger is dependent on $INTEL_PYTHONHOME since version 2015 and newer + if LooseVersion(self.version) >= LooseVersion('2015'): + self.debuggerpath = os.path.join(prefix, 'debugger') else: - # 64-bit toolkit - guesses['PATH'].extend([ - 'bin/intel64', - 'debugger/gdb/intel64/bin', - 'ipp/bin/intel64', - 'mpi/intel64/bin', - 'tbb/bin/emt64', - 'tbb/bin/intel64', - ]) + # new directory layout for Intel Parallel Studio XE 2016 + # https://software.intel.com/en-us/articles/new-directory-layout-for-intel-parallel-studio-xe-2016 + prefix = self.comp_libs_subdir + # Debugger requires INTEL_PYTHONHOME, which only allows for a single value + self.debuggerpath = 'debugger_%s' % self.version.split('.')[0] - # in the end we set 'LIBRARY_PATH' equal to 'LD_LIBRARY_PATH' guesses['LD_LIBRARY_PATH'].extend([ - 'compiler/lib/intel64', - 'debugger/ipt/intel64/lib', - 'ipp/lib/intel64', - 'mkl/lib/intel64', - 'mpi/intel64', - 'tbb/lib/intel64/%s' % get_tbb_gccprefix(os.path.join(self.installdir, 'tbb/lib/intel64')), + os.path.join(self.debuggerpath, 'libipt/intel64/lib'), + 'daal/lib/intel64_lin', ]) - if LooseVersion(self.version) < LooseVersion('2016'): - prefix = 'composer_xe_%s' % self.version - # for some older versions, name of subdirectory is slightly different - if not os.path.isdir(os.path.join(self.installdir, prefix)): - cand_prefix = 'composerxe-%s' % self.version - if os.path.isdir(os.path.join(self.installdir, cand_prefix)): - prefix = cand_prefix - - # debugger is dependent on $INTEL_PYTHONHOME since version 2015 and newer - if LooseVersion(self.version) >= LooseVersion('2015'): - self.debuggerpath = os.path.join(prefix, 'debugger') - - else: - # new directory layout for Intel Parallel Studio XE 2016 - # https://software.intel.com/en-us/articles/new-directory-layout-for-intel-parallel-studio-xe-2016 - prefix = self.comp_libs_subdir - # Debugger requires INTEL_PYTHONHOME, which only allows for a single value - self.debuggerpath = 'debugger_%s' % self.version.split('.')[0] - - guesses['LD_LIBRARY_PATH'].extend([ - os.path.join(self.debuggerpath, 'libipt/intel64/lib'), - 'daal/lib/intel64_lin', - ]) - - # 'lib/intel64' is deliberately listed last, so it gets precedence over subdirs - guesses['LD_LIBRARY_PATH'].append('lib/intel64') + # 'lib/intel64' is deliberately listed last, so it gets precedence over subdirs + guesses['LD_LIBRARY_PATH'].append('lib/intel64') guesses['LIBRARY_PATH'] = guesses['LD_LIBRARY_PATH'] diff --git a/easybuild/easyblocks/i/imkl.py b/easybuild/easyblocks/i/imkl.py index 8234626f27..81efb7f022 100644 --- a/easybuild/easyblocks/i/imkl.py +++ b/easybuild/easyblocks/i/imkl.py @@ -181,10 +181,7 @@ def build_mkl_fftw_interfaces(self, libdir): inttarget = 'libintel64' else: intsubdir = 'interfaces' - if self.cfg['m32']: - inttarget = 'lib32' - else: - inttarget = 'libem64t' + inttarget = 'libem64t' cmd = "make -f makefile %s" % inttarget @@ -259,12 +256,12 @@ def build_mkl_fftw_interfaces(self, libdir): buildopts.append('mpi=%s' % self.mpi_spec) precflags = [''] - if lib.startswith('fftw2x') and not self.cfg['m32']: + if lib.startswith('fftw2x'): # build both single and double precision variants precflags = ['PRECISION=MKL_DOUBLE', 'PRECISION=MKL_SINGLE'] intflags = [''] - if lib in self.cdftlibs and not self.cfg['m32']: + if lib in self.cdftlibs: # build both 32-bit and 64-bit interfaces intflags = ['interface=lp64', 'interface=ilp64'] @@ -367,34 +364,21 @@ def post_install_step(self): shlib_ext = get_shared_lib_ext() - if self.cfg['m32']: - extra = { - 'libmkl.%s' % shlib_ext: 'GROUP (-lmkl_intel -lmkl_intel_thread -lmkl_core)', - 'libmkl_em64t.a': 'GROUP (libmkl_intel.a libmkl_intel_thread.a libmkl_core.a)', - 'libmkl_solver.a': 'GROUP (libmkl_solver.a)', - 'libmkl_scalapack.a': 'GROUP (libmkl_scalapack_core.a)', - 'libmkl_lapack.a': 'GROUP (libmkl_intel.a libmkl_intel_thread.a libmkl_core.a)', - 'libmkl_cdft.a': 'GROUP (libmkl_cdft_core.a)' - } - else: - extra = { - 'libmkl.%s' % shlib_ext: 'GROUP (-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core)', - 'libmkl_em64t.a': 'GROUP (libmkl_intel_lp64.a libmkl_intel_thread.a libmkl_core.a)', - 'libmkl_solver.a': 'GROUP (libmkl_solver_lp64.a)', - 'libmkl_scalapack.a': 'GROUP (libmkl_scalapack_lp64.a)', - 'libmkl_lapack.a': 'GROUP (libmkl_intel_lp64.a libmkl_intel_thread.a libmkl_core.a)', - 'libmkl_cdft.a': 'GROUP (libmkl_cdft_core.a)' - } + extra = { + 'libmkl.%s' % shlib_ext: 'GROUP (-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core)', + 'libmkl_em64t.a': 'GROUP (libmkl_intel_lp64.a libmkl_intel_thread.a libmkl_core.a)', + 'libmkl_solver.a': 'GROUP (libmkl_solver_lp64.a)', + 'libmkl_scalapack.a': 'GROUP (libmkl_scalapack_lp64.a)', + 'libmkl_lapack.a': 'GROUP (libmkl_intel_lp64.a libmkl_intel_thread.a libmkl_core.a)', + 'libmkl_cdft.a': 'GROUP (libmkl_cdft_core.a)' + } loosever = LooseVersion(self.version) if loosever >= LooseVersion('10.3'): libsubdir = os.path.join(self.mkl_basedir, 'lib', 'intel64') else: - if self.cfg['m32']: - libsubdir = os.path.join('lib', '32') - else: - libsubdir = os.path.join('lib', 'em64t') + libsubdir = os.path.join('lib', 'em64t') libdir = os.path.join(self.installdir, libsubdir) for fil, txt in extra.items(): @@ -434,15 +418,11 @@ def get_mkl_fftw_interface_libs(self): libs = ['libfftw%s%s%s.a' % (fftwver, compsuff, pic) for fftwver in fftw_vers for pic in pics] if self.cdftlibs: - fftw_cdft_vers = ['2x_cdft_DOUBLE'] - if not self.cfg['m32']: - fftw_cdft_vers.append('2x_cdft_SINGLE') + fftw_cdft_vers = ['2x_cdft_DOUBLE', '2x_cdft_SINGLE'] if ver >= LooseVersion('10.3'): fftw_cdft_vers.append('3x_cdft') if ver >= LooseVersion('11.0.2'): - bits = ['_lp64'] - if not self.cfg['m32']: - bits.append('_ilp64') + bits = ['_lp64', '_ilp64'] else: # no bits suffix in cdft libs before imkl v11.0.2 bits = [''] @@ -468,9 +448,6 @@ def sanity_check_step(self): libs += [os.path.join('flexiblas', 'libflexiblas_imkl_%s.so' % thread) for thread in ['gnu_thread', 'intel_thread', 'sequential']] - if ver >= LooseVersion('10.3') and self.cfg['m32']: - raise EasyBuildError("Sanity check for 32-bit not implemented yet for IMKL v%s (>= 10.3)", self.version) - if ver >= LooseVersion('10.3'): mkldirs = [ os.path.join(self.mkl_basedir, 'bin'), @@ -500,11 +477,8 @@ def sanity_check_step(self): mkldirs += [os.path.join('lib', 'intel64')] else: - if self.cfg['m32']: - lib_subdir = '32' - else: - lib_subdir = 'em64t' - libs += [lib % {'suff': suff} for lib in extralibs for suff in ['lp64', 'ilp64']] + lib_subdir = 'em64t' + libs += [lib % {'suff': suff} for lib in extralibs for suff in ['lp64', 'ilp64']] mklfiles = [ os.path.join('lib', lib_subdir, 'libmkl.%s' % shlib_ext), @@ -527,68 +501,56 @@ def make_module_req_guess(self): guesses = super(EB_imkl, self).make_module_req_guess() if LooseVersion(self.version) >= LooseVersion('10.3'): - if self.cfg['m32']: - raise EasyBuildError("32-bit not supported yet for IMKL v%s (>= 10.3)", self.version) + if LooseVersion(self.version) >= LooseVersion('2021'): + compiler_subdir = os.path.join(self.get_versioned_subdir('compiler'), self.compiler_libdir) + pkg_config_path = [os.path.join(self.mkl_basedir, 'tools', 'pkgconfig'), + os.path.join(self.mkl_basedir, 'lib', 'pkgconfig')] else: - if LooseVersion(self.version) >= LooseVersion('2021'): - compiler_subdir = os.path.join(self.get_versioned_subdir('compiler'), self.compiler_libdir) - pkg_config_path = [os.path.join(self.mkl_basedir, 'tools', 'pkgconfig'), - os.path.join(self.mkl_basedir, 'lib', 'pkgconfig')] - else: - compiler_subdir = os.path.join('lib', 'intel64') - pkg_config_path = [os.path.join(self.mkl_basedir, 'bin', 'pkgconfig')] - guesses['MANPATH'] = ['man', os.path.join('man', 'en_US')] - if LooseVersion(self.version) >= LooseVersion('11.0'): - if LooseVersion(self.version) >= LooseVersion('11.3'): - guesses['MIC_LD_LIBRARY_PATH'] = [ - os.path.join('lib', 'intel64_lin_mic'), - os.path.join(self.mkl_basedir, 'lib', 'mic'), - ] - elif LooseVersion(self.version) >= LooseVersion('11.1'): - guesses['MIC_LD_LIBRARY_PATH'] = [ - os.path.join('lib', 'mic'), - os.path.join(self.mkl_basedir, 'lib', 'mic'), - ] - else: - guesses['MIC_LD_LIBRARY_PATH'] = [ - os.path.join('compiler', 'lib', 'mic'), - os.path.join(self.mkl_basedir, 'lib', 'mic'), - ] - library_path = [ - compiler_subdir, - os.path.join(self.mkl_basedir, 'lib', 'intel64'), - ] - cpath = [ - os.path.join(self.mkl_basedir, 'include'), - os.path.join(self.mkl_basedir, 'include', 'fftw'), - ] - cmake_prefix_path = [self.mkl_basedir] - guesses.update({ - 'PATH': [], - 'LD_LIBRARY_PATH': library_path, - 'LIBRARY_PATH': library_path, - 'CPATH': cpath, - 'CMAKE_PREFIX_PATH': cmake_prefix_path, - 'PKG_CONFIG_PATH': pkg_config_path, - }) - if self.cfg['flexiblas']: - guesses['FLEXIBLAS_LIBRARY_PATH'] = os.path.join(library_path[1], 'flexiblas') + compiler_subdir = os.path.join('lib', 'intel64') + pkg_config_path = [os.path.join(self.mkl_basedir, 'bin', 'pkgconfig')] + guesses['MANPATH'] = ['man', os.path.join('man', 'en_US')] + if LooseVersion(self.version) >= LooseVersion('11.0'): + if LooseVersion(self.version) >= LooseVersion('11.3'): + guesses['MIC_LD_LIBRARY_PATH'] = [ + os.path.join('lib', 'intel64_lin_mic'), + os.path.join(self.mkl_basedir, 'lib', 'mic'), + ] + elif LooseVersion(self.version) >= LooseVersion('11.1'): + guesses['MIC_LD_LIBRARY_PATH'] = [ + os.path.join('lib', 'mic'), + os.path.join(self.mkl_basedir, 'lib', 'mic'), + ] + else: + guesses['MIC_LD_LIBRARY_PATH'] = [ + os.path.join('compiler', 'lib', 'mic'), + os.path.join(self.mkl_basedir, 'lib', 'mic'), + ] + library_path = [ + compiler_subdir, + os.path.join(self.mkl_basedir, 'lib', 'intel64'), + ] + cpath = [ + os.path.join(self.mkl_basedir, 'include'), + os.path.join(self.mkl_basedir, 'include', 'fftw'), + ] + cmake_prefix_path = [self.mkl_basedir] + guesses.update({ + 'PATH': [], + 'LD_LIBRARY_PATH': library_path, + 'LIBRARY_PATH': library_path, + 'CPATH': cpath, + 'CMAKE_PREFIX_PATH': cmake_prefix_path, + 'PKG_CONFIG_PATH': pkg_config_path, + }) + if self.cfg['flexiblas']: + guesses['FLEXIBLAS_LIBRARY_PATH'] = os.path.join(library_path[1], 'flexiblas') else: - if self.cfg['m32']: - guesses.update({ - 'PATH': ['bin', 'bin/ia32', 'tbb/bin/ia32'], - 'LD_LIBRARY_PATH': ['lib', 'lib/32'], - 'LIBRARY_PATH': ['lib', 'lib/32'], - 'MANPATH': ['man', 'share/man', 'man/en_US'], - }) - - else: - guesses.update({ - 'PATH': ['bin', 'bin/intel64', 'tbb/bin/em64t'], - 'LD_LIBRARY_PATH': ['lib', 'lib/em64t'], - 'LIBRARY_PATH': ['lib', 'lib/em64t'], - 'MANPATH': ['man', 'share/man', 'man/en_US'], - }) + guesses.update({ + 'PATH': ['bin', 'bin/intel64', 'tbb/bin/em64t'], + 'LD_LIBRARY_PATH': ['lib', 'lib/em64t'], + 'LIBRARY_PATH': ['lib', 'lib/em64t'], + 'MANPATH': ['man', 'share/man', 'man/en_US'], + }) return guesses def make_module_extra(self): diff --git a/easybuild/easyblocks/i/impi.py b/easybuild/easyblocks/i/impi.py index ef61bf4087..0bfd40a01b 100644 --- a/easybuild/easyblocks/i/impi.py +++ b/easybuild/easyblocks/i/impi.py @@ -201,8 +201,6 @@ def sanity_check_step(self): impi_ver = LooseVersion(self.version) suff = '64' - if self.cfg['m32']: - suff = '' mpi_mods = ['mpi.mod'] if impi_ver > LooseVersion('4.0'): @@ -284,65 +282,56 @@ def make_module_req_guess(self): A dictionary of possible directories to look for """ guesses = super(EB_impi, self).make_module_req_guess() - if self.cfg['m32']: - lib_dirs = ['lib', 'lib/ia32', 'ia32/lib'] - guesses.update({ - 'PATH': ['bin', 'bin/ia32', 'ia32/bin'], - 'LD_LIBRARY_PATH': lib_dirs, - 'LIBRARY_PATH': lib_dirs, - 'MIC_LD_LIBRARY_PATH': ['mic/lib'], - }) - else: - manpath = 'man' - - impi_ver = LooseVersion(self.version) - if impi_ver >= LooseVersion('2021'): - mpi_subdir = self.get_versioned_subdir('mpi') - lib_dirs = [ - os.path.join(mpi_subdir, 'lib'), - os.path.join(mpi_subdir, 'libfabric', 'lib'), - ] - if impi_ver < LooseVersion('2021.11'): - lib_dirs.insert(1, os.path.join(mpi_subdir, 'lib', 'release')) - include_dirs = [os.path.join(mpi_subdir, 'include')] - path_dirs = [ - os.path.join(mpi_subdir, 'bin'), - os.path.join(mpi_subdir, 'libfabric', 'bin'), - ] - if impi_ver >= LooseVersion('2021.11'): - manpath = os.path.join(mpi_subdir, 'share', 'man') - else: - manpath = os.path.join(mpi_subdir, 'man') - - if self.cfg['ofi_internal']: - libfabric_dir = os.path.join(mpi_subdir, 'libfabric') - lib_dirs.append(os.path.join(libfabric_dir, 'lib')) - path_dirs.append(os.path.join(libfabric_dir, 'bin')) - guesses['FI_PROVIDER_PATH'] = [os.path.join(libfabric_dir, 'lib', 'prov')] - - elif impi_ver >= LooseVersion('2019'): - # The "release" library is default in v2019. Give it precedence over intel64/lib. - # (remember paths are *prepended*, so the last path in the list has highest priority) - lib_dirs = [os.path.join('intel64', x) for x in ['lib', os.path.join('lib', 'release')]] - include_dirs = [os.path.join('intel64', 'include')] - path_dirs = [os.path.join('intel64', 'bin')] - if self.cfg['ofi_internal']: - lib_dirs.append(os.path.join('intel64', 'libfabric', 'lib')) - path_dirs.append(os.path.join('intel64', 'libfabric', 'bin')) - guesses['FI_PROVIDER_PATH'] = [os.path.join('intel64', 'libfabric', 'lib', 'prov')] + manpath = 'man' + + impi_ver = LooseVersion(self.version) + if impi_ver >= LooseVersion('2021'): + mpi_subdir = self.get_versioned_subdir('mpi') + lib_dirs = [ + os.path.join(mpi_subdir, 'lib'), + os.path.join(mpi_subdir, 'libfabric', 'lib'), + ] + if impi_ver < LooseVersion('2021.11'): + lib_dirs.insert(1, os.path.join(mpi_subdir, 'lib', 'release')) + include_dirs = [os.path.join(mpi_subdir, 'include')] + path_dirs = [ + os.path.join(mpi_subdir, 'bin'), + os.path.join(mpi_subdir, 'libfabric', 'bin'), + ] + if impi_ver >= LooseVersion('2021.11'): + manpath = os.path.join(mpi_subdir, 'share', 'man') else: - lib_dirs = [os.path.join('lib', 'em64t'), 'lib64'] - include_dirs = ['include64'] - path_dirs = [os.path.join('bin', 'intel64'), 'bin64'] - guesses['MIC_LD_LIBRARY_PATH'] = [os.path.join('mic', 'lib')] - - guesses.update({ - 'PATH': path_dirs, - 'LD_LIBRARY_PATH': lib_dirs, - 'LIBRARY_PATH': lib_dirs, - 'MANPATH': [manpath], - 'CPATH': include_dirs, - }) + manpath = os.path.join(mpi_subdir, 'man') + + if self.cfg['ofi_internal']: + libfabric_dir = os.path.join(mpi_subdir, 'libfabric') + lib_dirs.append(os.path.join(libfabric_dir, 'lib')) + path_dirs.append(os.path.join(libfabric_dir, 'bin')) + guesses['FI_PROVIDER_PATH'] = [os.path.join(libfabric_dir, 'lib', 'prov')] + + elif impi_ver >= LooseVersion('2019'): + # The "release" library is default in v2019. Give it precedence over intel64/lib. + # (remember paths are *prepended*, so the last path in the list has highest priority) + lib_dirs = [os.path.join('intel64', x) for x in ['lib', os.path.join('lib', 'release')]] + include_dirs = [os.path.join('intel64', 'include')] + path_dirs = [os.path.join('intel64', 'bin')] + if self.cfg['ofi_internal']: + lib_dirs.append(os.path.join('intel64', 'libfabric', 'lib')) + path_dirs.append(os.path.join('intel64', 'libfabric', 'bin')) + guesses['FI_PROVIDER_PATH'] = [os.path.join('intel64', 'libfabric', 'lib', 'prov')] + else: + lib_dirs = [os.path.join('lib', 'em64t'), 'lib64'] + include_dirs = ['include64'] + path_dirs = [os.path.join('bin', 'intel64'), 'bin64'] + guesses['MIC_LD_LIBRARY_PATH'] = [os.path.join('mic', 'lib')] + + guesses.update({ + 'PATH': path_dirs, + 'LD_LIBRARY_PATH': lib_dirs, + 'LIBRARY_PATH': lib_dirs, + 'MANPATH': [manpath], + 'CPATH': include_dirs, + }) return guesses diff --git a/easybuild/easyblocks/i/itac.py b/easybuild/easyblocks/i/itac.py index e39481af4a..3b70ca3d92 100644 --- a/easybuild/easyblocks/i/itac.py +++ b/easybuild/easyblocks/i/itac.py @@ -160,16 +160,10 @@ def make_module_req_guess(self): 'VT_SLIB_DIR': ['itac/lib_s%s' % preferredmpi] }) - if self.cfg['m32']: - guesses.update({ - 'PATH': ['bin', 'bin/ia32', 'ia32/bin'], - 'LD_LIBRARY_PATH': ['lib', 'lib/ia32', 'ia32/lib'], - }) - else: - guesses.update({ - 'PATH': ['bin', 'bin/intel64', 'bin64'], - 'LD_LIBRARY_PATH': ['lib', 'lib/intel64', 'lib64', 'slib'], - }) + guesses.update({ + 'PATH': ['bin', 'bin/intel64', 'bin64'], + 'LD_LIBRARY_PATH': ['lib', 'lib/intel64', 'lib64', 'slib'], + }) return guesses def make_module_extra(self): From 9fc7d6d41253c10846fcdd0d4651da8d83ff401e Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 22:42:21 +0100 Subject: [PATCH 38/87] remove obsolete usetmppath parameter from IntelBase easyblock --- easybuild/easyblocks/generic/intelbase.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/easybuild/easyblocks/generic/intelbase.py b/easybuild/easyblocks/generic/intelbase.py index 751d758735..89c9055246 100644 --- a/easybuild/easyblocks/generic/intelbase.py +++ b/easybuild/easyblocks/generic/intelbase.py @@ -166,11 +166,6 @@ def extra_options(extra_vars=None): 'serial_number': [None, "Serial number for the product", CUSTOM], 'requires_runtime_license': [True, "Boolean indicating whether or not a runtime license is required", CUSTOM], - # 'usetmppath': - # workaround for older SL5 version (5.5 and earlier) - # used to be True, but False since SL5.6/SL6 - # disables TMP_PATH env and command line option - 'usetmppath': [False, "Use temporary path for installation", CUSTOM], 'components': [None, "List of components to install", CUSTOM], }) @@ -393,15 +388,6 @@ def install_step_classic(self, silent_cfg_names_map=None, silent_cfg_extras=None write_file(silentcfg, silent) self.log.debug("Contents of %s:\n%s", silentcfg, silent) - # workaround for mktmp: create tmp dir and use it - tmpdir = os.path.join(self.cfg['start_dir'], 'mytmpdir') - mkdir(tmpdir, parents=True) - - tmppathopt = '' - if self.cfg['usetmppath']: - env.setvar('TMP_PATH', tmpdir) - tmppathopt = "-t %s" % tmpdir - # set some extra env variables env.setvar('LOCAL_INSTALL_VERBOSE', '1') env.setvar('VERBOSE_MODE', '1') @@ -412,7 +398,6 @@ def install_step_classic(self, silent_cfg_names_map=None, silent_cfg_extras=None cmd = ' '.join([ self.cfg['preinstallopts'], './install.sh', - tmppathopt, '-s ' + silentcfg, self.cfg['installopts'], ]) From b28882aa15f6d3a5c929a289d82d2334fd096fc1 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:02:18 +0100 Subject: [PATCH 39/87] remove support for versions of icc prior to v2020.x from ICC easyblock --- easybuild/easyblocks/i/icc.py | 93 ++++++++++------------------------- 1 file changed, 26 insertions(+), 67 deletions(-) diff --git a/easybuild/easyblocks/i/icc.py b/easybuild/easyblocks/i/icc.py index b2195a5ec4..74efd94dac 100644 --- a/easybuild/easyblocks/i/icc.py +++ b/easybuild/easyblocks/i/icc.py @@ -57,10 +57,9 @@ def get_icc_version(): class EB_icc(IntelBase): - """Support for installing icc - - - tested with 11.1.046 - - will fail for all older versions (due to newer silent installer) + """ + Support for installing icc + - minimum version suported: 2020.x """ def __init__(self, *args, **kwargs): @@ -75,60 +74,33 @@ def __init__(self, *args, **kwargs): # required because of support in SystemCompiler generic easyblock to specify 'system' as version, # which results in deriving the actual compiler version # comparing a non-version like 'system' with an actual version like '2016' fails with TypeError in Python 3.x - if re.match(r'^[0-9]+.*', self.version) and LooseVersion(self.version) >= LooseVersion('2016'): + if re.match(r'^[0-9]+.*', self.version) and LooseVersion(self.version) >= LooseVersion('2020'): - self.comp_libs_subdir = os.path.join('compilers_and_libraries_%s' % self.version, 'linux') + self.comp_libs_subdir = os.path.join(f'compilers_and_libraries_{self.version}', 'linux') if self.cfg['components'] is None: # we need to use 'ALL' by default, # using 'DEFAULTS' results in key things not being installed (e.g. bin/icc) self.cfg['components'] = [COMP_ALL] - self.log.debug("Nothing specified for components, but required for version 2016, using %s instead", - self.cfg['components']) - - def install_step(self): - """ - Actual installation - - create silent cfg file - - execute command - """ - silent_cfg_names_map = None - - if LooseVersion(self.version) < LooseVersion('2013_sp1'): - # since icc v2013_sp1, silent.cfg has been slightly changed to be 'more standard' - - silent_cfg_names_map = { - 'activation_name': ACTIVATION_NAME_2012, - 'license_file_name': LICENSE_FILE_NAME_2012, - } - - super(EB_icc, self).install_step(silent_cfg_names_map=silent_cfg_names_map) + self.log.debug( + f"Missing components specification, required for version {self.version}. " + f"Using {self.cfg['components']} instead." + ) def sanity_check_step(self): """Custom sanity check paths for icc.""" - binprefix = 'bin/intel64' - libprefix = 'lib/intel64' - if LooseVersion(self.version) >= LooseVersion('2011'): - if LooseVersion(self.version) <= LooseVersion('2011.3.174'): - binprefix = 'bin' - elif LooseVersion(self.version) >= LooseVersion('2013_sp1'): - binprefix = 'bin' - else: - libprefix = 'compiler/lib/intel64' - + binprefix = 'bin' binfiles = ['icc', 'icpc'] - if LooseVersion(self.version) < LooseVersion('2014'): - binfiles += ['idb'] - binaries = [os.path.join(binprefix, f) for f in binfiles] - libraries = [os.path.join(libprefix, 'lib%s' % lib) for lib in ['iomp5.a', 'iomp5.%s' % get_shared_lib_ext()]] - sanity_check_files = binaries + libraries - if LooseVersion(self.version) > LooseVersion('2015'): - sanity_check_files.append('include/omp.h') + + libprefix = 'lib/intel64' + libraries = [os.path.join(libprefix, f'lib{lib}') for lib in ['iomp5.a', f'iomp5.{get_shared_lib_ext()}']] + + headers = ['include/omp.h'] custom_paths = { - 'files': sanity_check_files, + 'files': binaries + libraries + headers, 'dirs': [], } @@ -185,29 +157,16 @@ def make_module_req_guess(self): 'tbb/lib/intel64/%s' % get_tbb_gccprefix(os.path.join(self.installdir, 'tbb/lib/intel64')), ]) - if LooseVersion(self.version) < LooseVersion('2016'): - prefix = 'composer_xe_%s' % self.version - # for some older versions, name of subdirectory is slightly different - if not os.path.isdir(os.path.join(self.installdir, prefix)): - cand_prefix = 'composerxe-%s' % self.version - if os.path.isdir(os.path.join(self.installdir, cand_prefix)): - prefix = cand_prefix - - # debugger is dependent on $INTEL_PYTHONHOME since version 2015 and newer - if LooseVersion(self.version) >= LooseVersion('2015'): - self.debuggerpath = os.path.join(prefix, 'debugger') - - else: - # new directory layout for Intel Parallel Studio XE 2016 - # https://software.intel.com/en-us/articles/new-directory-layout-for-intel-parallel-studio-xe-2016 - prefix = self.comp_libs_subdir - # Debugger requires INTEL_PYTHONHOME, which only allows for a single value - self.debuggerpath = 'debugger_%s' % self.version.split('.')[0] - - guesses['LD_LIBRARY_PATH'].extend([ - os.path.join(self.debuggerpath, 'libipt/intel64/lib'), - 'daal/lib/intel64_lin', - ]) + # new directory layout since Intel Parallel Studio XE 2016 + # https://software.intel.com/en-us/articles/new-directory-layout-for-intel-parallel-studio-xe-2016 + prefix = self.comp_libs_subdir + # Debugger requires INTEL_PYTHONHOME, which only allows for a single value + self.debuggerpath = 'debugger_%s' % self.version.split('.')[0] + + guesses['LD_LIBRARY_PATH'].extend([ + os.path.join(self.debuggerpath, 'libipt/intel64/lib'), + 'daal/lib/intel64_lin', + ]) # 'lib/intel64' is deliberately listed last, so it gets precedence over subdirs guesses['LD_LIBRARY_PATH'].append('lib/intel64') From 9ca3dc969b230b5cd8a0385832fc8a2fd7dbd620 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:09:01 +0100 Subject: [PATCH 40/87] remove support for versions of icc prior to v2020.x from ifort easyblock --- easybuild/easyblocks/i/ifort.py | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/easybuild/easyblocks/i/ifort.py b/easybuild/easyblocks/i/ifort.py index 6497c1124f..67affe0083 100644 --- a/easybuild/easyblocks/i/ifort.py +++ b/easybuild/easyblocks/i/ifort.py @@ -44,32 +44,24 @@ class EB_ifort(EB_icc, IntelBase): """ Class that can be used to install ifort - - tested with 11.1.046 - -- will fail for all older versions (due to newer silent installer) + - minimum version suported: 2020.x + - will fail for all older versions (due to newer silent installer) """ def sanity_check_step(self): """Custom sanity check paths for ifort.""" shlib_ext = get_shared_lib_ext() - binprefix = 'bin/intel64' - libprefix = 'lib/intel64' - if LooseVersion(self.version) >= LooseVersion('2011'): - if LooseVersion(self.version) <= LooseVersion('2011.3.174'): - binprefix = 'bin' - elif LooseVersion(self.version) >= LooseVersion('2013_sp1'): - binprefix = 'bin' - else: - libprefix = 'compiler/lib/intel64' + binprefix = 'bin' + binfiles = ['ifort'] + binaries = [os.path.join(binprefix, f) for f in binfiles] - bins = ['ifort'] - if LooseVersion(self.version) < LooseVersion('2013'): - # idb is not shipped with ifort anymore in 2013.x versions (it is with icc though) - bins.append('idb') + libprefix = 'lib/intel64' + libfiles = [f'lib{lib}' for lib in ['ifcore.a', f'ifcore.{shlib_ext}', 'iomp5.a', f'iomp5.{shlib_ext}']] + libraries = [os.path.join(libprefix, f) for f in libfiles] - libs = ['lib%s' % lib for lib in ['ifcore.a', 'ifcore.%s' % shlib_ext, 'iomp5.a', 'iomp5.%s' % shlib_ext]] custom_paths = { - 'files': [os.path.join(binprefix, x) for x in bins] + [os.path.join(libprefix, lib) for lib in libs], + 'files': binaries + libraries, 'dirs': [], } @@ -87,8 +79,7 @@ def make_module_req_guess(self): Additional paths to consider for prepend-paths statements in module file """ guesses = super(EB_ifort, self).make_module_req_guess() - if LooseVersion(self.version) >= LooseVersion('2016'): - # This enables the creation of fortran 2008 bindings in MPI - guesses['CPATH'].append('include') + # This enables the creation of fortran 2008 bindings in MPI + guesses['CPATH'].append('include') return guesses From 423ace873e7e5ec6040b148fd3742ad6703bd039 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:20:59 +0100 Subject: [PATCH 41/87] remove support for versions of icc prior to v2018.x from impi easyblock --- easybuild/easyblocks/i/impi.py | 131 ++++++++++----------------------- 1 file changed, 38 insertions(+), 93 deletions(-) diff --git a/easybuild/easyblocks/i/impi.py b/easybuild/easyblocks/i/impi.py index 0bfd40a01b..2a4760b495 100644 --- a/easybuild/easyblocks/i/impi.py +++ b/easybuild/easyblocks/i/impi.py @@ -52,6 +52,7 @@ class EB_impi(IntelBase): """ Support for installing Intel MPI library + - minimum version suported: 2018.x """ @staticmethod def extra_options(): @@ -67,11 +68,8 @@ def extra_options(): return IntelBase.extra_options(extra_vars) def prepare_step(self, *args, **kwargs): - if LooseVersion(self.version) >= LooseVersion('2017.2.174'): - kwargs['requires_runtime_license'] = False - super(EB_impi, self).prepare_step(*args, **kwargs) - else: - super(EB_impi, self).prepare_step(*args, **kwargs) + kwargs['requires_runtime_license'] = False + super(EB_impi, self).prepare_step(*args, **kwargs) def install_step(self): """ @@ -83,57 +81,12 @@ def install_step(self): if impiver >= LooseVersion('2021'): super(EB_impi, self).install_step() - - elif impiver >= LooseVersion('4.0.1'): + else: # impi starting from version 4.0.1.x uses standard installation procedure. - silent_cfg_names_map = {} - - if impiver < LooseVersion('4.1.1'): - # since impi v4.1.1, silent.cfg has been slightly changed to be 'more standard' - silent_cfg_names_map.update({ - 'activation_name': ACTIVATION_NAME_2012, - 'license_file_name': LICENSE_FILE_NAME_2012, - }) - super(EB_impi, self).install_step(silent_cfg_names_map=silent_cfg_names_map) - - # impi v4.1.1 and v5.0.1 installers create impi/ subdir, so stuff needs to be moved afterwards - if impiver == LooseVersion('4.1.1.036') or impiver >= LooseVersion('5.0.1.035'): - super(EB_impi, self).move_after_install() - else: - # impi up until version 4.0.0.x uses custom installation procedure. - silent = """[mpi] -INSTALLDIR=%(ins)s -LICENSEPATH=%(lic)s -INSTALLMODE=NONRPM -INSTALLUSER=NONROOT -UPDATE_LD_SO_CONF=NO -PROCEED_WITHOUT_PYTHON=yes -AUTOMOUNTED_CLUSTER=yes -EULA=accept -[mpi-rt] -INSTALLDIR=%(ins)s -LICENSEPATH=%(lic)s -INSTALLMODE=NONRPM -INSTALLUSER=NONROOT -UPDATE_LD_SO_CONF=NO -PROCEED_WITHOUT_PYTHON=yes -AUTOMOUNTED_CLUSTER=yes -EULA=accept - -""" % {'lic': self.license_file, 'ins': self.installdir} - - # already in correct directory - silentcfg = os.path.join(os.getcwd(), "silent.cfg") - write_file(silentcfg, silent) - self.log.debug("Contents of %s: %s", silentcfg, silent) - - tmpdir = os.path.join(os.getcwd(), self.version, 'mytmpdir') - mkdir(tmpdir, parents=True) - - cmd = "./install.sh --tmp-dir=%s --silent=%s" % (tmpdir, silentcfg) - run_shell_cmd(cmd) + # since v5.0.1 installers create impi/ subdir, so stuff needs to be moved afterwards + super(EB_impi, self).move_after_install() # recompile libfabric (if requested) # some Intel MPI versions (like 2019 update 6) no longer ship libfabric sources @@ -152,9 +105,9 @@ def install_step(self): make += ' -j %d' % self.cfg['parallel'] cmds = [ - './configure --prefix=%s %s' % (libfabric_installpath, self.cfg['libfabric_configopts']), + f"./configure --prefix={libfabric_installpath} {self.cfg['libfabric_configopts']}", make, - 'make install' + "make install", ] for cmd in cmds: run_shell_cmd(cmd) @@ -172,12 +125,8 @@ def post_install_step(self): if impiver >= LooseVersion('2021'): self.log.info("No post-install action for impi v%s", self.version) - - elif impiver == LooseVersion('4.1.1.036') or impiver >= LooseVersion('5.0.1.035'): - if impiver >= LooseVersion('2018.0.128'): - script_paths = [os.path.join('intel64', 'bin')] - else: - script_paths = [os.path.join('intel64', 'bin'), os.path.join('mic', 'bin')] + else: + script_paths = [os.path.join('intel64', 'bin')] # fix broken env scripts after the move regex_subs = [(r"^setenv I_MPI_ROOT.*", r"setenv I_MPI_ROOT %s" % self.installdir)] for script in [os.path.join(script_path, 'mpivars.csh') for script_path in script_paths]: @@ -202,9 +151,7 @@ def sanity_check_step(self): suff = '64' - mpi_mods = ['mpi.mod'] - if impi_ver > LooseVersion('4.0'): - mpi_mods.extend(['mpi_base.mod', 'mpi_constants.mod', 'mpi_sizeofs.mod']) + mpi_mods = ['mpi.mod', 'mpi_base.mod', 'mpi_constants.mod', 'mpi_sizeofs.mod'] if impi_ver >= LooseVersion('2021'): mpi_subdir = self.get_versioned_subdir('mpi') @@ -213,7 +160,6 @@ def sanity_check_step(self): lib_dir = os.path.join(mpi_subdir, 'lib') if impi_ver < LooseVersion('2021.11'): lib_dir = os.path.join(lib_dir, 'release') - elif impi_ver >= LooseVersion('2019'): bin_dir = os.path.join('intel64', 'bin') include_dir = os.path.join('intel64', 'include') @@ -241,39 +187,38 @@ def sanity_check_step(self): custom_commands = [] if build_option('mpi_tests'): - if impi_ver >= LooseVersion('2017'): - # Add minimal test program to sanity checks - if build_option('sanity_check_only'): - # When only running the sanity check we need to manually make sure that - # variables for compilers and parallelism have been set - self.set_parallel() - self.prepare_step(start_dir=False) - - impi_testexe = os.path.join(tempfile.mkdtemp(), 'mpi_test') - else: - impi_testexe = os.path.join(self.builddir, 'mpi_test') + # Add minimal test program to sanity checks + if build_option('sanity_check_only'): + # When only running the sanity check we need to manually make sure that + # variables for compilers and parallelism have been set + self.set_parallel() + self.prepare_step(start_dir=False) + + impi_testexe = os.path.join(tempfile.mkdtemp(), 'mpi_test') + else: + impi_testexe = os.path.join(self.builddir, 'mpi_test') - if impi_ver >= LooseVersion('2021'): - impi_testsrc = os.path.join(self.installdir, self.get_versioned_subdir('mpi')) - if impi_ver >= LooseVersion('2021.11'): - impi_testsrc = os.path.join(impi_testsrc, 'opt', 'mpi') - impi_testsrc = os.path.join(impi_testsrc, 'test', 'test.c') - else: - impi_testsrc = os.path.join(self.installdir, 'test', 'test.c') + if impi_ver >= LooseVersion('2021'): + impi_testsrc = os.path.join(self.installdir, self.get_versioned_subdir('mpi')) + if impi_ver >= LooseVersion('2021.11'): + impi_testsrc = os.path.join(impi_testsrc, 'opt', 'mpi') + impi_testsrc = os.path.join(impi_testsrc, 'test', 'test.c') + else: + impi_testsrc = os.path.join(self.installdir, 'test', 'test.c') - self.log.info("Adding minimal MPI test program to sanity checks: %s", impi_testsrc) + self.log.info("Adding minimal MPI test program to sanity checks: %s", impi_testsrc) - # Build test program with appropriate compiler from current toolchain - build_cmd = "mpicc -cc=%s %s -o %s" % (os.getenv('CC'), impi_testsrc, impi_testexe) + # Build test program with appropriate compiler from current toolchain + build_cmd = "mpicc -cc=%s %s -o %s" % (os.getenv('CC'), impi_testsrc, impi_testexe) - # Execute test program with appropriate MPI executable for target toolchain - params = {'nr_ranks': self.cfg['parallel'], 'cmd': impi_testexe} - mpi_cmd_tmpl, params = get_mpi_cmd_template(toolchain.INTELMPI, params, mpi_version=self.version) + # Execute test program with appropriate MPI executable for target toolchain + params = {'nr_ranks': self.cfg['parallel'], 'cmd': impi_testexe} + mpi_cmd_tmpl, params = get_mpi_cmd_template(toolchain.INTELMPI, params, mpi_version=self.version) - custom_commands.extend([ - build_cmd, # build test program - mpi_cmd_tmpl % params, # run test program - ]) + custom_commands.extend([ + build_cmd, # build test program + mpi_cmd_tmpl % params, # run test program + ]) super(EB_impi, self).sanity_check_step(custom_paths=custom_paths, custom_commands=custom_commands) From 8c987564f0aa5b742e6bae43f2c9a145ba9542c7 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:37:50 +0100 Subject: [PATCH 42/87] remove support for versions of icc prior to v2019.x from itac easyblock --- easybuild/easyblocks/i/itac.py | 55 ++++------------------------------ 1 file changed, 6 insertions(+), 49 deletions(-) diff --git a/easybuild/easyblocks/i/itac.py b/easybuild/easyblocks/i/itac.py index 3b70ca3d92..d104da929c 100644 --- a/easybuild/easyblocks/i/itac.py +++ b/easybuild/easyblocks/i/itac.py @@ -45,7 +45,7 @@ class EB_itac(IntelBase): """ Class that can be used to install itac - - tested with Intel Trace Analyzer and Collector 7.2.1.008 + - minimum version suported: 2019.x """ @staticmethod @@ -71,42 +71,9 @@ def install_step_classic(self): - create silent cfg file - execute command """ - - if LooseVersion(self.version) >= LooseVersion('8.1'): - super(EB_itac, self).install_step_classic(silent_cfg_names_map=None) - - # itac v9.0.1 installer create itac/ subdir, so stuff needs to be moved afterwards - if LooseVersion(self.version) >= LooseVersion('9.0'): - super(EB_itac, self).move_after_install() - else: - silent = """ -[itac] -INSTALLDIR=%(ins)s -LICENSEPATH=%(lic)s -INSTALLMODE=NONRPM -INSTALLUSER=NONROOT -INSTALL_ITA=YES -INSTALL_ITC=YES -DEFAULT_MPI=%(mpi)s -EULA=accept -""" % {'lic': self.license_file, 'ins': self.installdir, 'mpi': self.cfg['preferredmpi']} - - # already in correct directory - silentcfg = os.path.join(os.getcwd(), "silent.cfg") - f = open(silentcfg, 'w') - f.write(silent) - f.close() - self.log.debug("Contents of %s: %s" % (silentcfg, silent)) - - tmpdir = os.path.join(os.getcwd(), self.version, 'mytmpdir') - try: - os.makedirs(tmpdir) - except OSError as err: - raise EasyBuildError("Directory %s can't be created: %s", tmpdir, err) - - cmd = "./install.sh --tmp-dir=%s --silent=%s" % (tmpdir, silentcfg) - - run_shell_cmd(cmd) + super(EB_itac, self).install_step_classic(silent_cfg_names_map=None) + # since itac v9.0.1 installer create itac/ subdir, so stuff needs to be moved afterwards + super(EB_itac, self).move_after_install() def install_step_oneapi(self, *args, **kwargs): """ @@ -150,20 +117,10 @@ def make_module_req_guess(self): """ A dictionary of possible directories to look for """ - guesses = {} - if LooseVersion(self.version) < LooseVersion('9.0'): - preferredmpi = self.cfg["preferredmpi"] - guesses.update({ - 'MANPATH': ['man'], - 'CLASSPATH': ['itac/lib_%s' % preferredmpi], - 'VT_LIB_DIR': ['itac/lib_%s' % preferredmpi], - 'VT_SLIB_DIR': ['itac/lib_s%s' % preferredmpi] - }) - - guesses.update({ + guesses = { 'PATH': ['bin', 'bin/intel64', 'bin64'], 'LD_LIBRARY_PATH': ['lib', 'lib/intel64', 'lib64', 'slib'], - }) + } return guesses def make_module_extra(self): From aacf7d6acef8ed160e605cce2ab4371effd9da5d Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:42:09 +0100 Subject: [PATCH 43/87] remove support for versions of icc prior to v2020.x from imkl easyblock --- easybuild/easyblocks/i/imkl.py | 202 ++++++++++----------------------- 1 file changed, 59 insertions(+), 143 deletions(-) diff --git a/easybuild/easyblocks/i/imkl.py b/easybuild/easyblocks/i/imkl.py index 81efb7f022..f1a414b6c5 100644 --- a/easybuild/easyblocks/i/imkl.py +++ b/easybuild/easyblocks/i/imkl.py @@ -56,7 +56,7 @@ class EB_imkl(IntelBase): """ Class that can be used to install mkl - - tested with 10.2.1.017 + - minimum version suported: 2020.x -- will fail for all older versions (due to newer silent installer) """ @@ -103,17 +103,12 @@ def mkl_basedir(self, path): def prepare_step(self, *args, **kwargs): """Prepare build environment.""" - if LooseVersion(self.version) >= LooseVersion('2017.2.174'): - kwargs['requires_runtime_license'] = False - super(EB_imkl, self).prepare_step(*args, **kwargs) - else: - super(EB_imkl, self).prepare_step(*args, **kwargs) + kwargs['requires_runtime_license'] = False + super(EB_imkl, self).prepare_step(*args, **kwargs) # build the mkl interfaces, if desired if self.cfg['interfaces']: - self.cdftlibs = ['fftw2x_cdft'] - if LooseVersion(self.version) >= LooseVersion('10.3'): - self.cdftlibs.append('fftw3x_cdft') + self.cdftlibs = ['fftw2x_cdft', 'fftw3x_cdft'] # check whether MPI_FAMILY constant is defined, so mpi_family() can be used if hasattr(self.toolchain, 'MPI_FAMILY') and self.toolchain.MPI_FAMILY is not None: mpi_spec_by_fam = { @@ -146,42 +141,22 @@ def install_step(self): - create silent cfg file - execute command """ - silent_cfg_names_map = None silent_cfg_extras = None - - if LooseVersion(self.version) < LooseVersion('11.1'): - # since imkl v11.1, silent.cfg has been slightly changed to be 'more standard' - - silent_cfg_names_map = { - 'activation_name': ACTIVATION_NAME_2012, - 'license_file_name': LICENSE_FILE_NAME_2012, - } - - if LooseVersion(self.version) >= LooseVersion('11.1') and self.install_components is None: + if self.install_components is None: silent_cfg_extras = { 'COMPONENTS': 'ALL', } - - super(EB_imkl, self).install_step( - silent_cfg_names_map=silent_cfg_names_map, - silent_cfg_extras=silent_cfg_extras) + super(EB_imkl, self).install_step(silent_cfg_extras=silent_cfg_extras) def build_mkl_fftw_interfaces(self, libdir): """Build the Intel MKL FFTW interfaces.""" - mkdir(libdir) - loosever = LooseVersion(self.version) - - if loosever >= LooseVersion('10.3'): - intsubdir = self.mkl_basedir - if loosever >= LooseVersion('2024'): - intsubdir = os.path.join(intsubdir, 'share', 'mkl') - intsubdir = os.path.join(intsubdir, 'interfaces') - inttarget = 'libintel64' - else: - intsubdir = 'interfaces' - inttarget = 'libem64t' + intsubdir = self.mkl_basedir + if LooseVersion(self.version) >= LooseVersion('2024'): + intsubdir = os.path.join(intsubdir, 'share', 'mkl') + intsubdir = os.path.join(intsubdir, 'interfaces') + inttarget = 'libintel64' cmd = "make -f makefile %s" % inttarget @@ -373,13 +348,7 @@ def post_install_step(self): 'libmkl_cdft.a': 'GROUP (libmkl_cdft_core.a)' } - loosever = LooseVersion(self.version) - - if loosever >= LooseVersion('10.3'): - libsubdir = os.path.join(self.mkl_basedir, 'lib', 'intel64') - else: - libsubdir = os.path.join('lib', 'em64t') - + libsubdir = os.path.join(self.mkl_basedir, 'lib', 'intel64') libdir = os.path.join(self.installdir, libsubdir) for fil, txt in extra.items(): dest = os.path.join(libdir, fil) @@ -409,24 +378,15 @@ def get_mkl_fftw_interface_libs(self): "don't know compiler suffix for FFTW libraries.") precs = ['_double', '_single'] - ver = LooseVersion(self.version) - if ver < LooseVersion('11'): - # no precision suffix in libfftw2 libs before imkl v11 - precs = [''] - fftw_vers = ['2x%s%s' % (x, prec) for x in ['c', 'f'] for prec in precs] + ['3xc', '3xf'] + fftw_vers = [f'2x{x}{prec}' for x in ['c', 'f'] for prec in precs] + ['3xc', '3xf'] + pics = ['', '_pic'] - libs = ['libfftw%s%s%s.a' % (fftwver, compsuff, pic) for fftwver in fftw_vers for pic in pics] + libs = [f'libfftw{fftwver}{compsuff}{pic}.a' for fftwver in fftw_vers for pic in pics] if self.cdftlibs: - fftw_cdft_vers = ['2x_cdft_DOUBLE', '2x_cdft_SINGLE'] - if ver >= LooseVersion('10.3'): - fftw_cdft_vers.append('3x_cdft') - if ver >= LooseVersion('11.0.2'): - bits = ['_lp64', '_ilp64'] - else: - # no bits suffix in cdft libs before imkl v11.0.2 - bits = [''] - libs += ['libfftw%s%s%s.a' % x for x in itertools.product(fftw_cdft_vers, bits, pics)] + fftw_cdft_vers = ['2x_cdft_DOUBLE', '2x_cdft_SINGLE', '3x_cdft'] + bits = ['_lp64', '_ilp64'] + libs += [f'libfftw{x[0]}{x[1]}{x[2]}.a' for x in itertools.product(fftw_cdft_vers, bits, pics)] return libs @@ -436,7 +396,6 @@ def sanity_check_step(self): mklfiles = None mkldirs = None - ver = LooseVersion(self.version) libs = ['libmkl_core.%s' % shlib_ext, 'libmkl_gnu_thread.%s' % shlib_ext, 'libmkl_intel_thread.%s' % shlib_ext, 'libmkl_sequential.%s' % shlib_ext] extralibs = ['libmkl_blacs_intelmpi_%(suff)s.' + shlib_ext, 'libmkl_scalapack_%(suff)s.' + shlib_ext] @@ -448,44 +407,21 @@ def sanity_check_step(self): libs += [os.path.join('flexiblas', 'libflexiblas_imkl_%s.so' % thread) for thread in ['gnu_thread', 'intel_thread', 'sequential']] - if ver >= LooseVersion('10.3'): - mkldirs = [ - os.path.join(self.mkl_basedir, 'bin'), - os.path.join(self.mkl_basedir, 'lib', 'intel64'), - os.path.join(self.mkl_basedir, 'include'), - ] - libs += [lib % {'suff': suff} for lib in extralibs for suff in ['lp64', 'ilp64']] - - mklfiles = [os.path.join(self.mkl_basedir, 'include', 'mkl.h')] - mklfiles.extend([os.path.join(self.mkl_basedir, 'lib', 'intel64', lib) for lib in libs]) + mkldirs = [ + os.path.join(self.mkl_basedir, 'bin'), + os.path.join(self.mkl_basedir, 'lib', 'intel64'), + os.path.join(self.mkl_basedir, 'include'), + ] + libs += [lib % {'suff': suff} for lib in extralibs for suff in ['lp64', 'ilp64']] - if ver >= LooseVersion('2021'): + mklfiles = [os.path.join(self.mkl_basedir, 'include', 'mkl.h')] + mklfiles.extend([os.path.join(self.mkl_basedir, 'lib', 'intel64', lib) for lib in libs]) + if LooseVersion(self.version) >= LooseVersion('2021'): mklfiles.append(os.path.join(self.mkl_basedir, 'lib', 'intel64', 'libmkl_core.%s' % shlib_ext)) - - elif ver >= LooseVersion('10.3'): - if ver < LooseVersion('11.3'): - mkldirs.append(os.path.join(self.mkl_basedir, 'bin', 'intel64')) - - mklfiles.append(os.path.join(self.mkl_basedir, 'lib', 'intel64', 'libmkl.%s' % shlib_ext)) - - if ver >= LooseVersion('10.3.4') and ver < LooseVersion('11.1'): - mkldirs += [os.path.join('compiler', 'lib', 'intel64')] - elif ver >= LooseVersion('2017.0.0'): - mkldirs += [os.path.join('lib', 'intel64_lin')] - else: - mkldirs += [os.path.join('lib', 'intel64')] - else: - lib_subdir = 'em64t' - libs += [lib % {'suff': suff} for lib in extralibs for suff in ['lp64', 'ilp64']] - - mklfiles = [ - os.path.join('lib', lib_subdir, 'libmkl.%s' % shlib_ext), - os.path.join('include', 'mkl.h'), - ] - mklfiles.extend([os.path.join('lib', lib_subdir, lib) for lib in libs]) - mkldirs = [os.path.join('lib', lib_subdir), os.path.join('include', lib_subdir), 'interfaces'] + mklfiles.append(os.path.join(self.mkl_basedir, 'lib', 'intel64', 'libmkl.%s' % shlib_ext)) + mkldirs += [os.path.join('lib', 'intel64_lin')] custom_paths = { 'files': mklfiles, @@ -500,57 +436,37 @@ def make_module_req_guess(self): """ guesses = super(EB_imkl, self).make_module_req_guess() - if LooseVersion(self.version) >= LooseVersion('10.3'): - if LooseVersion(self.version) >= LooseVersion('2021'): - compiler_subdir = os.path.join(self.get_versioned_subdir('compiler'), self.compiler_libdir) - pkg_config_path = [os.path.join(self.mkl_basedir, 'tools', 'pkgconfig'), - os.path.join(self.mkl_basedir, 'lib', 'pkgconfig')] - else: - compiler_subdir = os.path.join('lib', 'intel64') - pkg_config_path = [os.path.join(self.mkl_basedir, 'bin', 'pkgconfig')] - guesses['MANPATH'] = ['man', os.path.join('man', 'en_US')] - if LooseVersion(self.version) >= LooseVersion('11.0'): - if LooseVersion(self.version) >= LooseVersion('11.3'): - guesses['MIC_LD_LIBRARY_PATH'] = [ - os.path.join('lib', 'intel64_lin_mic'), - os.path.join(self.mkl_basedir, 'lib', 'mic'), - ] - elif LooseVersion(self.version) >= LooseVersion('11.1'): - guesses['MIC_LD_LIBRARY_PATH'] = [ - os.path.join('lib', 'mic'), - os.path.join(self.mkl_basedir, 'lib', 'mic'), - ] - else: - guesses['MIC_LD_LIBRARY_PATH'] = [ - os.path.join('compiler', 'lib', 'mic'), - os.path.join(self.mkl_basedir, 'lib', 'mic'), - ] - library_path = [ - compiler_subdir, - os.path.join(self.mkl_basedir, 'lib', 'intel64'), - ] - cpath = [ - os.path.join(self.mkl_basedir, 'include'), - os.path.join(self.mkl_basedir, 'include', 'fftw'), - ] - cmake_prefix_path = [self.mkl_basedir] - guesses.update({ - 'PATH': [], - 'LD_LIBRARY_PATH': library_path, - 'LIBRARY_PATH': library_path, - 'CPATH': cpath, - 'CMAKE_PREFIX_PATH': cmake_prefix_path, - 'PKG_CONFIG_PATH': pkg_config_path, - }) - if self.cfg['flexiblas']: - guesses['FLEXIBLAS_LIBRARY_PATH'] = os.path.join(library_path[1], 'flexiblas') + if LooseVersion(self.version) >= LooseVersion('2021'): + compiler_subdir = os.path.join(self.get_versioned_subdir('compiler'), self.compiler_libdir) + pkg_config_path = [os.path.join(self.mkl_basedir, 'tools', 'pkgconfig'), + os.path.join(self.mkl_basedir, 'lib', 'pkgconfig')] else: - guesses.update({ - 'PATH': ['bin', 'bin/intel64', 'tbb/bin/em64t'], - 'LD_LIBRARY_PATH': ['lib', 'lib/em64t'], - 'LIBRARY_PATH': ['lib', 'lib/em64t'], - 'MANPATH': ['man', 'share/man', 'man/en_US'], - }) + compiler_subdir = os.path.join('lib', 'intel64') + pkg_config_path = [os.path.join(self.mkl_basedir, 'bin', 'pkgconfig')] + guesses['MANPATH'] = ['man', os.path.join('man', 'en_US')] + guesses['MIC_LD_LIBRARY_PATH'] = [ + os.path.join('lib', 'intel64_lin_mic'), + os.path.join(self.mkl_basedir, 'lib', 'mic'), + ] + library_path = [ + compiler_subdir, + os.path.join(self.mkl_basedir, 'lib', 'intel64'), + ] + cpath = [ + os.path.join(self.mkl_basedir, 'include'), + os.path.join(self.mkl_basedir, 'include', 'fftw'), + ] + cmake_prefix_path = [self.mkl_basedir] + guesses.update({ + 'PATH': [], + 'LD_LIBRARY_PATH': library_path, + 'LIBRARY_PATH': library_path, + 'CPATH': cpath, + 'CMAKE_PREFIX_PATH': cmake_prefix_path, + 'PKG_CONFIG_PATH': pkg_config_path, + }) + if self.cfg['flexiblas']: + guesses['FLEXIBLAS_LIBRARY_PATH'] = os.path.join(library_path[1], 'flexiblas') return guesses def make_module_extra(self): From 6f8850291285c06e2113f451af5e035cc07b4f38 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:47:42 +0100 Subject: [PATCH 44/87] remove support for versions of icc prior to v2020.x from vtune easyblock --- easybuild/easyblocks/v/vtune.py | 37 ++++----------------------------- 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/easybuild/easyblocks/v/vtune.py b/easybuild/easyblocks/v/vtune.py index 94e6ce71fb..91bdf57129 100644 --- a/easybuild/easyblocks/v/vtune.py +++ b/easybuild/easyblocks/v/vtune.py @@ -37,6 +37,7 @@ class EB_VTune(IntelBase): """ Support for installing Intel VTune + - minimum version suported: 2020.x """ def __init__(self, *args, **kwargs): @@ -52,54 +53,24 @@ def __init__(self, *args, **kwargs): self.subdir = os.path.join('vtune', self.version) elif loosever >= LooseVersion('2020'): self.subdir = 'vtune_profiler' - elif loosever >= LooseVersion('2018'): - self.subdir = 'vtune_amplifier' - elif loosever >= LooseVersion('2013_update12'): - self.subdir = 'vtune_amplifier_xe' def prepare_step(self, *args, **kwargs): """Since 2019u3 there is no license required.""" - if LooseVersion(self.version) >= LooseVersion('2019_update3'): - kwargs['requires_runtime_license'] = False + kwargs['requires_runtime_license'] = False super(EB_VTune, self).prepare_step(*args, **kwargs) def make_installdir(self): """Do not create installation directory, install script handles that already.""" super(EB_VTune, self).make_installdir(dontcreate=True) - def install_step(self): - """ - Actual installation - - create silent cfg file - - execute command - """ - silent_cfg_names_map = None - - if LooseVersion(self.version) <= LooseVersion('2013_update11'): - silent_cfg_names_map = { - 'activation_name': ACTIVATION_NAME_2012, - 'license_file_name': LICENSE_FILE_NAME_2012, - } - - super(EB_VTune, self).install_step(silent_cfg_names_map=silent_cfg_names_map) - def make_module_req_guess(self): """Find reasonable paths for VTune""" return self.get_guesses_tools() def sanity_check_step(self): """Custom sanity check paths for VTune.""" - if LooseVersion(self.version) >= LooseVersion('2020'): - binaries = ['amplxe-feedback', 'amplxe-runss', 'vtune', 'vtune-gui'] - else: - binaries = ['amplxe-cl', 'amplxe-feedback', 'amplxe-gui', 'amplxe-runss'] - + binaries = ['amplxe-feedback', 'amplxe-runss', 'vtune', 'vtune-gui'] custom_paths = self.get_custom_paths_tools(binaries) - - custom_commands = [] - if LooseVersion(self.version) >= LooseVersion('2020'): - custom_commands.append('vtune --version') - else: - custom_commands.append('amplxe-cl --version') + custom_commands = ['vtune --version'] super(EB_VTune, self).sanity_check_step(custom_paths=custom_paths, custom_commands=custom_commands) From af016ddfb0922e2abccaf5a7e6cee17f27a04fd7 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:53:10 +0100 Subject: [PATCH 45/87] remove support for versions of icc prior to v2020.x from advisor easyblock --- easybuild/easyblocks/a/advisor.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/easybuild/easyblocks/a/advisor.py b/easybuild/easyblocks/a/advisor.py index 2f24500b20..84bf9033a7 100644 --- a/easybuild/easyblocks/a/advisor.py +++ b/easybuild/easyblocks/a/advisor.py @@ -39,22 +39,20 @@ class EB_Advisor(IntelBase): """ Support for installing Intel Advisor XE + - minimum version suported: 2020.x """ def __init__(self, *args, **kwargs): """Constructor, initialize class variables.""" super(EB_Advisor, self).__init__(*args, **kwargs) - if LooseVersion(self.version) < LooseVersion('2017'): - self.subdir = 'advisor_xe' - elif LooseVersion(self.version) < LooseVersion('2021'): + if LooseVersion(self.version) < LooseVersion('2021'): self.subdir = 'advisor' else: self.subdir = os.path.join('advisor', 'latest') def prepare_step(self, *args, **kwargs): """Since 2019u3 there is no license required.""" - if LooseVersion(self.version) >= LooseVersion('2019_update3'): - kwargs['requires_runtime_license'] = False + kwargs['requires_runtime_license'] = False super(EB_Advisor, self).prepare_step(*args, **kwargs) def make_module_req_guess(self): From 81f04297f81b1a5fdbcab58afb1c10be589f2653 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Tue, 17 Dec 2024 23:54:55 +0100 Subject: [PATCH 46/87] remove support for versions of icc prior to v2020.x from inspector easyblock --- easybuild/easyblocks/i/inspector.py | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/easybuild/easyblocks/i/inspector.py b/easybuild/easyblocks/i/inspector.py index 7d7ddbf062..036287dae4 100644 --- a/easybuild/easyblocks/i/inspector.py +++ b/easybuild/easyblocks/i/inspector.py @@ -37,6 +37,7 @@ class EB_Inspector(IntelBase): """ Support for installing Intel Inspector + - minimum version suported: 2020.x """ def __init__(self, *args, **kwargs): @@ -46,9 +47,7 @@ def __init__(self, *args, **kwargs): # recent versions of Inspector are installed to a subdirectory self.subdir = '' loosever = LooseVersion(self.version) - if loosever >= LooseVersion('2013_update7') and loosever < LooseVersion('2017'): - self.subdir = 'inspector_xe' - elif loosever >= LooseVersion('2017') and loosever < LooseVersion('2021'): + if loosever < LooseVersion('2021'): self.subdir = 'inspector' elif loosever >= LooseVersion('2021'): self.subdir = os.path.join('inspector', 'latest') @@ -57,22 +56,6 @@ def make_installdir(self): """Do not create installation directory, install script handles that already.""" super(EB_Inspector, self).make_installdir(dontcreate=True) - def install_step(self): - """ - Actual installation - - create silent cfg file - - execute command - """ - silent_cfg_names_map = None - - if LooseVersion(self.version) <= LooseVersion('2013_update6'): - silent_cfg_names_map = { - 'activation_name': ACTIVATION_NAME_2012, - 'license_file_name': LICENSE_FILE_NAME_2012, - } - - super(EB_Inspector, self).install_step(silent_cfg_names_map=silent_cfg_names_map) - def make_module_req_guess(self): """Find reasonable paths for Inspector""" return self.get_guesses_tools() From e1f522f421609237216a3528227e57ec12c285fe Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 00:03:44 +0100 Subject: [PATCH 47/87] remove support for versions of icc prior to v2020.x from tbb easyblock --- easybuild/easyblocks/t/tbb.py | 54 +++++++++-------------------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/easybuild/easyblocks/t/tbb.py b/easybuild/easyblocks/t/tbb.py index ddd559f332..9dd6c78be4 100644 --- a/easybuild/easyblocks/t/tbb.py +++ b/easybuild/easyblocks/t/tbb.py @@ -63,18 +63,17 @@ def get_tbb_gccprefix(libpath): # TBB directory structure # https://www.threadingbuildingblocks.org/docs/help/tbb_userguide/Linux_OS.html tbb_gccprefix = 'gcc4.4' # gcc version 4.4 or higher that may or may not support exception_ptr - if gccversion: - gccversion = LooseVersion(gccversion) - if gccversion >= LooseVersion("4.1") and gccversion < LooseVersion("4.4"): - tbb_gccprefix = 'gcc4.1' # gcc version number between 4.1 and 4.4 that do not support exception_ptr - elif os.path.isdir(os.path.join(libpath, 'gcc4.8')) and gccversion >= LooseVersion("4.8"): - tbb_gccprefix = 'gcc4.8' + if os.path.isdir(os.path.join(libpath, 'gcc4.8')) and LooseVersion(gccversion) >= LooseVersion("4.8"): + tbb_gccprefix = 'gcc4.8' return tbb_gccprefix class EB_tbb(IntelBase, ConfigureMake): - """EasyBlock for tbb, threading building blocks""" + """ + EasyBlock for tbb, threading building blocks + - minimum version suported: 2020.x + """ @staticmethod def extra_options(): @@ -149,42 +148,15 @@ def install_step(self): install_tbb_lib_path = os.path.join(self.installdir, 'tbb', 'lib') if self.toolchain.is_system_toolchain(): - silent_cfg_names_map = None - silent_cfg_extras = None - - if LooseVersion(self.version) < LooseVersion('4.2'): - silent_cfg_names_map = { - 'activation_name': ACTIVATION_NAME_2012, - 'license_file_name': LICENSE_FILE_NAME_2012, - } - - elif LooseVersion(self.version) < LooseVersion('4.4'): - silent_cfg_names_map = { - 'install_mode_name': INSTALL_MODE_NAME_2015, - 'install_mode': INSTALL_MODE_2015, - } - # In case of TBB 4.4.x and newer we have to specify ARCH_SELECTED in silent.cfg - if LooseVersion(self.version) >= LooseVersion('4.4'): - silent_cfg_extras = { - 'ARCH_SELECTED': self.arch.upper() - } - - IntelBase.install_step(self, silent_cfg_names_map=silent_cfg_names_map, silent_cfg_extras=silent_cfg_extras) + silent_cfg_extras = { + 'ARCH_SELECTED': self.arch.upper() + } + IntelBase.install_step(self, silent_cfg_extras=silent_cfg_extras) # determine libdir - libpath = os.path.join(self.installdir, 'tbb', 'libs', 'intel64') - if LooseVersion(self.version) < LooseVersion('4.1.0'): - libglob = os.path.join(libpath, 'cc*libc*_kernel*') - libs = sorted(glob.glob(libglob), key=LooseVersion) - if libs: - # take the last one, should be ordered by cc version - # we're only interested in the last bit - libpath = libs[-1] - else: - raise EasyBuildError("No libs found using %s in %s", libglob, self.installdir) - else: - libpath = os.path.join(libpath, get_tbb_gccprefix(libpath)) + libpath_parent = os.path.join(self.installdir, 'tbb', 'libs', 'intel64') + libpath = os.path.join(libpath_parent, get_tbb_gccprefix(libpath_parent)) # applications go looking into tbb/lib so we move what's in there to tbb/libs shutil.move(install_tbb_lib_path, os.path.join(self.installdir, 'tbb', 'libs')) @@ -206,7 +178,7 @@ def install_step(self): symlink(os.path.relpath(root_lib_path, os.path.dirname(libpath)), libpath, use_abspath_source=False) # Install CMake config files if possible - if self._has_cmake() and LooseVersion(self.version) >= LooseVersion('2020.0'): + if self._has_cmake(): cmake_install_dir = os.path.join(root_lib_path, 'cmake', 'TBB') cmd = [ 'cmake', From 0d750084490bca7316b2eba330fe2a0e486ef238 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 00:30:12 +0100 Subject: [PATCH 48/87] remove obsolete globals from IntelBase easyblock --- easybuild/easyblocks/generic/intelbase.py | 14 ++++---------- easybuild/easyblocks/i/icc.py | 3 +-- easybuild/easyblocks/i/ifort.py | 1 - easybuild/easyblocks/i/imkl.py | 2 +- easybuild/easyblocks/i/impi.py | 4 ++-- easybuild/easyblocks/i/inspector.py | 2 +- easybuild/easyblocks/t/tbb.py | 3 +-- easybuild/easyblocks/v/vtune.py | 2 +- 8 files changed, 11 insertions(+), 20 deletions(-) diff --git a/easybuild/easyblocks/generic/intelbase.py b/easybuild/easyblocks/generic/intelbase.py index 89c9055246..e2177251d7 100644 --- a/easybuild/easyblocks/generic/intelbase.py +++ b/easybuild/easyblocks/generic/intelbase.py @@ -48,7 +48,7 @@ from easybuild.framework.easyconfig.types import ensure_iterable_license_specs from easybuild.tools.build_log import EasyBuildError from easybuild.tools.filetools import adjust_permissions, find_flexlm_license -from easybuild.tools.filetools import mkdir, read_file, remove_file, write_file +from easybuild.tools.filetools import read_file, remove_file, write_file from easybuild.tools.run import run_shell_cmd @@ -68,20 +68,14 @@ # silent.cfg parameter name for type of license activation (cfr. options listed above) ACTIVATION_NAME = 'ACTIVATION_TYPE' # since icc/ifort v2013_sp1, impi v4.1.1, imkl v11.1 -ACTIVATION_NAME_2012 = 'ACTIVATION' # previous activation type parameter used in older versions # silent.cfg parameter name for install prefix INSTALL_DIR_NAME = 'PSET_INSTALL_DIR' # silent.cfg parameter name for install mode INSTALL_MODE_NAME = 'PSET_MODE' -# Older (2015 and previous) silent.cfg parameter name for install mode -INSTALL_MODE_NAME_2015 = 'INSTALL_MODE' -# Install mode for 2016 version +# Install mode since 2016 version INSTALL_MODE = 'install' -# Install mode for 2015 and older versions -INSTALL_MODE_2015 = 'NONRPM' # silent.cfg parameter name for license file/server specification LICENSE_FILE_NAME = 'ACTIVATION_LICENSE_FILE' # since icc/ifort v2013_sp1, impi v4.1.1, imkl v11.1 -LICENSE_FILE_NAME_2012 = 'PSET_LICENSE_FILE' # previous license file parameter used in older versions LICENSE_SERIAL_NUMBER = 'ACTIVATION_SERIAL_NUMBER' COMP_ALL = 'ALL' @@ -358,8 +352,8 @@ def install_step_classic(self, silent_cfg_names_map=None, silent_cfg_extras=None ]) % { 'install_dir_name': silent_cfg_names_map.get('install_dir_name', INSTALL_DIR_NAME), 'install_dir': silent_cfg_names_map.get('install_dir', self.installdir), - 'install_mode': silent_cfg_names_map.get('install_mode', INSTALL_MODE_2015), - 'install_mode_name': silent_cfg_names_map.get('install_mode_name', INSTALL_MODE_NAME_2015), + 'install_mode': silent_cfg_names_map.get('install_mode', INSTALL_MODE), + 'install_mode_name': silent_cfg_names_map.get('install_mode_name', INSTALL_MODE_NAME), } if self.install_components is not None: diff --git a/easybuild/easyblocks/i/icc.py b/easybuild/easyblocks/i/icc.py index 74efd94dac..bd563169bf 100644 --- a/easybuild/easyblocks/i/icc.py +++ b/easybuild/easyblocks/i/icc.py @@ -38,8 +38,7 @@ import re from easybuild.tools import LooseVersion -from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, COMP_ALL -from easybuild.easyblocks.generic.intelbase import LICENSE_FILE_NAME_2012 +from easybuild.easyblocks.generic.intelbase import IntelBase, COMP_ALL from easybuild.easyblocks.t.tbb import get_tbb_gccprefix from easybuild.tools.run import run_shell_cmd from easybuild.tools.systemtools import get_shared_lib_ext diff --git a/easybuild/easyblocks/i/ifort.py b/easybuild/easyblocks/i/ifort.py index 67affe0083..ad3232a833 100644 --- a/easybuild/easyblocks/i/ifort.py +++ b/easybuild/easyblocks/i/ifort.py @@ -34,7 +34,6 @@ """ import os -from easybuild.tools import LooseVersion from easybuild.easyblocks.generic.intelbase import IntelBase from easybuild.easyblocks.icc import EB_icc # @UnresolvedImport diff --git a/easybuild/easyblocks/i/imkl.py b/easybuild/easyblocks/i/imkl.py index f1a414b6c5..1ada8b9419 100644 --- a/easybuild/easyblocks/i/imkl.py +++ b/easybuild/easyblocks/i/imkl.py @@ -43,7 +43,7 @@ import easybuild.tools.environment as env import easybuild.tools.toolchain as toolchain -from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, LICENSE_FILE_NAME_2012 +from easybuild.easyblocks.generic.intelbase import IntelBase from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.build_log import EasyBuildError from easybuild.tools.config import build_option diff --git a/easybuild/easyblocks/i/impi.py b/easybuild/easyblocks/i/impi.py index 2a4760b495..bec1f1021e 100644 --- a/easybuild/easyblocks/i/impi.py +++ b/easybuild/easyblocks/i/impi.py @@ -38,11 +38,11 @@ from easybuild.tools import LooseVersion import easybuild.tools.toolchain as toolchain -from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, LICENSE_FILE_NAME_2012 +from easybuild.easyblocks.generic.intelbase import IntelBase from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.build_log import EasyBuildError from easybuild.tools.config import build_option -from easybuild.tools.filetools import apply_regex_substitutions, change_dir, extract_file, mkdir, write_file +from easybuild.tools.filetools import apply_regex_substitutions, change_dir, extract_file from easybuild.tools.modules import get_software_root, get_software_version from easybuild.tools.run import run_shell_cmd from easybuild.tools.systemtools import get_shared_lib_ext diff --git a/easybuild/easyblocks/i/inspector.py b/easybuild/easyblocks/i/inspector.py index 036287dae4..efa75ae05c 100644 --- a/easybuild/easyblocks/i/inspector.py +++ b/easybuild/easyblocks/i/inspector.py @@ -31,7 +31,7 @@ import os from easybuild.tools import LooseVersion -from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, LICENSE_FILE_NAME_2012 +from easybuild.easyblocks.generic.intelbase import IntelBase class EB_Inspector(IntelBase): diff --git a/easybuild/easyblocks/t/tbb.py b/easybuild/easyblocks/t/tbb.py index 9dd6c78be4..17e58da2fd 100644 --- a/easybuild/easyblocks/t/tbb.py +++ b/easybuild/easyblocks/t/tbb.py @@ -40,8 +40,7 @@ from easybuild.tools import LooseVersion from easybuild.easyblocks.generic.configuremake import ConfigureMake -from easybuild.easyblocks.generic.intelbase import INSTALL_MODE_NAME_2015, INSTALL_MODE_2015 -from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, LICENSE_FILE_NAME_2012 +from easybuild.easyblocks.generic.intelbase import IntelBase from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.filetools import find_glob_pattern, move_file, symlink from easybuild.tools.build_log import EasyBuildError diff --git a/easybuild/easyblocks/v/vtune.py b/easybuild/easyblocks/v/vtune.py index 91bdf57129..aeaa4e782e 100644 --- a/easybuild/easyblocks/v/vtune.py +++ b/easybuild/easyblocks/v/vtune.py @@ -31,7 +31,7 @@ from easybuild.tools import LooseVersion import os -from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, LICENSE_FILE_NAME_2012 +from easybuild.easyblocks.generic.intelbase import IntelBase class EB_VTune(IntelBase): From ac09229463580407351bfaf1f1ab5ea0690b82cd Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 00:32:48 +0100 Subject: [PATCH 49/87] remove unusued glob from itav easyblock --- easybuild/easyblocks/i/itac.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/easybuild/easyblocks/i/itac.py b/easybuild/easyblocks/i/itac.py index d104da929c..27cbdaba97 100644 --- a/easybuild/easyblocks/i/itac.py +++ b/easybuild/easyblocks/i/itac.py @@ -32,8 +32,6 @@ @author: Jens Timmerman (Ghent University) """ -import os - from easybuild.tools import LooseVersion from easybuild.easyblocks.generic.intelbase import IntelBase From 1b2b138361698a563208fcfa423b5e2f24d9f9ba Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 00:33:06 +0100 Subject: [PATCH 50/87] remove unused os from tbb easyblock --- easybuild/easyblocks/t/tbb.py | 1 - 1 file changed, 1 deletion(-) diff --git a/easybuild/easyblocks/t/tbb.py b/easybuild/easyblocks/t/tbb.py index 17e58da2fd..85f37f2108 100644 --- a/easybuild/easyblocks/t/tbb.py +++ b/easybuild/easyblocks/t/tbb.py @@ -34,7 +34,6 @@ @author: Simon Branford (University of Birmingham) """ -import glob import os import shutil from easybuild.tools import LooseVersion From a2bc105836cb14e2c3fc31e57d42d025c90d6c8a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Dec 2024 08:51:44 +0100 Subject: [PATCH 51/87] use "options" rather than "arguments" in help text for unrecognized_configure_options custom easyconfig parameter --- easybuild/easyblocks/generic/configuremake.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/configuremake.py b/easybuild/easyblocks/generic/configuremake.py index 33fbea7b5b..adbc12d385 100644 --- a/easybuild/easyblocks/generic/configuremake.py +++ b/easybuild/easyblocks/generic/configuremake.py @@ -197,7 +197,7 @@ def extra_options(extra_vars=None): 'test_cmd': [None, "Test command to use ('runtest' value is appended, default: '%s')" % DEFAULT_TEST_CMD, CUSTOM], 'unrecognized_configure_options': [ERROR, - "Action to do when unrecognized arguments passed to ./configure are" + "Action to do when unrecognized options passed to ./configure are" " detected, defaults to aborting the build. Can be set to '" + WARN + "' or '" + IGNORE + "' (NOT RECOMMENDED! It might hide actual errors" " e.g. misspelling of intended or changed options)", CUSTOM], From 51b25e537df326b383b6d85ac70a5672c4046455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Wed, 18 Dec 2024 09:13:19 +0100 Subject: [PATCH 52/87] Drop unused imports --- easybuild/easyblocks/p/python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/p/python.py b/easybuild/easyblocks/p/python.py index 8cb78b2bcf..824a44dd11 100644 --- a/easybuild/easyblocks/p/python.py +++ b/easybuild/easyblocks/p/python.py @@ -45,7 +45,7 @@ from easybuild.framework.easyconfig import CUSTOM from easybuild.framework.easyconfig.templates import PYPI_SOURCE from easybuild.tools.build_log import EasyBuildError, print_warning -from easybuild.tools.config import build_option, ERROR, log_path, PYTHONPATH, EBPYTHONPREFIXES +from easybuild.tools.config import build_option, ERROR, EBPYTHONPREFIXES from easybuild.tools.modules import get_software_libdir, get_software_root, get_software_version from easybuild.tools.filetools import apply_regex_substitutions, change_dir, mkdir from easybuild.tools.filetools import read_file, remove_dir, symlink, write_file From e8a9f7b7917144e74dbaacb9bb7f2696f0446264 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 10:09:36 +0100 Subject: [PATCH 53/87] remove unused ipp easyblock --- easybuild/easyblocks/i/ipp.py | 129 ---------------------------------- 1 file changed, 129 deletions(-) delete mode 100644 easybuild/easyblocks/i/ipp.py diff --git a/easybuild/easyblocks/i/ipp.py b/easybuild/easyblocks/i/ipp.py deleted file mode 100644 index d39c55b07b..0000000000 --- a/easybuild/easyblocks/i/ipp.py +++ /dev/null @@ -1,129 +0,0 @@ -## -# Copyright 2009-2024 Ghent University -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), -# Flemish Research Foundation (FWO) (http://www.fwo.be/en) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# https://github.com/easybuilders/easybuild -# -# EasyBuild is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation v2. -# -# EasyBuild is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with EasyBuild. If not, see . -## -""" -EasyBuild support for installing the Intel Performance Primitives (IPP) library, implemented as an easyblock - -@author: Stijn De Weirdt (Ghent University) -@author: Dries Verdegem (Ghent University) -@author: Kenneth Hoste (Ghent University) -@author: Pieter De Baets (Ghent University) -@author: Jens Timmerman (Ghent University) -@author: Lumir Jasiok (IT4Innovations) -@author: Damian Alvarez (Forschungszentrum Juelich GmbH) -""" - -from easybuild.tools import LooseVersion -import os - -from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, LICENSE_FILE_NAME_2012 -from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.systemtools import get_platform_name -from easybuild.tools.systemtools import get_shared_lib_ext - - -class EB_ipp(IntelBase): - """ - Support for installing Intel Integrated Performance Primitives library - """ - - def install_step(self): - """ - Actual installation - - create silent cfg file - - execute command - """ - - platform_name = get_platform_name() - if platform_name.startswith('x86_64'): - self.arch = "intel64" - elif platform_name.startswith('i386') or platform_name.startswith('i686'): - self.arch = 'ia32' - else: - raise EasyBuildError("Failed to determine system architecture based on %s", platform_name) - - silent_cfg_names_map = None - silent_cfg_extras = None - - if LooseVersion(self.version) < LooseVersion('8.0'): - silent_cfg_names_map = { - 'activation_name': ACTIVATION_NAME_2012, - 'license_file_name': LICENSE_FILE_NAME_2012, - } - - # in case of IPP 9.x, we have to specify ARCH_SELECTED in silent.cfg - if LooseVersion(self.version) >= LooseVersion('9.0'): - silent_cfg_extras = { - 'ARCH_SELECTED': self.arch.upper() - } - - super(EB_ipp, self).install_step(silent_cfg_names_map=silent_cfg_names_map, silent_cfg_extras=silent_cfg_extras) - - def sanity_check_step(self): - """Custom sanity check paths for IPP.""" - shlib_ext = get_shared_lib_ext() - - dirs = [os.path.join('ipp', x) for x in ['bin', 'include', os.path.join('tools', 'intel64')]] - if LooseVersion(self.version) < LooseVersion('8.0'): - dirs.extend([ - os.path.join('compiler', 'lib', 'intel64'), - os.path.join('ipp', 'interfaces', 'data-compression'), - ]) - elif LooseVersion(self.version) < LooseVersion('9.0'): - dirs.extend([ - os.path.join('composerxe', 'lib', 'intel64'), - ]) - - ipp_libs = ['cc', 'ch', 'core', 'cv', 'dc', 'i', 's', 'vm'] - if LooseVersion(self.version) < LooseVersion('9.0'): - ipp_libs.extend(['ac', 'di', 'j', 'm', 'r', 'sc', 'vc']) - - custom_paths = { - 'files': [ - os.path.join('ipp', 'lib', 'intel64', 'libipp%s') % y for x in ipp_libs - for y in ['%s.a' % x, '%s.%s' % (x, shlib_ext)] - ], - 'dirs': dirs, - } - - super(EB_ipp, self).sanity_check_step(custom_paths=custom_paths) - - def make_module_req_guess(self): - """ - A dictionary of possible directories to look for - """ - guesses = super(EB_ipp, self).make_module_req_guess() - - if LooseVersion(self.version) >= LooseVersion('9.0'): - lib_path = [os.path.join('ipp', 'lib', self.arch), os.path.join('lib', self.arch)] - include_path = os.path.join('ipp', 'include') - - guesses.update({ - 'LD_LIBRARY_PATH': lib_path, - 'LIBRARY_PATH': lib_path, - 'CPATH': [include_path], - 'INCLUDE': [include_path], - }) - - return guesses From 373dd17f6ead8b2db3e62498ae7f245d3ef0bfd3 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 10:37:36 +0100 Subject: [PATCH 54/87] raise error for obsolete versions of easyconfigs based on IntelBase easyblock --- easybuild/easyblocks/a/advisor.py | 7 +++++++ easybuild/easyblocks/i/icc.py | 10 ++++++++-- easybuild/easyblocks/i/ifort.py | 13 ++++++++++++- easybuild/easyblocks/i/imkl.py | 4 ++++ easybuild/easyblocks/i/impi.py | 5 +++++ easybuild/easyblocks/i/inspector.py | 8 +++++++- easybuild/easyblocks/i/itac.py | 9 +++++++++ easybuild/easyblocks/t/tbb.py | 5 +++++ easybuild/easyblocks/v/vtune.py | 6 ++++++ 9 files changed, 63 insertions(+), 4 deletions(-) diff --git a/easybuild/easyblocks/a/advisor.py b/easybuild/easyblocks/a/advisor.py index 84bf9033a7..63b2c526bf 100644 --- a/easybuild/easyblocks/a/advisor.py +++ b/easybuild/easyblocks/a/advisor.py @@ -34,6 +34,7 @@ from easybuild.tools import LooseVersion from easybuild.easyblocks.generic.intelbase import IntelBase +from easybuild.tools.build_log import EasyBuildError class EB_Advisor(IntelBase): @@ -45,6 +46,12 @@ class EB_Advisor(IntelBase): def __init__(self, *args, **kwargs): """Constructor, initialize class variables.""" super(EB_Advisor, self).__init__(*args, **kwargs) + + if LooseVersion(self.version) < LooseVersion('2020'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2020.0." + ) + if LooseVersion(self.version) < LooseVersion('2021'): self.subdir = 'advisor' else: diff --git a/easybuild/easyblocks/i/icc.py b/easybuild/easyblocks/i/icc.py index bd563169bf..a773340fd3 100644 --- a/easybuild/easyblocks/i/icc.py +++ b/easybuild/easyblocks/i/icc.py @@ -40,6 +40,7 @@ from easybuild.easyblocks.generic.intelbase import IntelBase, COMP_ALL from easybuild.easyblocks.t.tbb import get_tbb_gccprefix +from easybuild.tools.build_log import EasyBuildError from easybuild.tools.run import run_shell_cmd from easybuild.tools.systemtools import get_shared_lib_ext @@ -58,7 +59,7 @@ def get_icc_version(): class EB_icc(IntelBase): """ Support for installing icc - - minimum version suported: 2020.x + - minimum version suported: 2020.0 """ def __init__(self, *args, **kwargs): @@ -73,7 +74,12 @@ def __init__(self, *args, **kwargs): # required because of support in SystemCompiler generic easyblock to specify 'system' as version, # which results in deriving the actual compiler version # comparing a non-version like 'system' with an actual version like '2016' fails with TypeError in Python 3.x - if re.match(r'^[0-9]+.*', self.version) and LooseVersion(self.version) >= LooseVersion('2020'): + if re.match(r'^[0-9]+.*', self.version): + + if LooseVersion(self.version) < LooseVersion('2020'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2020.0." + ) self.comp_libs_subdir = os.path.join(f'compilers_and_libraries_{self.version}', 'linux') diff --git a/easybuild/easyblocks/i/ifort.py b/easybuild/easyblocks/i/ifort.py index ad3232a833..d2d66adf95 100644 --- a/easybuild/easyblocks/i/ifort.py +++ b/easybuild/easyblocks/i/ifort.py @@ -37,16 +37,27 @@ from easybuild.easyblocks.generic.intelbase import IntelBase from easybuild.easyblocks.icc import EB_icc # @UnresolvedImport +from easybuild.tools import LooseVersion +from easybuild.tools.build_log import EasyBuildError from easybuild.tools.systemtools import get_shared_lib_ext class EB_ifort(EB_icc, IntelBase): """ Class that can be used to install ifort - - minimum version suported: 2020.x + - minimum version suported: 2020.0 - will fail for all older versions (due to newer silent installer) """ + def __init__(self, *args, **kwargs): + """Constructor, initialize class variables.""" + super().__init__(*args, **kwargs) + + if LooseVersion(self.version) < LooseVersion('2020'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2020.0." + ) + def sanity_check_step(self): """Custom sanity check paths for ifort.""" shlib_ext = get_shared_lib_ext() diff --git a/easybuild/easyblocks/i/imkl.py b/easybuild/easyblocks/i/imkl.py index 1ada8b9419..1ec95de9d5 100644 --- a/easybuild/easyblocks/i/imkl.py +++ b/easybuild/easyblocks/i/imkl.py @@ -73,6 +73,10 @@ def extra_options(): def __init__(self, *args, **kwargs): """Constructor for imkl easyblock.""" super(EB_imkl, self).__init__(*args, **kwargs) + if LooseVersion(self.version) < LooseVersion('2020'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2020.0." + ) # make sure $MKLROOT isn't set, it's known to cause problems with the installation self.cfg.update('unwanted_env_vars', ['MKLROOT']) diff --git a/easybuild/easyblocks/i/impi.py b/easybuild/easyblocks/i/impi.py index bec1f1021e..3f3388518e 100644 --- a/easybuild/easyblocks/i/impi.py +++ b/easybuild/easyblocks/i/impi.py @@ -79,6 +79,11 @@ def install_step(self): """ impiver = LooseVersion(self.version) + if impiver < LooseVersion('2018'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2018.0." + ) + if impiver >= LooseVersion('2021'): super(EB_impi, self).install_step() else: diff --git a/easybuild/easyblocks/i/inspector.py b/easybuild/easyblocks/i/inspector.py index efa75ae05c..c79b88cb6b 100644 --- a/easybuild/easyblocks/i/inspector.py +++ b/easybuild/easyblocks/i/inspector.py @@ -32,6 +32,7 @@ from easybuild.tools import LooseVersion from easybuild.easyblocks.generic.intelbase import IntelBase +from easybuild.tools.build_log import EasyBuildError class EB_Inspector(IntelBase): @@ -44,9 +45,14 @@ def __init__(self, *args, **kwargs): """Easyblock constructor; define class variables.""" super(EB_Inspector, self).__init__(*args, **kwargs) + loosever = LooseVersion(self.version) + if loosever < LooseVersion('2020'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2020.0." + ) + # recent versions of Inspector are installed to a subdirectory self.subdir = '' - loosever = LooseVersion(self.version) if loosever < LooseVersion('2021'): self.subdir = 'inspector' elif loosever >= LooseVersion('2021'): diff --git a/easybuild/easyblocks/i/itac.py b/easybuild/easyblocks/i/itac.py index 27cbdaba97..6261ab2cfa 100644 --- a/easybuild/easyblocks/i/itac.py +++ b/easybuild/easyblocks/i/itac.py @@ -53,6 +53,15 @@ def extra_options(): } return IntelBase.extra_options(extra_vars) + def __init__(self, *args, **kwargs): + """Constructor, initialize class variables.""" + super().__init__(*args, **kwargs) + + if LooseVersion(self.version) < LooseVersion('2019'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2019.0." + ) + def prepare_step(self, *args, **kwargs): """ Custom prepare step for itac: don't require runtime license for oneAPI versions (>= 2021) diff --git a/easybuild/easyblocks/t/tbb.py b/easybuild/easyblocks/t/tbb.py index 85f37f2108..f2d7ed6d7f 100644 --- a/easybuild/easyblocks/t/tbb.py +++ b/easybuild/easyblocks/t/tbb.py @@ -86,6 +86,11 @@ def __init__(self, *args, **kwargs): """Initialisation of custom class variables for tbb""" super(EB_tbb, self).__init__(*args, **kwargs) + if LooseVersion(self.version) < LooseVersion('2020'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2020.0." + ) + platform_name = get_platform_name() myarch = get_cpu_architecture() if platform_name.startswith('x86_64'): diff --git a/easybuild/easyblocks/v/vtune.py b/easybuild/easyblocks/v/vtune.py index aeaa4e782e..db62e40944 100644 --- a/easybuild/easyblocks/v/vtune.py +++ b/easybuild/easyblocks/v/vtune.py @@ -32,6 +32,7 @@ import os from easybuild.easyblocks.generic.intelbase import IntelBase +from easybuild.tools.build_log import EasyBuildError class EB_VTune(IntelBase): @@ -47,6 +48,11 @@ def __init__(self, *args, **kwargs): # recent versions of VTune are installed to a subdirectory self.subdir = '' loosever = LooseVersion(self.version) + if loosever < LooseVersion('2020'): + raise EasyBuildError( + f"Version {self.version} of {self.name} is unsupported. Mininum supported version is 2020.0." + ) + if loosever >= LooseVersion('2024'): self.subdir = os.path.join('vtune', '.'.join([str(loosever.version[0]), str(loosever.version[1])])) elif loosever >= LooseVersion('2021'): From 969518aa897076b21338f4b00cbd1f9e5c35d3be Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 12:27:10 +0100 Subject: [PATCH 55/87] use fake version to test initialization of IntelBase family of easyblocks --- test/easyblocks/init_easyblocks.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/easyblocks/init_easyblocks.py b/test/easyblocks/init_easyblocks.py index 68331218bd..6bb786d715 100644 --- a/test/easyblocks/init_easyblocks.py +++ b/test/easyblocks/init_easyblocks.py @@ -228,6 +228,10 @@ def innertest(self): elif easyblock_fn == 'systemmpi.py': # use OpenMPI as name when testing SystemMPI easyblock innertest = make_inner_test(easyblock, name='OpenMPI', version='system') + elif easyblock_fn in ['advisor.py', 'icc.py', 'iccifort.py', 'ifort.py', 'imkl.py', 'imkl_fftw.py', + 'inspector.py', 'itac.py', 'tbb.py', 'vtune.py']: + # family of IntelBase easyblocks have a minimum version support based on currently supported toolchains + innertest = make_inner_test(easyblock, version='9999.9') elif easyblock_fn == 'intel_compilers.py': # custom easyblock for intel-compilers (oneAPI) requires v2021.x or newer innertest = make_inner_test(easyblock, name='intel-compilers', version='2021.1') From 5a9af34e1378aaec8981db52e3150b3811d78dcc Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Wed, 18 Dec 2024 13:21:42 +0100 Subject: [PATCH 56/87] use fake version to test module-only on IntelBase family of easyblocks --- test/easyblocks/module.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/easyblocks/module.py b/test/easyblocks/module.py index 7b9c6d612f..6377260243 100644 --- a/test/easyblocks/module.py +++ b/test/easyblocks/module.py @@ -458,6 +458,10 @@ def innertest(self): # exactly one dependency is included with ModuleRC generic easyblock (and name must match) extra_txt = 'dependencies = [("foo", "1.2.3.4.5")]' innertest = make_inner_test(easyblock, name='foo', version='1.2.3.4', extra_txt=extra_txt) + elif eb_fn in ['advisor.py', 'icc.py', 'iccifort.py', 'ifort.py', 'imkl.py', 'imkl_fftw.py', + 'inspector.py', 'itac.py', 'tbb.py', 'vtune.py']: + # family of IntelBase easyblocks have a minimum version support based on currently supported toolchains + innertest = make_inner_test(easyblock, name=eb_fn.replace('_', '-')[:-3], version='9999.9') elif eb_fn == 'intel_compilers.py': # custom easyblock for intel-compilers (oneAPI) requires v2021.x or newer innertest = make_inner_test(easyblock, name='intel-compilers', version='2021.1') From 6c04a20b7bed3a2531751b4152dfd2169348686c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Dec 2024 15:21:55 +0100 Subject: [PATCH 57/87] remove unused custom easyblock for TAU --- easybuild/easyblocks/t/tau.py | 280 ---------------------------------- 1 file changed, 280 deletions(-) delete mode 100644 easybuild/easyblocks/t/tau.py diff --git a/easybuild/easyblocks/t/tau.py b/easybuild/easyblocks/t/tau.py deleted file mode 100644 index 2cb7598656..0000000000 --- a/easybuild/easyblocks/t/tau.py +++ /dev/null @@ -1,280 +0,0 @@ -## -# Copyright 2009-2024 Ghent University -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en), -# Flemish Research Foundation (FWO) (http://www.fwo.be/en) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# https://github.com/easybuilders/easybuild -# -# EasyBuild is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation v2. -# -# EasyBuild is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with EasyBuild. If not, see . -## -""" -EasyBuild support for building and installing TAU, implemented as an easyblock - -@author Kenneth Hoste (Ghent University) -@author Markus Geimer (Juelich Supercomputing Centre) -@author Bernd Mohr (Juelich Supercomputing Centre) -""" -import os - -from easybuild.easyblocks.generic.configuremake import ConfigureMake -from easybuild.easyblocks.pdt import find_arch_dir -from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools import toolchain -from easybuild.tools.build_log import EasyBuildError, print_msg -from easybuild.tools.filetools import symlink -from easybuild.tools.modules import get_software_root, get_software_version -from easybuild.tools.systemtools import get_shared_lib_ext - - -KNOWN_BACKENDS = { - 'scalasca': 'Scalasca', - 'scorep': 'Score-P', - 'vampirtrace': 'Vampirtrace', -} - - -class EB_TAU(ConfigureMake): - """Support for building/installing TAU.""" - - @staticmethod - def extra_options(): - """Custom easyconfig parameters for TAU.""" - backends = "Extra TAU backends to build and install; possible values: %s" % ','.join(sorted(KNOWN_BACKENDS)) - extra_vars = { - 'extra_backends': [None, backends, CUSTOM], - 'tau_makefile': ['Makefile.tau-papi-mpi-pdt', "Name of Makefile to use in $TAU_MAKEFILE", CUSTOM], - } - return ConfigureMake.extra_options(extra_vars) - - def __init__(self, *args, **kwargs): - """Initialize TAU easyblock.""" - super(EB_TAU, self).__init__(*args, **kwargs) - - self.variant_index = 0 - self.cc, self.cxx, self.fortran = None, None, None - self.mpi_inc_dir, self.mpi_lib_dir = None, None - self.opt_pkgs_opts = None - self.variant_labels = None - - def run_all_steps(self, *args, **kwargs): - """ - Put configure options in place for the different selected backends of TAU, - for the MPI, OpenMP, and hybrid variants. - """ - if self.cfg['extra_backends'] is None: - self.cfg['extra_backends'] = [] - - # make sure selected extra backends are known - unknown_backends = [] - for backend in self.cfg['extra_backends']: - if backend not in KNOWN_BACKENDS: - unknown_backends.append(backend) - if unknown_backends: - raise EasyBuildError("Encountered unknown backends: %s", ', '.join(unknown_backends)) - - # compiler options - comp_opts = "-cc=%(cc)s -c++=%(cxx)s -fortran=%(fortran)s" - - # variant-specific options - openmp_opts = " -opari" - mpi_opts = " -mpiinc=%(mpi_inc_dir)s -mpilib=%(mpi_lib_dir)s" - - # options for optional packages - opt_pkgs_opts = " %(opt_pkgs_opts)s" - - # backend option - backend_opt = " %(backend_opt)s" - - # compose templates - mpi_tmpl = comp_opts + mpi_opts + opt_pkgs_opts + backend_opt - openmp_tmpl = comp_opts + openmp_opts + opt_pkgs_opts + backend_opt - hybrid_tmpl = comp_opts + openmp_opts + mpi_opts + opt_pkgs_opts + backend_opt - - # number of iterations: # backends + 1 (for basic) - iter_cnt = len(self.cfg['extra_backends']) + 1 - - # define list of configure options to iterate over - if self.cfg['configopts']: - raise EasyBuildError("Specifying additional configure options for TAU is not supported (yet)") - - self.cfg['configopts'] = [mpi_tmpl, openmp_tmpl, hybrid_tmpl] * iter_cnt - self.log.debug("List of configure options to iterate over: %s", self.cfg['configopts']) - - # custom prefix option for configure command - self.cfg['prefix_opt'] = '-prefix=' - - # installation command is 'make install clean' - self.cfg.update('installopts', 'clean') - - return super(EB_TAU, self).run_all_steps(*args, **kwargs) - - def prepare_step(self, *args, **kwargs): - """Custom prepare step for Tau: check required dependencies and collect information on them.""" - super(EB_TAU, self).prepare_step(*args, **kwargs) - - # install prefixes for selected backends - self.backend_opts = {'tau': ''} - for backend_name, dep in KNOWN_BACKENDS.items(): - root = get_software_root(dep) - if backend_name in self.cfg['extra_backends']: - if root: - self.backend_opts[backend_name] = "-%s=%s" % (backend_name, root) - else: - raise EasyBuildError("%s is listed in extra_backends, but not available as a dependency", dep) - elif root: - raise EasyBuildError("%s included as dependency, but '%s' not in extra_backends", dep, backend_name) - - # make sure Scalasca v1.x is used as a dependency (if it's there) - if 'scalasca' in self.backend_opts and get_software_version('Scalasca').split('.')[0] != '1': - raise EasyBuildError("Scalasca v1.x must be used when scalasca backend is enabled") - - # determine values for compiler flags to use - known_compilers = { - toolchain.CLANGGCC: ['clang', 'clang++', 'gfortran'], - toolchain.GCC: ['gcc', 'g++', 'gfortran'], - toolchain.INTELCOMP: ['icc', 'icpc', 'intel'], - } - comp_fam = self.toolchain.comp_family() - if comp_fam in known_compilers: - self.cc, self.cxx, self.fortran = known_compilers[comp_fam] - - # determine values for MPI flags - self.mpi_inc_dir, self.mpi_lib_dir = os.getenv('MPI_INC_DIR'), os.getenv('MPI_LIB_DIR') - - # determine value for optional packages option template - self.opt_pkgs_opts = '' - for dep, opt in [('OTF', 'otf'), ('PAPI', 'papi'), ('PDT', 'pdt'), ('binutils', 'bfd')]: - root = get_software_root(dep) - if root: - self.opt_pkgs_opts += ' -%s=%s' % (opt, root) - - # determine list of labels, based on selected (extra) backends, variants and optional packages - self.variant_labels = [] - backend_labels = ['', '-epilog-scalasca-trace', '-scorep', '-vampirtrace-trace'] - for backend, backend_label in zip(['tau'] + sorted(KNOWN_BACKENDS.keys()), backend_labels): - if backend in ['tau'] + self.cfg['extra_backends']: - for pref, suff in [('-mpi', ''), ('', '-openmp-opari'), ('-mpi', '-openmp-opari')]: - - variant_label = 'tau' - # For non-GCC builds, the compiler name is encoded in the variant - if self.cxx and self.cxx != 'g++': - variant_label += '-' + self.cxx - if get_software_root('PAPI'): - variant_label += '-papi' - variant_label += pref - if get_software_root('PDT'): - variant_label += '-pdt' - variant_label += suff + backend_label - - self.variant_labels.append(variant_label) - - def make_installdir(self): - """Skip make install dir 'step', install dir is already created in prepare_step.""" - pass - - def configure_step(self): - """Custom configuration procedure for TAU: template configuration options before using them.""" - if self.cc is None or self.cxx is None or self.fortran is None: - raise EasyBuildError("Compiler family not supported yet: %s", self.toolchain.comp_family()) - - if self.mpi_inc_dir is None or self.mpi_lib_dir is None: - raise EasyBuildError("Failed to determine MPI include/library paths, no MPI available in toolchain?") - - # make sure selected default TAU makefile will be available - avail_makefiles = ['Makefile.' + x for x in self.variant_labels] - if self.cfg['tau_makefile'] not in avail_makefiles: - raise EasyBuildError("Specified tau_makefile %s will not be available (only: %s)", - self.cfg['tau_makefile'], avail_makefiles) - - # inform which backend/variant is being handled - backend = (['tau'] + self.cfg['extra_backends'])[self.variant_index // 3] - variant = ['mpi', 'openmp', 'hybrid'][self.variant_index % 3] - print_msg("starting with %s backend (%s variant)" % (backend, variant), log=self.log, silent=self.silent) - - self.cfg['configopts'] = self.cfg['configopts'] % { - 'backend_opt': self.backend_opts[backend], - 'cc': self.cc, - 'cxx': self.cxx, - 'fortran': self.fortran, - 'mpi_inc_dir': self.mpi_inc_dir, - 'mpi_lib_dir': self.mpi_lib_dir, - 'opt_pkgs_opts': self.opt_pkgs_opts, - } - - for key in ['preconfigopts', 'configopts', 'prebuildopts', 'preinstallopts']: - self.log.debug("%s for TAU (variant index: %s): %s", key, self.variant_index, self.cfg[key]) - - # Configure creates required subfolders in installdir, so create first (but only once, during first iteration) - if self.iter_idx == 0: - super(EB_TAU, self).make_installdir() - - super(EB_TAU, self).configure_step() - - self.variant_index += 1 - - def build_step(self): - """No custom build procedure for TAU.""" - pass - - def install_step(self): - """Create symlinks into arch-specific directories""" - super(EB_TAU, self).install_step() - # Link arch-specific directories into prefix - arch_dir = find_arch_dir(self.installdir) - self.log.info('Found %s as architecture specific directory. Creating symlinks...', arch_dir) - for subdir in ('bin', 'lib'): - src = os.path.join(arch_dir, subdir) - dst = os.path.join(self.installdir, subdir) - if os.path.lexists(dst): - self.log.info('Skipping creation of symlink %s as it already exists', dst) - else: - symlink(os.path.relpath(src, self.installdir), dst, use_abspath_source=False) - - def sanity_check_step(self): - """Custom sanity check for TAU.""" - custom_paths = { - 'files': - [os.path.join('bin', 'pprof'), os.path.join('include', 'TAU.h'), - os.path.join('lib', 'libTAU.%s' % get_shared_lib_ext())] + - [os.path.join('lib', 'lib%s.a' % x) for x in self.variant_labels] + - [os.path.join('lib', 'Makefile.' + x) for x in self.variant_labels], - 'dirs': [], - } - super(EB_TAU, self).sanity_check_step(custom_paths=custom_paths) - - def make_module_extra(self): - """Custom extra module file entries for TAU.""" - txt = super(EB_TAU, self).make_module_extra() - - txt += self.module_generator.prepend_paths('TAU_MF_DIR', 'lib') - - tau_makefile = os.path.join(self.installdir, 'lib', self.cfg['tau_makefile']) - txt += self.module_generator.set_environment('TAU_MAKEFILE', tau_makefile) - - # default measurement settings - tau_vars = { - 'TAU_CALLPATH': '1', - 'TAU_CALLPATH_DEPTH': '10', - 'TAU_COMM_MATRIX': '1', - 'TAU_PROFILE': '1', - 'TAU_TRACE': '0', - } - for key in tau_vars: - txt += self.module_generator.set_environment(key, tau_vars[key]) - - return txt From 9cf1f2f52ec4474fbf5bfeff9ad3cc22e9edf956 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Dec 2024 15:30:18 +0100 Subject: [PATCH 58/87] clean up custom easyblock for Paraver, only support Paravar >= v4.7 --- easybuild/easyblocks/p/paraver.py | 90 +++++-------------------------- 1 file changed, 13 insertions(+), 77 deletions(-) diff --git a/easybuild/easyblocks/p/paraver.py b/easybuild/easyblocks/p/paraver.py index 4e4b9c6390..6c1f8c3971 100644 --- a/easybuild/easyblocks/p/paraver.py +++ b/easybuild/easyblocks/p/paraver.py @@ -34,46 +34,19 @@ from easybuild.tools import LooseVersion from easybuild.easyblocks.generic.configuremake import ConfigureMake -from easybuild.tools.build_log import EasyBuildError, print_msg -from easybuild.tools.filetools import change_dir +from easybuild.tools.build_log import EasyBuildError from easybuild.tools.modules import get_software_libdir, get_software_root class EB_Paraver(ConfigureMake): """Support for building/installing Paraver.""" - def run_all_steps(self, *args, **kwargs): - """ - Put configure/build/install options in place for the 3 different components of Paraver. - Each component lives in a separate subdirectory. - """ - if LooseVersion(self.version) < LooseVersion('4.7'): - - # leverage support for iterated installation for older Paraver versions - self.components = ['ptools_common_files', 'paraver-kernel', 'wxparaver'] - self.current_component = 0 # index in list above - - # initiate configopts with empty list - self.cfg['configopts'] = [] - - # first phase: build and install ptools - # no specific configure options for the ptools component (but configopts list element must be there) - self.cfg.update('configopts', ['']) - - # second phase: build and install paraver-kernel - self.cfg.update('configopts', ["--with-boost=%(boost)s --with-ptools-common-files=%(installdir)s"]) + def __init__(self, *args, **kwargs): + """Constructor for custom easyblock for Paraver.""" + super(EB_Paraver, self).__init__(*args, **kwargs) - # third phase: build and install wxparaver - wxparaver_configopts = ' '.join([ - '--with-boost=%(boost)s', - '--with-wxpropgrid=%(wxpropgrid)s', - '--with-paraver=%(installdir)s', - ]) - self.cfg.update('configopts', [wxparaver_configopts]) - else: - self.components, self.current_component = None, None - - return super(EB_Paraver, self).run_all_steps(*args, **kwargs) + if LooseVersion(self.version) < LooseVersion('4.7'): + raise EasyBuildError("Custom easyblock for Paraver only supports Paraver versions >= 4.7") def configure_step(self): """Custom configuration procedure for Paraver: template configuration options before using them.""" @@ -88,8 +61,6 @@ def configure_step(self): wxwidgets = get_software_root('wxWidgets') if wxwidgets: wx_config = os.path.join(wxwidgets, 'bin', 'wx-config') - elif LooseVersion(self.version) >= LooseVersion('4.7'): - raise EasyBuildError("wxWidgets is not available as a dependency") # determine value to pass to --with-wxpropgrid (library name) wxpropgrid = None @@ -107,53 +78,18 @@ def configure_step(self): else: self.log.info("wxPropertyGrid not included as dependency, assuming that's OK...") - if LooseVersion(self.version) < LooseVersion('4.7'): - component = self.components[self.current_component] - change_dir(component) - self.log.info("Customized start directory for component %s: %s", component, os.getcwd()) - - print_msg("starting with component %s" % component, log=self.log) - - self.cfg['configopts'] = self.cfg['configopts'] % { - 'boost': boost_root, - 'installdir': self.installdir, - 'wxpropgrid': wxpropgrid, - } - else: - self.cfg.update('configopts', '--with-boost=%s' % boost_root) - self.cfg.update('configopts', '--with-paraver=%s' % self.installdir) - self.cfg.update('configopts', '--with-wx-config=%s' % wx_config) - # wxPropertyGrid is not required with recent wxWidgets - if wxpropgrid: - self.cfg.update('configopts', '--with-wxpropgrid=%s' % wxpropgrid) + self.cfg.update('configopts', '--with-boost=%s' % boost_root) + self.cfg.update('configopts', '--with-paraver=%s' % self.installdir) + self.cfg.update('configopts', '--with-wx-config=%s' % wx_config) + # wxPropertyGrid is not required with recent wxWidgets + if wxpropgrid: + self.cfg.update('configopts', '--with-wxpropgrid=%s' % wxpropgrid) super(EB_Paraver, self).configure_step() def build_step(self): """Custom build procedure for Paraver: skip 'make' for recent versions.""" - - if LooseVersion(self.version) < LooseVersion('4.7'): - super(EB_Paraver, self).build_step() - - def install_step(self): - """Custom installation procedure for Paraver: put symlink in place for library subdirectory.""" - super(EB_Paraver, self).install_step() - - if LooseVersion(self.version) < LooseVersion('4.7'): - # link lib to lib64 if needed - # this is a workaround for an issue with libtool which sometimes creates lib64 rather than lib - if self.components[self.current_component] == self.components[0]: - lib64dir = os.path.join(self.installdir, 'lib64') - libdir = os.path.join(self.installdir, 'lib') - - if os.path.exists(lib64dir): - try: - self.log.debug("Symlinking %s to %s", lib64dir, libdir) - os.symlink(lib64dir, libdir) - except OSError as err: - raise EasyBuildError("Symlinking lib64 to lib failed: %s" % err) - - self.current_component += 1 + pass def sanity_check_step(self): """Custom sanity check for Paraver.""" From b875ce7e9f8f0cdba5360a48b0e73139fa29d326 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Dec 2024 15:52:00 +0100 Subject: [PATCH 59/87] fix docstring for `build_step` method in custom easyblock for Paraver Co-authored-by: Simon Branford <4967+branfosj@users.noreply.github.com> --- easybuild/easyblocks/p/paraver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/p/paraver.py b/easybuild/easyblocks/p/paraver.py index 6c1f8c3971..a7f0a453a4 100644 --- a/easybuild/easyblocks/p/paraver.py +++ b/easybuild/easyblocks/p/paraver.py @@ -88,7 +88,7 @@ def configure_step(self): super(EB_Paraver, self).configure_step() def build_step(self): - """Custom build procedure for Paraver: skip 'make' for recent versions.""" + """No build ('make') required for recent versions.""" pass def sanity_check_step(self): From ee1ee1473d45b16e2f63d97f9864ac0f5db017e0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Dec 2024 15:53:10 +0100 Subject: [PATCH 60/87] add back raising of an error if wxWidgets is not a dependency for Paraver --- easybuild/easyblocks/p/paraver.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easybuild/easyblocks/p/paraver.py b/easybuild/easyblocks/p/paraver.py index a7f0a453a4..83631eb1d1 100644 --- a/easybuild/easyblocks/p/paraver.py +++ b/easybuild/easyblocks/p/paraver.py @@ -61,6 +61,8 @@ def configure_step(self): wxwidgets = get_software_root('wxWidgets') if wxwidgets: wx_config = os.path.join(wxwidgets, 'bin', 'wx-config') + else: + raise EasyBuildError("wxWidgets is not available as a dependency") # determine value to pass to --with-wxpropgrid (library name) wxpropgrid = None From f0254270237f4034b07b1cd12b24085914bf587a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Dec 2024 16:16:25 +0100 Subject: [PATCH 61/87] take into account that custom easyblock for Paraver requires v4.7+ in easyblocks tests --- test/easyblocks/init_easyblocks.py | 3 +++ test/easyblocks/module.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/test/easyblocks/init_easyblocks.py b/test/easyblocks/init_easyblocks.py index 68331218bd..0514ef8f34 100644 --- a/test/easyblocks/init_easyblocks.py +++ b/test/easyblocks/init_easyblocks.py @@ -237,6 +237,9 @@ def innertest(self): elif easyblock_fn == 'openssl_wrapper.py': # easyblock to create OpenSSL wrapper expects an OpenSSL version innertest = make_inner_test(easyblock, version='1.1') + elif easyblock_fn == 'paraver.py': + # custom easyblock for Paraver requires version >= 4.7 + innertest = make_inner_test(easyblock, version='4.8') elif easyblock_fn == 'torchvision.py': # torchvision easyblock requires that PyTorch is listed as dependency innertest = make_inner_test(easyblock, name='torchvision', deps=[('PyTorch', '1.12.1')]) diff --git a/test/easyblocks/module.py b/test/easyblocks/module.py index 7b9c6d612f..173581f7de 100644 --- a/test/easyblocks/module.py +++ b/test/easyblocks/module.py @@ -464,6 +464,9 @@ def innertest(self): elif eb_fn == 'openssl_wrapper.py': # easyblock to create OpenSSL wrapper expects an OpenSSL version innertest = make_inner_test(easyblock, name='OpenSSL-wrapper', version='1.1') + elif eb_fn == 'paraver.py': + # custom easyblock for Paraver requires version >= 4.7 + innertest = make_inner_test(easyblock, name='Paraver', version='4.8') elif eb_fn == 'torchvision.py': # torchvision easyblock requires that PyTorch is listed as dependency extra_txt = "dependencies = [('PyTorch', '1.12.1')]" From c0b5b5b4c7e697b7f813b47b22a3da4bb9042b7e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 18 Dec 2024 16:56:37 +0100 Subject: [PATCH 62/87] bump version to 5.0.0beta1 --- easybuild/easyblocks/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/__init__.py b/easybuild/easyblocks/__init__.py index dbd03779f7..5eec3996b5 100644 --- a/easybuild/easyblocks/__init__.py +++ b/easybuild/easyblocks/__init__.py @@ -42,7 +42,7 @@ # recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like # UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0' # This causes problems further up the dependency chain... -VERSION = '5.0.0.dev0' +VERSION = '5.0.0beta1' UNKNOWN = 'UNKNOWN' From 8b6fda4df38d93f33265f57f73a3bd608ef5955f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 19 Dec 2024 08:41:32 +0100 Subject: [PATCH 63/87] be more careful when checking install_target value in PythonPackage easyblock, to avoid trouble with unresolved template values like '%(parallel)s' --- easybuild/easyblocks/generic/pythonpackage.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index 4b76d7e14b..921b6e3ff8 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -546,12 +546,13 @@ def determine_install_command(self): else: self.use_setup_py = True self.install_cmd = SETUP_PY_INSTALL_CMD + install_target = self.cfg.get_ref('install_target') - if self.cfg['install_target'] == EASY_INSTALL_TARGET: + if install_target == EASY_INSTALL_TARGET: self.install_cmd += " %(loc)s" self.py_installopts.append('--no-deps') if self.cfg.get('zipped_egg', False): - if self.cfg['install_target'] == EASY_INSTALL_TARGET: + if install_target == EASY_INSTALL_TARGET: self.py_installopts.append('--zip-ok') else: raise EasyBuildError("Installing zipped eggs requires using easy_install or pip") From 88d0a81f6a059a401f7d5a0a7eb619eff1a83787 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 19 Dec 2024 08:42:11 +0100 Subject: [PATCH 64/87] be more careful with determining value of 'sources' and 'source_urls' in constructor of Bundle easyblock, to avoid trouble with unresolved template values like '%(builddir)s' --- easybuild/easyblocks/generic/bundle.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 437cd707d4..c15c0bb44d 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -164,24 +164,26 @@ def __init__(self, *args, **kwargs): comp_cfg.enable_templating = True # 'sources' is strictly required - if comp_cfg['sources']: + comp_sources = comp_cfg.get_ref('sources') + if comp_sources: # If per-component source URLs are provided, attach them directly to the relevant sources - if comp_cfg['source_urls']: - for source in comp_cfg['sources']: + comp_source_urls = comp_cfg.get_ref('source_urls') + if comp_source_urls: + for source in comp_sources: if isinstance(source, str): - self.cfg.update('sources', [{'filename': source, 'source_urls': comp_cfg['source_urls']}]) + self.cfg.update('sources', [{'filename': source, 'source_urls': comp_source_urls[:]}]) elif isinstance(source, dict): # Update source_urls in the 'source' dict to use the one for the components # (if it doesn't already exist) if 'source_urls' not in source: - source['source_urls'] = comp_cfg['source_urls'] + source['source_urls'] = comp_source_urls[:] self.cfg.update('sources', [source]) else: raise EasyBuildError("Source %s for component %s is neither a string nor a dict, cannot " "process it.", source, comp_cfg['name']) else: # add component sources to list of sources - self.cfg.update('sources', comp_cfg['sources']) + self.cfg.update('sources', comp_sources) else: raise EasyBuildError("No sources specification for component %s v%s", comp_name, comp_version) From 1973cbb0fe8c7f94d6e131e66e3808cb93813ec9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 19 Dec 2024 09:43:16 +0100 Subject: [PATCH 65/87] be even more careful when determining easyconfig parameter values in Bundle constructor, to avoid trouble with unresolved templates --- easybuild/easyblocks/generic/bundle.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index c15c0bb44d..1c41ab9f82 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -79,9 +79,9 @@ def __init__(self, *args, **kwargs): check_for_sources = getattr(self, 'check_for_sources', True) # list of sources for bundle itself *must* be empty (unless overridden by subclass) if check_for_sources: - if self.cfg['sources']: + if self.cfg.get_ref('sources'): raise EasyBuildError("List of sources for bundle itself must be empty, found %s", self.cfg['sources']) - if self.cfg['patches']: + if self.cfg.get_ref('patches'): raise EasyBuildError("List of patches for bundle itself must be empty, found %s", self.cfg['patches']) # copy EasyConfig instance before we make changes to it @@ -187,29 +187,31 @@ def __init__(self, *args, **kwargs): else: raise EasyBuildError("No sources specification for component %s v%s", comp_name, comp_version) - if comp_cfg['checksums']: - src_cnt = len(comp_cfg['sources']) + comp_checksums = comp_cfg.get_ref('checksums') + if comp_checksums: + src_cnt = len(comp_sources) # add per-component checksums for sources to list of checksums - self.cfg.update('checksums', comp_cfg['checksums'][:src_cnt]) + self.cfg.update('checksums', comp_checksums[:src_cnt]) # add per-component checksums for patches to list of checksums for patches - checksums_patches.extend(comp_cfg['checksums'][src_cnt:]) + checksums_patches.extend(comp_checksums[src_cnt:]) - if comp_cfg['patches']: - self.cfg.update('patches', comp_cfg['patches']) + comp_patches = comp_cfg.get_ref('patches') + if comp_patches: + self.cfg.update('patches', comp_patches) self.comp_cfgs.append(comp_cfg) self.cfg.update('checksums', checksums_patches) - self.cfg.enable_templating = True - # restore general sanity checks if using component-specific sanity checks if self.cfg['sanity_check_components'] or self.cfg['sanity_check_all_components']: self.cfg['sanity_check_paths'] = self.backup_sanity_paths self.cfg['sanity_check_commands'] = self.backup_sanity_cmds + self.cfg.enable_templating = True + def check_checksums(self): """ Check whether a SHA256 checksum is available for all sources & patches (incl. extensions). From 46e847c8d0c2cd8b0fbf80024d76e42114557371 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 19 Dec 2024 10:33:22 +0100 Subject: [PATCH 66/87] temporarily disable expectation that all template value can be resolved in Bundle constructor --- easybuild/easyblocks/generic/bundle.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 1c41ab9f82..196b0e5f8b 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -160,14 +160,18 @@ def __init__(self, *args, **kwargs): for key in comp_specs: comp_cfg[key] = comp_specs[key] - # enable resolving of templates for component-specific EasyConfig instance + # enable resolving of templates for component-specific EasyConfig instance, + # but don't require that all template values can be resolved at this point; + # this is important to ensure that template values like %(name)s and %(version)s + # are correctly resolved with the component name/version before values are copied over to self.cfg comp_cfg.enable_templating = True + comp_cfg.expect_resolved_template_values = False # 'sources' is strictly required - comp_sources = comp_cfg.get_ref('sources') + comp_sources = comp_cfg['sources'] if comp_sources: # If per-component source URLs are provided, attach them directly to the relevant sources - comp_source_urls = comp_cfg.get_ref('source_urls') + comp_source_urls = comp_cfg['source_urls'] if comp_source_urls: for source in comp_sources: if isinstance(source, str): @@ -187,7 +191,7 @@ def __init__(self, *args, **kwargs): else: raise EasyBuildError("No sources specification for component %s v%s", comp_name, comp_version) - comp_checksums = comp_cfg.get_ref('checksums') + comp_checksums = comp_cfg['checksums'] if comp_checksums: src_cnt = len(comp_sources) @@ -197,10 +201,12 @@ def __init__(self, *args, **kwargs): # add per-component checksums for patches to list of checksums for patches checksums_patches.extend(comp_checksums[src_cnt:]) - comp_patches = comp_cfg.get_ref('patches') + comp_patches = comp_cfg['patches'] if comp_patches: self.cfg.update('patches', comp_patches) + comp_cfg.expect_resolved_template_values = True + self.comp_cfgs.append(comp_cfg) self.cfg.update('checksums', checksums_patches) @@ -274,6 +280,7 @@ def install_step(self): comp.src = [] # find match entries in self.src for this component + comp.cfg.expect_resolved_template_values = False for source in comp.cfg['sources']: if isinstance(source, str): comp_src_fn = source @@ -297,6 +304,7 @@ def install_step(self): # location of first unpacked source is used to determine where to apply patch(es) comp.src[-1]['finalpath'] = comp.cfg['start_dir'] + comp.cfg.expect_resolved_template_values = True # check if sanity checks are enabled for the component if self.cfg['sanity_check_all_components'] or comp.cfg['name'] in self.cfg['sanity_check_components']: From 346ecb46ae30e331b0c645400ac27365a607867f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 19 Dec 2024 10:34:01 +0100 Subject: [PATCH 67/87] be more careful when getting value for 'buildcmd' custom easyconfig parameter in PythonPackage easyblock, to avoid error due to '%(python)s' template not being resolvable --- easybuild/easyblocks/generic/pythonpackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index 921b6e3ff8..855a0c533e 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -818,7 +818,7 @@ def configure_step(self): def build_step(self): """Build Python package using setup.py""" - build_cmd = self.cfg['buildcmd'] + build_cmd = self.cfg.get_ref('buildcmd') if self.use_setup_py: if get_software_root('CMake'): From ea31440918e1493be54fea6318112f431662997d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 19 Dec 2024 17:33:53 +0100 Subject: [PATCH 68/87] inject custom '%(python)s' template value before getting value of 'buildcmd' custom easyconfig parameter in PythonPackage easyblock --- easybuild/easyblocks/generic/pythonpackage.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index 855a0c533e..875158df6d 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -818,7 +818,11 @@ def configure_step(self): def build_step(self): """Build Python package using setup.py""" - build_cmd = self.cfg.get_ref('buildcmd') + + # inject extra '%(python)s' template value before getting value of 'buildcmd' custom easyconfig parameter + self.cfg.template_values['python'] = self.python_cmd + build_cmd = self.cfg['buildcmd'] + if self.use_setup_py: if get_software_root('CMake'): @@ -829,10 +833,9 @@ def build_step(self): if not build_cmd: build_cmd = 'build' # Default value for setup.py - build_cmd = '%(python)s setup.py ' + build_cmd + build_cmd = self.python_cmd + ' setup.py ' + build_cmd if build_cmd: - build_cmd = build_cmd % {'python': self.python_cmd} cmd = ' '.join([self.cfg['prebuildopts'], build_cmd, self.cfg['buildopts']]) res = run_shell_cmd(cmd) From 51ce29903ddeab2c50d3b94449e390450578d957 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Thu, 19 Dec 2024 19:45:45 +0100 Subject: [PATCH 69/87] replace concatenation with f-string in PythonPackage easyblock --- easybuild/easyblocks/generic/pythonpackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index 875158df6d..e9ea708309 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -833,7 +833,7 @@ def build_step(self): if not build_cmd: build_cmd = 'build' # Default value for setup.py - build_cmd = self.python_cmd + ' setup.py ' + build_cmd + build_cmd = f"{self.python_cmd} setup.py {build_cmd}" if build_cmd: cmd = ' '.join([self.cfg['prebuildopts'], build_cmd, self.cfg['buildopts']]) From 36fc898c556e89a388a9e45c940ad4693552bcb6 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Fri, 20 Dec 2024 13:04:12 +0000 Subject: [PATCH 70/87] remove use of deprecated `extract_errors_from_log` in `configuremake` --- easybuild/easyblocks/generic/configuremake.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyblocks/generic/configuremake.py b/easybuild/easyblocks/generic/configuremake.py index adbc12d385..af62797129 100644 --- a/easybuild/easyblocks/generic/configuremake.py +++ b/easybuild/easyblocks/generic/configuremake.py @@ -49,7 +49,7 @@ from easybuild.tools.config import source_paths, build_option, ERROR, IGNORE, WARN from easybuild.tools.filetools import CHECKSUM_TYPE_SHA256, adjust_permissions, compute_checksum, download_file from easybuild.tools.filetools import read_file, remove_file -from easybuild.tools.run import extract_errors_from_log, run_shell_cmd +from easybuild.tools.run import run_shell_cmd from easybuild.tools.utilities import nub # string that indicates that a configure script was generated by Autoconf @@ -338,8 +338,8 @@ def configure_step(self, cmd_prefix=''): raise EasyBuildError('Invalid value for `unrecognized_configure_options`: %s. Must be one of: ', action, ', '.join(valid_actions)) if action != IGNORE: - unrecognized_options_str = 'configure: WARNING: unrecognized options:' - unrecognized_options = extract_errors_from_log(res.output, unrecognized_options_str)[1] + unrecognized_options_str = "^configure: WARNING: unrecognized options:" + unrecognized_options = re.findall(rf"{unrecognized_options_str}.*", res.output, flags=re.I | re.M) # Keep only unique options (remove the warning string and strip whitespace) unrecognized_options = nub(x.split(unrecognized_options_str)[-1].strip() for x in unrecognized_options) if unrecognized_options: From f875f97de0ad3da2228589572384ff680afe81b9 Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Fri, 20 Dec 2024 13:25:41 +0000 Subject: [PATCH 71/87] removing unneeded change --- easybuild/easyblocks/generic/configuremake.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/generic/configuremake.py b/easybuild/easyblocks/generic/configuremake.py index af62797129..c20563228b 100644 --- a/easybuild/easyblocks/generic/configuremake.py +++ b/easybuild/easyblocks/generic/configuremake.py @@ -338,8 +338,8 @@ def configure_step(self, cmd_prefix=''): raise EasyBuildError('Invalid value for `unrecognized_configure_options`: %s. Must be one of: ', action, ', '.join(valid_actions)) if action != IGNORE: - unrecognized_options_str = "^configure: WARNING: unrecognized options:" - unrecognized_options = re.findall(rf"{unrecognized_options_str}.*", res.output, flags=re.I | re.M) + unrecognized_options_str = 'configure: WARNING: unrecognized options:' + unrecognized_options = re.findall(rf"^{unrecognized_options_str}.*", res.output, flags=re.I | re.M) # Keep only unique options (remove the warning string and strip whitespace) unrecognized_options = nub(x.split(unrecognized_options_str)[-1].strip() for x in unrecognized_options) if unrecognized_options: From 329aa6d46122a89284b2556bc0031eefd018675d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 26 Dec 2024 19:37:22 +0100 Subject: [PATCH 72/87] use str rather than string_type in Bundle easyblock --- easybuild/easyblocks/generic/bundle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 2d35acf916..4e1d9e9d3f 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -356,7 +356,7 @@ def make_module_req_guess(self): # for make_module_req_guess() which should then be fixed in the components EasyBlock. try: for key, value in sorted(reqs.items()): - if isinstance(value, string_type): + if isinstance(value, str): value = [value] final_reqs.setdefault(key, []) final_reqs[key].extend(value) From 58162cdaeae453857d34dacd57be5284adac1b85 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Mon, 30 Dec 2024 14:02:47 +0000 Subject: [PATCH 73/87] imports without the single folder letter --- easybuild/easyblocks/i/icc.py | 2 +- easybuild/easyblocks/i/intel_compilers.py | 2 +- easybuild/easyblocks/m/mamba.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyblocks/i/icc.py b/easybuild/easyblocks/i/icc.py index 0debf99be8..d9d31b75cb 100644 --- a/easybuild/easyblocks/i/icc.py +++ b/easybuild/easyblocks/i/icc.py @@ -40,7 +40,7 @@ from easybuild.easyblocks.generic.intelbase import IntelBase, ACTIVATION_NAME_2012, COMP_ALL from easybuild.easyblocks.generic.intelbase import LICENSE_FILE_NAME_2012 -from easybuild.easyblocks.t.tbb import get_tbb_gccprefix +from easybuild.easyblocks.tbb import get_tbb_gccprefix from easybuild.tools.run import run_shell_cmd from easybuild.tools.systemtools import get_shared_lib_ext diff --git a/easybuild/easyblocks/i/intel_compilers.py b/easybuild/easyblocks/i/intel_compilers.py index cfc50d6080..5b9c2dc3a6 100644 --- a/easybuild/easyblocks/i/intel_compilers.py +++ b/easybuild/easyblocks/i/intel_compilers.py @@ -31,7 +31,7 @@ from easybuild.tools import LooseVersion from easybuild.easyblocks.generic.intelbase import IntelBase -from easybuild.easyblocks.t.tbb import get_tbb_gccprefix +from easybuild.easyblocks.tbb import get_tbb_gccprefix from easybuild.tools.build_log import EasyBuildError, print_msg from easybuild.tools.run import run_shell_cmd diff --git a/easybuild/easyblocks/m/mamba.py b/easybuild/easyblocks/m/mamba.py index 232011e137..99947ffe4a 100644 --- a/easybuild/easyblocks/m/mamba.py +++ b/easybuild/easyblocks/m/mamba.py @@ -31,7 +31,7 @@ import os -from easybuild.easyblocks.a.anaconda import EB_Anaconda +from easybuild.easyblocks.anaconda import EB_Anaconda class EB_Mamba(EB_Anaconda): From 2c4383c82a2e7ff908c9d53567a68308bfd476ef Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Tue, 31 Dec 2024 15:43:22 +0000 Subject: [PATCH 74/87] remove Python 2 fallback in `openssl_wrapper` --- easybuild/easyblocks/o/openssl_wrapper.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/easybuild/easyblocks/o/openssl_wrapper.py b/easybuild/easyblocks/o/openssl_wrapper.py index f4e7e6dbf7..a7bf49e701 100644 --- a/easybuild/easyblocks/o/openssl_wrapper.py +++ b/easybuild/easyblocks/o/openssl_wrapper.py @@ -29,12 +29,7 @@ """ import os import re - -try: - from urllib.parse import urlparse -except ImportError: - # fallback for Python 2.7, should be removed for EasyBuild >= 5.0 - from urlparse import urlparse +from urllib.parse import urlparse from easybuild.tools import LooseVersion From 98fe22b85d68b923729aee6b0183c21b02c55d6e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 2 Jan 2025 11:34:03 +0100 Subject: [PATCH 75/87] update copyright lines for 2025 --- easybuild/__init__.py | 2 +- easybuild/easyblocks/__init__.py | 2 +- easybuild/easyblocks/a/abaqus.py | 2 +- easybuild/easyblocks/a/acml.py | 2 +- easybuild/easyblocks/a/adf.py | 2 +- easybuild/easyblocks/a/advisor.py | 2 +- easybuild/easyblocks/a/aedt.py | 2 +- easybuild/easyblocks/a/aladin.py | 2 +- easybuild/easyblocks/a/allinea.py | 2 +- easybuild/easyblocks/a/amber.py | 4 ++-- easybuild/easyblocks/a/anaconda.py | 2 +- easybuild/easyblocks/a/ansys.py | 2 +- easybuild/easyblocks/a/ant.py | 2 +- easybuild/easyblocks/a/aocc.py | 2 +- easybuild/easyblocks/a/aomp.py | 2 +- easybuild/easyblocks/a/arb.py | 2 +- easybuild/easyblocks/a/armadillo.py | 2 +- easybuild/easyblocks/a/atlas.py | 2 +- easybuild/easyblocks/b/bamtools.py | 2 +- easybuild/easyblocks/b/bazel.py | 2 +- easybuild/easyblocks/b/berkeleygw.py | 2 +- easybuild/easyblocks/b/binutils.py | 2 +- easybuild/easyblocks/b/bioconductor.py | 2 +- easybuild/easyblocks/b/bisearch.py | 2 +- easybuild/easyblocks/b/blacs.py | 2 +- easybuild/easyblocks/b/blat.py | 2 +- easybuild/easyblocks/b/blender.py | 2 +- easybuild/easyblocks/b/boost.py | 2 +- easybuild/easyblocks/b/bowtie.py | 2 +- easybuild/easyblocks/b/bowtie2.py | 2 +- easybuild/easyblocks/b/bwa.py | 2 +- easybuild/easyblocks/b/bwise.py | 2 +- easybuild/easyblocks/b/bzip2.py | 2 +- easybuild/easyblocks/c/cblas.py | 2 +- easybuild/easyblocks/c/cfdemcoupling.py | 2 +- easybuild/easyblocks/c/cgal.py | 2 +- easybuild/easyblocks/c/chapel.py | 2 +- easybuild/easyblocks/c/charmm.py | 2 +- easybuild/easyblocks/c/clang.py | 4 ++-- easybuild/easyblocks/c/clang_aomp.py | 2 +- easybuild/easyblocks/c/cmake.py | 2 +- easybuild/easyblocks/c/code_server.py | 2 +- easybuild/easyblocks/c/comsol.py | 2 +- easybuild/easyblocks/c/cp2k.py | 2 +- easybuild/easyblocks/c/cplex.py | 2 +- easybuild/easyblocks/c/cppcheck.py | 2 +- easybuild/easyblocks/c/crispr_dav.py | 2 +- easybuild/easyblocks/c/cryptography.py | 2 +- easybuild/easyblocks/c/cuda.py | 2 +- easybuild/easyblocks/c/cudacompat.py | 2 +- easybuild/easyblocks/c/cudnn.py | 2 +- easybuild/easyblocks/c/cufflinks.py | 2 +- easybuild/easyblocks/d/db.py | 2 +- easybuild/easyblocks/d/dl_poly_classic.py | 2 +- easybuild/easyblocks/d/dm_reverb.py | 2 +- easybuild/easyblocks/d/dolfin.py | 2 +- easybuild/easyblocks/d/doris.py | 2 +- easybuild/easyblocks/d/doxygen.py | 2 +- easybuild/easyblocks/d/dualsphysics.py | 2 +- easybuild/easyblocks/e/easybuildmeta.py | 2 +- easybuild/easyblocks/e/egglib.py | 2 +- easybuild/easyblocks/e/eigen.py | 2 +- easybuild/easyblocks/e/elpa.py | 4 ++-- easybuild/easyblocks/e/elsi.py | 2 +- easybuild/easyblocks/e/epd.py | 2 +- easybuild/easyblocks/e/esmf.py | 2 +- easybuild/easyblocks/e/espresso.py | 2 +- easybuild/easyblocks/e/extrae.py | 2 +- easybuild/easyblocks/f/faststructure.py | 2 +- easybuild/easyblocks/f/fdtd_solutions.py | 2 +- easybuild/easyblocks/f/ferret.py | 2 +- easybuild/easyblocks/f/fftw.py | 2 +- easybuild/easyblocks/f/fftwmpi.py | 2 +- easybuild/easyblocks/f/flex.py | 2 +- easybuild/easyblocks/f/flexiblas.py | 2 +- easybuild/easyblocks/f/flook.py | 2 +- easybuild/easyblocks/f/fluent.py | 2 +- easybuild/easyblocks/f/foldx.py | 2 +- easybuild/easyblocks/f/freefem.py | 2 +- easybuild/easyblocks/f/freesurfer.py | 2 +- easybuild/easyblocks/f/freetype.py | 2 +- easybuild/easyblocks/f/fsl.py | 2 +- easybuild/easyblocks/g/g2clib.py | 2 +- easybuild/easyblocks/g/g2lib.py | 2 +- easybuild/easyblocks/g/gamess_us.py | 2 +- easybuild/easyblocks/g/gate.py | 2 +- easybuild/easyblocks/g/gcc.py | 2 +- easybuild/easyblocks/g/gctf.py | 2 +- easybuild/easyblocks/g/geant4.py | 2 +- easybuild/easyblocks/g/ghc.py | 2 +- easybuild/easyblocks/g/go.py | 2 +- easybuild/easyblocks/g/gromacs.py | 2 +- easybuild/easyblocks/g/gurobi.py | 2 +- easybuild/easyblocks/generic/__init__.py | 2 +- easybuild/easyblocks/generic/binariestarball.py | 2 +- easybuild/easyblocks/generic/binary.py | 2 +- easybuild/easyblocks/generic/buildenv.py | 2 +- easybuild/easyblocks/generic/bundle.py | 2 +- easybuild/easyblocks/generic/cargo.py | 2 +- easybuild/easyblocks/generic/cargopythonbundle.py | 2 +- easybuild/easyblocks/generic/cargopythonpackage.py | 2 +- easybuild/easyblocks/generic/cmakemake.py | 2 +- easybuild/easyblocks/generic/cmakemakecp.py | 2 +- easybuild/easyblocks/generic/cmakeninja.py | 2 +- easybuild/easyblocks/generic/cmakepythonpackage.py | 2 +- easybuild/easyblocks/generic/cmdcp.py | 2 +- easybuild/easyblocks/generic/conda.py | 2 +- easybuild/easyblocks/generic/configuremake.py | 2 +- easybuild/easyblocks/generic/configuremakepythonpackage.py | 2 +- easybuild/easyblocks/generic/craytoolchain.py | 2 +- easybuild/easyblocks/generic/fortranpythonpackage.py | 2 +- easybuild/easyblocks/generic/gopackage.py | 2 +- easybuild/easyblocks/generic/intelbase.py | 2 +- easybuild/easyblocks/generic/jar.py | 2 +- easybuild/easyblocks/generic/juliabundle.py | 2 +- easybuild/easyblocks/generic/juliapackage.py | 2 +- easybuild/easyblocks/generic/makecp.py | 2 +- easybuild/easyblocks/generic/mesonninja.py | 2 +- easybuild/easyblocks/generic/modulerc.py | 2 +- easybuild/easyblocks/generic/ocamlpackage.py | 2 +- easybuild/easyblocks/generic/octavepackage.py | 2 +- easybuild/easyblocks/generic/packedbinary.py | 2 +- easybuild/easyblocks/generic/perlbundle.py | 2 +- easybuild/easyblocks/generic/perlmodule.py | 2 +- easybuild/easyblocks/generic/pythonbundle.py | 2 +- easybuild/easyblocks/generic/pythonpackage.py | 2 +- easybuild/easyblocks/generic/rpackage.py | 2 +- easybuild/easyblocks/generic/rpm.py | 2 +- easybuild/easyblocks/generic/rubygem.py | 2 +- easybuild/easyblocks/generic/scons.py | 2 +- easybuild/easyblocks/generic/systemcompiler.py | 2 +- easybuild/easyblocks/generic/systemmpi.py | 2 +- easybuild/easyblocks/generic/tarball.py | 2 +- easybuild/easyblocks/generic/toolchain.py | 2 +- .../easyblocks/generic/versionindependentpythonpackage.py | 2 +- easybuild/easyblocks/generic/vscpythonpackage.py | 2 +- easybuild/easyblocks/generic/waf.py | 2 +- easybuild/easyblocks/h/hadoop.py | 2 +- easybuild/easyblocks/h/hdf5.py | 2 +- easybuild/easyblocks/h/healpix.py | 2 +- easybuild/easyblocks/h/hpcc.py | 2 +- easybuild/easyblocks/h/hpcg.py | 2 +- easybuild/easyblocks/h/hpl.py | 2 +- easybuild/easyblocks/h/hypre.py | 2 +- easybuild/easyblocks/i/icc.py | 2 +- easybuild/easyblocks/i/iccifort.py | 2 +- easybuild/easyblocks/i/ifort.py | 2 +- easybuild/easyblocks/i/imkl.py | 2 +- easybuild/easyblocks/i/imkl_fftw.py | 2 +- easybuild/easyblocks/i/imod.py | 2 +- easybuild/easyblocks/i/impi.py | 2 +- easybuild/easyblocks/i/inspector.py | 2 +- easybuild/easyblocks/i/intel_compilers.py | 2 +- easybuild/easyblocks/i/ipp.py | 2 +- easybuild/easyblocks/i/ironpython.py | 2 +- easybuild/easyblocks/i/itac.py | 2 +- easybuild/easyblocks/j/java.py | 2 +- easybuild/easyblocks/j/jaxlib.py | 2 +- easybuild/easyblocks/l/lammps.py | 2 +- easybuild/easyblocks/l/lapack.py | 2 +- easybuild/easyblocks/l/libdrm.py | 2 +- easybuild/easyblocks/l/libint.py | 2 +- easybuild/easyblocks/l/libqglviewer.py | 2 +- easybuild/easyblocks/l/libsmm.py | 2 +- easybuild/easyblocks/l/libxml2.py | 2 +- easybuild/easyblocks/l/llvm.py | 2 +- easybuild/easyblocks/l/lua.py | 2 +- easybuild/easyblocks/m/mamba.py | 2 +- easybuild/easyblocks/m/maple.py | 2 +- easybuild/easyblocks/m/mathematica.py | 2 +- easybuild/easyblocks/m/matlab.py | 2 +- easybuild/easyblocks/m/mcr.py | 2 +- easybuild/easyblocks/m/mesa.py | 2 +- easybuild/easyblocks/m/metagenome_atlas.py | 2 +- easybuild/easyblocks/m/metavelvet.py | 2 +- easybuild/easyblocks/m/metis.py | 2 +- easybuild/easyblocks/m/modeller.py | 2 +- easybuild/easyblocks/m/molpro.py | 2 +- easybuild/easyblocks/m/mono.py | 2 +- easybuild/easyblocks/m/mothur.py | 2 +- easybuild/easyblocks/m/motioncor2.py | 2 +- easybuild/easyblocks/m/mpich.py | 2 +- easybuild/easyblocks/m/mrbayes.py | 2 +- easybuild/easyblocks/m/mrtrix.py | 2 +- easybuild/easyblocks/m/msm.py | 2 +- easybuild/easyblocks/m/mtl4.py | 2 +- easybuild/easyblocks/m/mummer.py | 2 +- easybuild/easyblocks/m/mumps.py | 2 +- easybuild/easyblocks/m/mutil.py | 2 +- easybuild/easyblocks/m/mvapich2.py | 2 +- easybuild/easyblocks/m/mxnet.py | 2 +- easybuild/easyblocks/m/mymedialite.py | 2 +- easybuild/easyblocks/n/namd.py | 2 +- easybuild/easyblocks/n/nccl.py | 2 +- easybuild/easyblocks/n/ncl.py | 2 +- easybuild/easyblocks/n/ncurses.py | 2 +- easybuild/easyblocks/n/nemo.py | 2 +- easybuild/easyblocks/n/netcdf.py | 2 +- easybuild/easyblocks/n/netcdf4_python.py | 2 +- easybuild/easyblocks/n/netcdf_fortran.py | 2 +- easybuild/easyblocks/n/neuron.py | 2 +- easybuild/easyblocks/n/nim.py | 2 +- easybuild/easyblocks/n/nose.py | 2 +- easybuild/easyblocks/n/numexpr.py | 2 +- easybuild/easyblocks/n/numpy.py | 2 +- easybuild/easyblocks/n/nvhpc.py | 4 ++-- easybuild/easyblocks/n/nwchem.py | 2 +- easybuild/easyblocks/o/ocaml.py | 2 +- easybuild/easyblocks/o/octave.py | 2 +- easybuild/easyblocks/o/openbabel.py | 2 +- easybuild/easyblocks/o/opencv.py | 2 +- easybuild/easyblocks/o/openfoam.py | 2 +- easybuild/easyblocks/o/openifs.py | 2 +- easybuild/easyblocks/o/openmpi.py | 2 +- easybuild/easyblocks/o/openssl.py | 2 +- easybuild/easyblocks/o/openssl_wrapper.py | 2 +- easybuild/easyblocks/o/optislang.py | 2 +- easybuild/easyblocks/o/orca.py | 2 +- easybuild/easyblocks/p/palm.py | 2 +- easybuild/easyblocks/p/paraver.py | 2 +- easybuild/easyblocks/p/parmetis.py | 2 +- easybuild/easyblocks/p/pasha.py | 2 +- easybuild/easyblocks/p/pbdmpi.py | 2 +- easybuild/easyblocks/p/pbdslap.py | 2 +- easybuild/easyblocks/p/pdt.py | 2 +- easybuild/easyblocks/p/perl.py | 2 +- easybuild/easyblocks/p/petsc.py | 2 +- easybuild/easyblocks/p/pgi.py | 4 ++-- easybuild/easyblocks/p/picard.py | 2 +- easybuild/easyblocks/p/pplacer.py | 2 +- easybuild/easyblocks/p/primer3.py | 2 +- easybuild/easyblocks/p/psi.py | 2 +- easybuild/easyblocks/p/psmpi.py | 2 +- easybuild/easyblocks/p/pybind11.py | 2 +- easybuild/easyblocks/p/pyquante.py | 2 +- easybuild/easyblocks/p/python.py | 2 +- easybuild/easyblocks/p/python_meep.py | 2 +- easybuild/easyblocks/p/pytorch.py | 2 +- easybuild/easyblocks/p/pyzmq.py | 2 +- easybuild/easyblocks/q/qscintilla.py | 2 +- easybuild/easyblocks/q/qt.py | 2 +- easybuild/easyblocks/q/quantumespresso.py | 2 +- easybuild/easyblocks/r/__init__.py | 2 +- easybuild/easyblocks/r/r.py | 2 +- easybuild/easyblocks/r/repeatmasker.py | 2 +- easybuild/easyblocks/r/repeatmodeler.py | 2 +- easybuild/easyblocks/r/reticulate.py | 2 +- easybuild/easyblocks/r/rmpi.py | 2 +- easybuild/easyblocks/r/root.py | 2 +- easybuild/easyblocks/r/rosetta.py | 2 +- easybuild/easyblocks/r/rserve.py | 2 +- easybuild/easyblocks/r/ruby.py | 2 +- easybuild/easyblocks/r/rust.py | 2 +- easybuild/easyblocks/s/samcef.py | 2 +- easybuild/easyblocks/s/samtools.py | 2 +- easybuild/easyblocks/s/sas.py | 2 +- easybuild/easyblocks/s/scalapack.py | 2 +- easybuild/easyblocks/s/scalasca1.py | 2 +- easybuild/easyblocks/s/scipion.py | 2 +- easybuild/easyblocks/s/scipy.py | 2 +- easybuild/easyblocks/s/score_p.py | 2 +- easybuild/easyblocks/s/scotch.py | 2 +- easybuild/easyblocks/s/sepp.py | 2 +- easybuild/easyblocks/s/shrimp.py | 2 +- easybuild/easyblocks/s/siesta.py | 2 +- easybuild/easyblocks/s/slepc.py | 2 +- easybuild/easyblocks/s/snphylo.py | 2 +- easybuild/easyblocks/s/soapdenovo.py | 2 +- easybuild/easyblocks/s/star_ccm.py | 2 +- easybuild/easyblocks/s/stata.py | 2 +- easybuild/easyblocks/s/suitesparse.py | 2 +- easybuild/easyblocks/s/superlu.py | 2 +- easybuild/easyblocks/s/swig.py | 2 +- easybuild/easyblocks/s/sympy.py | 2 +- easybuild/easyblocks/t/tau.py | 2 +- easybuild/easyblocks/t/tbb.py | 2 +- easybuild/easyblocks/t/tensorflow.py | 2 +- easybuild/easyblocks/t/tensorflow_compression.py | 2 +- easybuild/easyblocks/t/tensorrt.py | 2 +- easybuild/easyblocks/t/tinker.py | 2 +- easybuild/easyblocks/t/tkinter.py | 2 +- easybuild/easyblocks/t/torchvision.py | 2 +- easybuild/easyblocks/t/tornado.py | 2 +- easybuild/easyblocks/t/totalview.py | 4 ++-- easybuild/easyblocks/t/trilinos.py | 2 +- easybuild/easyblocks/t/trinity.py | 2 +- easybuild/easyblocks/u/ucx_plugins.py | 2 +- easybuild/easyblocks/u/ufc.py | 2 +- easybuild/easyblocks/v/velvet.py | 2 +- easybuild/easyblocks/v/vep.py | 2 +- easybuild/easyblocks/v/vmd.py | 4 ++-- easybuild/easyblocks/v/vsc_tools.py | 2 +- easybuild/easyblocks/v/vtune.py | 2 +- easybuild/easyblocks/w/wien2k.py | 2 +- easybuild/easyblocks/w/wps.py | 2 +- easybuild/easyblocks/w/wrf.py | 2 +- easybuild/easyblocks/w/wrf_fire.py | 2 +- easybuild/easyblocks/w/wxpython.py | 2 +- easybuild/easyblocks/x/xalt.py | 2 +- easybuild/easyblocks/x/xcrysden.py | 2 +- easybuild/easyblocks/x/xmipp.py | 2 +- easybuild/easyblocks/x/xml.py | 2 +- setup.py | 2 +- test/__init__.py | 2 +- test/easyblocks/easyblock_specific.py | 2 +- test/easyblocks/general.py | 2 +- test/easyblocks/init_easyblocks.py | 2 +- test/easyblocks/module.py | 2 +- test/easyblocks/suite.py | 2 +- 309 files changed, 316 insertions(+), 316 deletions(-) diff --git a/easybuild/__init__.py b/easybuild/__init__.py index 8d496189c3..d0005a450d 100644 --- a/easybuild/__init__.py +++ b/easybuild/__init__.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/__init__.py b/easybuild/easyblocks/__init__.py index a18d8b8979..8fd2cd8d91 100644 --- a/easybuild/easyblocks/__init__.py +++ b/easybuild/easyblocks/__init__.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/abaqus.py b/easybuild/easyblocks/a/abaqus.py index 8bb0ec7280..3128755b2a 100644 --- a/easybuild/easyblocks/a/abaqus.py +++ b/easybuild/easyblocks/a/abaqus.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/acml.py b/easybuild/easyblocks/a/acml.py index 296c49003e..8c0dc9fbd0 100644 --- a/easybuild/easyblocks/a/acml.py +++ b/easybuild/easyblocks/a/acml.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/adf.py b/easybuild/easyblocks/a/adf.py index cc96cb86b4..9323a7a694 100644 --- a/easybuild/easyblocks/a/adf.py +++ b/easybuild/easyblocks/a/adf.py @@ -1,5 +1,5 @@ ## -# Copyright 2016-2024 Ghent University +# Copyright 2016-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/advisor.py b/easybuild/easyblocks/a/advisor.py index 2f24500b20..9f3a7e1ea0 100644 --- a/easybuild/easyblocks/a/advisor.py +++ b/easybuild/easyblocks/a/advisor.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/aedt.py b/easybuild/easyblocks/a/aedt.py index 53d04d506e..0d14cd1deb 100644 --- a/easybuild/easyblocks/a/aedt.py +++ b/easybuild/easyblocks/a/aedt.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/aladin.py b/easybuild/easyblocks/a/aladin.py index 79454792fe..b417dbb756 100644 --- a/easybuild/easyblocks/a/aladin.py +++ b/easybuild/easyblocks/a/aladin.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/allinea.py b/easybuild/easyblocks/a/allinea.py index 026b2f58d9..4ce3ecaf86 100644 --- a/easybuild/easyblocks/a/allinea.py +++ b/easybuild/easyblocks/a/allinea.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/amber.py b/easybuild/easyblocks/a/amber.py index a306211086..0c5d7265bc 100644 --- a/easybuild/easyblocks/a/amber.py +++ b/easybuild/easyblocks/a/amber.py @@ -1,6 +1,6 @@ ## -# Copyright 2009-2024 Ghent University -# Copyright 2015-2024 Stanford University +# Copyright 2009-2025 Ghent University +# Copyright 2015-2025 Stanford University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/anaconda.py b/easybuild/easyblocks/a/anaconda.py index 0ac18f1b20..6eafd2f431 100644 --- a/easybuild/easyblocks/a/anaconda.py +++ b/easybuild/easyblocks/a/anaconda.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/ansys.py b/easybuild/easyblocks/a/ansys.py index b59d6f96b7..bd55f9a170 100644 --- a/easybuild/easyblocks/a/ansys.py +++ b/easybuild/easyblocks/a/ansys.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/ant.py b/easybuild/easyblocks/a/ant.py index cb6757e663..bac06105d4 100644 --- a/easybuild/easyblocks/a/ant.py +++ b/easybuild/easyblocks/a/ant.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/aocc.py b/easybuild/easyblocks/a/aocc.py index cf81f144f7..924c93927f 100644 --- a/easybuild/easyblocks/a/aocc.py +++ b/easybuild/easyblocks/a/aocc.py @@ -1,5 +1,5 @@ ## -# Copyright 2020-2024 Forschungszentrum Juelich GmbH +# Copyright 2020-2025 Forschungszentrum Juelich GmbH # # This file is triple-licensed under GPLv2 (see below), MIT, and # BSD three-clause licenses. diff --git a/easybuild/easyblocks/a/aomp.py b/easybuild/easyblocks/a/aomp.py index e44b6f06ab..05660cc77a 100644 --- a/easybuild/easyblocks/a/aomp.py +++ b/easybuild/easyblocks/a/aomp.py @@ -1,5 +1,5 @@ ## -# Copyright 2021-2024 Ghent University +# Copyright 2021-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/arb.py b/easybuild/easyblocks/a/arb.py index 37cc7a6ce1..7758ec8278 100644 --- a/easybuild/easyblocks/a/arb.py +++ b/easybuild/easyblocks/a/arb.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/armadillo.py b/easybuild/easyblocks/a/armadillo.py index f588137257..ee93ff6366 100644 --- a/easybuild/easyblocks/a/armadillo.py +++ b/easybuild/easyblocks/a/armadillo.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/a/atlas.py b/easybuild/easyblocks/a/atlas.py index 8a0ef0ad69..dbc6e3b048 100644 --- a/easybuild/easyblocks/a/atlas.py +++ b/easybuild/easyblocks/a/atlas.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/bamtools.py b/easybuild/easyblocks/b/bamtools.py index e9c678b954..7973194414 100644 --- a/easybuild/easyblocks/b/bamtools.py +++ b/easybuild/easyblocks/b/bamtools.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 The Cyprus Institute +# Copyright 2009-2025 The Cyprus Institute # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/bazel.py b/easybuild/easyblocks/b/bazel.py index 249f1c864e..5a0f6963a2 100644 --- a/easybuild/easyblocks/b/bazel.py +++ b/easybuild/easyblocks/b/bazel.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/berkeleygw.py b/easybuild/easyblocks/b/berkeleygw.py index 8bb5781890..fb6975a3e0 100644 --- a/easybuild/easyblocks/b/berkeleygw.py +++ b/easybuild/easyblocks/b/berkeleygw.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/binutils.py b/easybuild/easyblocks/b/binutils.py index 10e9761b09..e2bdc0f2b0 100644 --- a/easybuild/easyblocks/b/binutils.py +++ b/easybuild/easyblocks/b/binutils.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/bioconductor.py b/easybuild/easyblocks/b/bioconductor.py index acacb2e8c9..bfa07b3bba 100644 --- a/easybuild/easyblocks/b/bioconductor.py +++ b/easybuild/easyblocks/b/bioconductor.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/bisearch.py b/easybuild/easyblocks/b/bisearch.py index 5c9ec28a9d..53cc4e0e2a 100644 --- a/easybuild/easyblocks/b/bisearch.py +++ b/easybuild/easyblocks/b/bisearch.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/blacs.py b/easybuild/easyblocks/b/blacs.py index 482de07401..3df1633219 100644 --- a/easybuild/easyblocks/b/blacs.py +++ b/easybuild/easyblocks/b/blacs.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/blat.py b/easybuild/easyblocks/b/blat.py index bfdfc8fb0d..d64a2a63c3 100755 --- a/easybuild/easyblocks/b/blat.py +++ b/easybuild/easyblocks/b/blat.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 the Cyprus Institute +# Copyright 2009-2025 the Cyprus Institute # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/blender.py b/easybuild/easyblocks/b/blender.py index 2abf715f48..4da40f5608 100644 --- a/easybuild/easyblocks/b/blender.py +++ b/easybuild/easyblocks/b/blender.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/boost.py b/easybuild/easyblocks/b/boost.py index e0f51a2a44..ddad2a68d7 100644 --- a/easybuild/easyblocks/b/boost.py +++ b/easybuild/easyblocks/b/boost.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/bowtie.py b/easybuild/easyblocks/b/bowtie.py index 119cb47ed0..e6b4e81306 100644 --- a/easybuild/easyblocks/b/bowtie.py +++ b/easybuild/easyblocks/b/bowtie.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/bowtie2.py b/easybuild/easyblocks/b/bowtie2.py index f768ac481d..4f19a3c09b 100644 --- a/easybuild/easyblocks/b/bowtie2.py +++ b/easybuild/easyblocks/b/bowtie2.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/b/bwa.py b/easybuild/easyblocks/b/bwa.py index 55bd60804f..1948e87566 100644 --- a/easybuild/easyblocks/b/bwa.py +++ b/easybuild/easyblocks/b/bwa.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Kenneth Hoste # Authors:: George Tsouloupas , Fotis Georgatos # License:: MIT/GPL diff --git a/easybuild/easyblocks/b/bwise.py b/easybuild/easyblocks/b/bwise.py index 3e9b3d34e6..cce9de9a35 100644 --- a/easybuild/easyblocks/b/bwise.py +++ b/easybuild/easyblocks/b/bwise.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Free University of Brussels +# Copyright 2018-2025 Free University of Brussels # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/b/bzip2.py b/easybuild/easyblocks/b/bzip2.py index aa5e598e93..7bf9cf57da 100644 --- a/easybuild/easyblocks/b/bzip2.py +++ b/easybuild/easyblocks/b/bzip2.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cblas.py b/easybuild/easyblocks/c/cblas.py index 4a1ca2f349..84bb88c96f 100644 --- a/easybuild/easyblocks/c/cblas.py +++ b/easybuild/easyblocks/c/cblas.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cfdemcoupling.py b/easybuild/easyblocks/c/cfdemcoupling.py index 4bb0fd85a5..b2b32ee2a8 100644 --- a/easybuild/easyblocks/c/cfdemcoupling.py +++ b/easybuild/easyblocks/c/cfdemcoupling.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cgal.py b/easybuild/easyblocks/c/cgal.py index 431b843b50..47deae247d 100644 --- a/easybuild/easyblocks/c/cgal.py +++ b/easybuild/easyblocks/c/cgal.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/chapel.py b/easybuild/easyblocks/c/chapel.py index 2386f5b7db..e017b7d73e 100644 --- a/easybuild/easyblocks/c/chapel.py +++ b/easybuild/easyblocks/c/chapel.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/c/charmm.py b/easybuild/easyblocks/c/charmm.py index 6b4791e30b..c9d2ba8c97 100644 --- a/easybuild/easyblocks/c/charmm.py +++ b/easybuild/easyblocks/c/charmm.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/clang.py b/easybuild/easyblocks/c/clang.py index af9c105910..3f0eb59eb7 100644 --- a/easybuild/easyblocks/c/clang.py +++ b/easybuild/easyblocks/c/clang.py @@ -1,6 +1,6 @@ ## -# Copyright 2013-2024 Dmitri Gribenko -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Dmitri Gribenko +# Copyright 2013-2025 Ghent University # # This file is triple-licensed under GPLv2 (see below), MIT, and # BSD three-clause licenses. diff --git a/easybuild/easyblocks/c/clang_aomp.py b/easybuild/easyblocks/c/clang_aomp.py index 7e8181faba..2bfecf68f2 100644 --- a/easybuild/easyblocks/c/clang_aomp.py +++ b/easybuild/easyblocks/c/clang_aomp.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cmake.py b/easybuild/easyblocks/c/cmake.py index c17750ae45..91356bf73f 100644 --- a/easybuild/easyblocks/c/cmake.py +++ b/easybuild/easyblocks/c/cmake.py @@ -1,5 +1,5 @@ ## -# Copyright 2020-2024 Alexander Grund +# Copyright 2020-2025 Alexander Grund # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/code_server.py b/easybuild/easyblocks/c/code_server.py index d8ae7276cc..fc9d615d50 100644 --- a/easybuild/easyblocks/c/code_server.py +++ b/easybuild/easyblocks/c/code_server.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/comsol.py b/easybuild/easyblocks/c/comsol.py index d38dd75d64..2da8536fa6 100644 --- a/easybuild/easyblocks/c/comsol.py +++ b/easybuild/easyblocks/c/comsol.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cp2k.py b/easybuild/easyblocks/c/cp2k.py index 1a0f109878..42ba3e430e 100644 --- a/easybuild/easyblocks/c/cp2k.py +++ b/easybuild/easyblocks/c/cp2k.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cplex.py b/easybuild/easyblocks/c/cplex.py index 286683bad9..d185908a51 100644 --- a/easybuild/easyblocks/c/cplex.py +++ b/easybuild/easyblocks/c/cplex.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cppcheck.py b/easybuild/easyblocks/c/cppcheck.py index 3fec7d84ad..d404fbe545 100644 --- a/easybuild/easyblocks/c/cppcheck.py +++ b/easybuild/easyblocks/c/cppcheck.py @@ -1,5 +1,5 @@ ## -# Copyright 2016-2024 Forschungszentrum Juelich GmbH +# Copyright 2016-2025 Forschungszentrum Juelich GmbH # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/crispr_dav.py b/easybuild/easyblocks/c/crispr_dav.py index e85da91da2..caefa70045 100644 --- a/easybuild/easyblocks/c/crispr_dav.py +++ b/easybuild/easyblocks/c/crispr_dav.py @@ -1,5 +1,5 @@ ## -# Copyright 2020-2024 Ghent University +# Copyright 2020-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cryptography.py b/easybuild/easyblocks/c/cryptography.py index 12cee79111..e70d592a41 100644 --- a/easybuild/easyblocks/c/cryptography.py +++ b/easybuild/easyblocks/c/cryptography.py @@ -1,5 +1,5 @@ ## -# Copyright 2017-2024 Ghent University +# Copyright 2017-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cuda.py b/easybuild/easyblocks/c/cuda.py index 10d6bc3083..f5a325e37c 100644 --- a/easybuild/easyblocks/c/cuda.py +++ b/easybuild/easyblocks/c/cuda.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cudacompat.py b/easybuild/easyblocks/c/cudacompat.py index 1013b57137..afa0e0431d 100644 --- a/easybuild/easyblocks/c/cudacompat.py +++ b/easybuild/easyblocks/c/cudacompat.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cudnn.py b/easybuild/easyblocks/c/cudnn.py index 0d2be91475..37af2df553 100644 --- a/easybuild/easyblocks/c/cudnn.py +++ b/easybuild/easyblocks/c/cudnn.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/c/cufflinks.py b/easybuild/easyblocks/c/cufflinks.py index c6753a07d2..b666da4e71 100644 --- a/easybuild/easyblocks/c/cufflinks.py +++ b/easybuild/easyblocks/c/cufflinks.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/d/db.py b/easybuild/easyblocks/d/db.py index b4d1e01590..67628ce97a 100644 --- a/easybuild/easyblocks/d/db.py +++ b/easybuild/easyblocks/d/db.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/d/dl_poly_classic.py b/easybuild/easyblocks/d/dl_poly_classic.py index 991b32e042..0e42d81bdd 100644 --- a/easybuild/easyblocks/d/dl_poly_classic.py +++ b/easybuild/easyblocks/d/dl_poly_classic.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/d/dm_reverb.py b/easybuild/easyblocks/d/dm_reverb.py index 104d1c8841..82aeab1bb4 100644 --- a/easybuild/easyblocks/d/dm_reverb.py +++ b/easybuild/easyblocks/d/dm_reverb.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/d/dolfin.py b/easybuild/easyblocks/d/dolfin.py index 955fcb52ee..240e723490 100644 --- a/easybuild/easyblocks/d/dolfin.py +++ b/easybuild/easyblocks/d/dolfin.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/d/doris.py b/easybuild/easyblocks/d/doris.py index c0de79b461..54a2c82042 100644 --- a/easybuild/easyblocks/d/doris.py +++ b/easybuild/easyblocks/d/doris.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/d/doxygen.py b/easybuild/easyblocks/d/doxygen.py index 9fa4fdde32..e67053994f 100644 --- a/easybuild/easyblocks/d/doxygen.py +++ b/easybuild/easyblocks/d/doxygen.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/d/dualsphysics.py b/easybuild/easyblocks/d/dualsphysics.py index fd1b923c29..996447650d 100644 --- a/easybuild/easyblocks/d/dualsphysics.py +++ b/easybuild/easyblocks/d/dualsphysics.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/e/easybuildmeta.py b/easybuild/easyblocks/e/easybuildmeta.py index ac05730a7f..6637bb94f6 100644 --- a/easybuild/easyblocks/e/easybuildmeta.py +++ b/easybuild/easyblocks/e/easybuildmeta.py @@ -1,5 +1,5 @@ # # -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/e/egglib.py b/easybuild/easyblocks/e/egglib.py index 17916ec410..702ba0e6f2 100644 --- a/easybuild/easyblocks/e/egglib.py +++ b/easybuild/easyblocks/e/egglib.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/e/eigen.py b/easybuild/easyblocks/e/eigen.py index ed92ee2c14..0215e5742a 100644 --- a/easybuild/easyblocks/e/eigen.py +++ b/easybuild/easyblocks/e/eigen.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/e/elpa.py b/easybuild/easyblocks/e/elpa.py index f2fd2be700..5acb8e6f74 100644 --- a/easybuild/easyblocks/e/elpa.py +++ b/easybuild/easyblocks/e/elpa.py @@ -1,6 +1,6 @@ ## -# Copyright 2009-2024 Ghent University -# Copyright 2019-2024 Micael Oliveira +# Copyright 2009-2025 Ghent University +# Copyright 2019-2025 Micael Oliveira # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/e/elsi.py b/easybuild/easyblocks/e/elsi.py index 053ec3698d..220b2187cb 100644 --- a/easybuild/easyblocks/e/elsi.py +++ b/easybuild/easyblocks/e/elsi.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/e/epd.py b/easybuild/easyblocks/e/epd.py index d3dbfc8e65..c7f083916f 100644 --- a/easybuild/easyblocks/e/epd.py +++ b/easybuild/easyblocks/e/epd.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/e/esmf.py b/easybuild/easyblocks/e/esmf.py index e6fd4d1662..3dbfd035ea 100644 --- a/easybuild/easyblocks/e/esmf.py +++ b/easybuild/easyblocks/e/esmf.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/e/espresso.py b/easybuild/easyblocks/e/espresso.py index 7665663a6c..af6d04ee58 100644 --- a/easybuild/easyblocks/e/espresso.py +++ b/easybuild/easyblocks/e/espresso.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Josh Berryman , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/e/extrae.py b/easybuild/easyblocks/e/extrae.py index f6f47ffcea..0ce705f8ab 100644 --- a/easybuild/easyblocks/e/extrae.py +++ b/easybuild/easyblocks/e/extrae.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/faststructure.py b/easybuild/easyblocks/f/faststructure.py index 922d12e0df..bc63706473 100644 --- a/easybuild/easyblocks/f/faststructure.py +++ b/easybuild/easyblocks/f/faststructure.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/fdtd_solutions.py b/easybuild/easyblocks/f/fdtd_solutions.py index bacaf32144..8ab46ef715 100644 --- a/easybuild/easyblocks/f/fdtd_solutions.py +++ b/easybuild/easyblocks/f/fdtd_solutions.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/ferret.py b/easybuild/easyblocks/f/ferret.py index 9df9958e7f..184445a273 100644 --- a/easybuild/easyblocks/f/ferret.py +++ b/easybuild/easyblocks/f/ferret.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/fftw.py b/easybuild/easyblocks/f/fftw.py index baa287e2d5..0b745acf22 100644 --- a/easybuild/easyblocks/f/fftw.py +++ b/easybuild/easyblocks/f/fftw.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/fftwmpi.py b/easybuild/easyblocks/f/fftwmpi.py index cb285a576b..e72d457ffd 100644 --- a/easybuild/easyblocks/f/fftwmpi.py +++ b/easybuild/easyblocks/f/fftwmpi.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/flex.py b/easybuild/easyblocks/f/flex.py index 0c9fb9b54c..04c43a6895 100644 --- a/easybuild/easyblocks/f/flex.py +++ b/easybuild/easyblocks/f/flex.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/flexiblas.py b/easybuild/easyblocks/f/flexiblas.py index c1a7be7679..be51b02632 100644 --- a/easybuild/easyblocks/f/flexiblas.py +++ b/easybuild/easyblocks/f/flexiblas.py @@ -1,5 +1,5 @@ ## -# Copyright 2021-2024 Ghent University +# Copyright 2021-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/flook.py b/easybuild/easyblocks/f/flook.py index 83d6173e3b..987f979ad8 100644 --- a/easybuild/easyblocks/f/flook.py +++ b/easybuild/easyblocks/f/flook.py @@ -1,5 +1,5 @@ ## -# Copyright 2023-2024 Utrecht University +# Copyright 2023-2025 Utrecht University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/fluent.py b/easybuild/easyblocks/f/fluent.py index f8e764ae80..031209ca48 100644 --- a/easybuild/easyblocks/f/fluent.py +++ b/easybuild/easyblocks/f/fluent.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/foldx.py b/easybuild/easyblocks/f/foldx.py index e07441d64f..6c9dfeb547 100644 --- a/easybuild/easyblocks/f/foldx.py +++ b/easybuild/easyblocks/f/foldx.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/freefem.py b/easybuild/easyblocks/f/freefem.py index 125df068c5..d1cfaecd72 100644 --- a/easybuild/easyblocks/f/freefem.py +++ b/easybuild/easyblocks/f/freefem.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/freesurfer.py b/easybuild/easyblocks/f/freesurfer.py index 1c63b53e01..f464cc3522 100644 --- a/easybuild/easyblocks/f/freesurfer.py +++ b/easybuild/easyblocks/f/freesurfer.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/freetype.py b/easybuild/easyblocks/f/freetype.py index 2621a1fd6f..9e5f2f2cf7 100644 --- a/easybuild/easyblocks/f/freetype.py +++ b/easybuild/easyblocks/f/freetype.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/f/fsl.py b/easybuild/easyblocks/f/fsl.py index 5064fb30dd..ae7c6b8339 100644 --- a/easybuild/easyblocks/f/fsl.py +++ b/easybuild/easyblocks/f/fsl.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/g2clib.py b/easybuild/easyblocks/g/g2clib.py index e15d945e5e..0c4e5a7088 100644 --- a/easybuild/easyblocks/g/g2clib.py +++ b/easybuild/easyblocks/g/g2clib.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/g2lib.py b/easybuild/easyblocks/g/g2lib.py index 4c316c3b1d..b107c28425 100644 --- a/easybuild/easyblocks/g/g2lib.py +++ b/easybuild/easyblocks/g/g2lib.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/gamess_us.py b/easybuild/easyblocks/g/gamess_us.py index ca8985bfcc..be21886ba4 100644 --- a/easybuild/easyblocks/g/gamess_us.py +++ b/easybuild/easyblocks/g/gamess_us.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/gate.py b/easybuild/easyblocks/g/gate.py index 6347694df7..2f9a00d8f3 100644 --- a/easybuild/easyblocks/g/gate.py +++ b/easybuild/easyblocks/g/gate.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/gcc.py b/easybuild/easyblocks/g/gcc.py index 76562c4001..110cdd25a6 100644 --- a/easybuild/easyblocks/g/gcc.py +++ b/easybuild/easyblocks/g/gcc.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/gctf.py b/easybuild/easyblocks/g/gctf.py index cd2b9315fa..a82cacb01b 100644 --- a/easybuild/easyblocks/g/gctf.py +++ b/easybuild/easyblocks/g/gctf.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Ghent University +# Copyright 2019-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (https://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/geant4.py b/easybuild/easyblocks/g/geant4.py index ed3f5ff3b9..88265afc1c 100644 --- a/easybuild/easyblocks/g/geant4.py +++ b/easybuild/easyblocks/g/geant4.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/ghc.py b/easybuild/easyblocks/g/ghc.py index cfae065062..ffd3a3a3c8 100644 --- a/easybuild/easyblocks/g/ghc.py +++ b/easybuild/easyblocks/g/ghc.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/go.py b/easybuild/easyblocks/g/go.py index 25d06272e3..0c56c2ccd9 100644 --- a/easybuild/easyblocks/g/go.py +++ b/easybuild/easyblocks/g/go.py @@ -1,5 +1,5 @@ ## -# Copyright 2014-2024 Ghent University +# Copyright 2014-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/gromacs.py b/easybuild/easyblocks/g/gromacs.py index 4450448b86..0b43630bf2 100644 --- a/easybuild/easyblocks/g/gromacs.py +++ b/easybuild/easyblocks/g/gromacs.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/g/gurobi.py b/easybuild/easyblocks/g/gurobi.py index c8b90e9dfe..f8e9ada69c 100644 --- a/easybuild/easyblocks/g/gurobi.py +++ b/easybuild/easyblocks/g/gurobi.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/__init__.py b/easybuild/easyblocks/generic/__init__.py index 8d496189c3..d0005a450d 100644 --- a/easybuild/easyblocks/generic/__init__.py +++ b/easybuild/easyblocks/generic/__init__.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/binariestarball.py b/easybuild/easyblocks/generic/binariestarball.py index 53b8de19f7..dc8fa7173f 100644 --- a/easybuild/easyblocks/generic/binariestarball.py +++ b/easybuild/easyblocks/generic/binariestarball.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/binary.py b/easybuild/easyblocks/generic/binary.py index 288859ecbb..32e8d763ee 100644 --- a/easybuild/easyblocks/generic/binary.py +++ b/easybuild/easyblocks/generic/binary.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/buildenv.py b/easybuild/easyblocks/generic/buildenv.py index 35be80739c..85a7d204b4 100644 --- a/easybuild/easyblocks/generic/buildenv.py +++ b/easybuild/easyblocks/generic/buildenv.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 62228fd5a0..76afe84dbe 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cargo.py b/easybuild/easyblocks/generic/cargo.py index 126381f2d5..ddcee2565f 100644 --- a/easybuild/easyblocks/generic/cargo.py +++ b/easybuild/easyblocks/generic/cargo.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cargopythonbundle.py b/easybuild/easyblocks/generic/cargopythonbundle.py index d76ccde612..893c03a895 100644 --- a/easybuild/easyblocks/generic/cargopythonbundle.py +++ b/easybuild/easyblocks/generic/cargopythonbundle.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cargopythonpackage.py b/easybuild/easyblocks/generic/cargopythonpackage.py index fa85cad411..5a07333338 100644 --- a/easybuild/easyblocks/generic/cargopythonpackage.py +++ b/easybuild/easyblocks/generic/cargopythonpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cmakemake.py b/easybuild/easyblocks/generic/cmakemake.py index 3f8e591cd1..274e8857c9 100644 --- a/easybuild/easyblocks/generic/cmakemake.py +++ b/easybuild/easyblocks/generic/cmakemake.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cmakemakecp.py b/easybuild/easyblocks/generic/cmakemakecp.py index 51a9cf3d29..bfaf2d4b76 100644 --- a/easybuild/easyblocks/generic/cmakemakecp.py +++ b/easybuild/easyblocks/generic/cmakemakecp.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cmakeninja.py b/easybuild/easyblocks/generic/cmakeninja.py index f9c4d7556b..c0decbb684 100644 --- a/easybuild/easyblocks/generic/cmakeninja.py +++ b/easybuild/easyblocks/generic/cmakeninja.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Ghent University +# Copyright 2019-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cmakepythonpackage.py b/easybuild/easyblocks/generic/cmakepythonpackage.py index 5a4bc30f53..67a112a952 100644 --- a/easybuild/easyblocks/generic/cmakepythonpackage.py +++ b/easybuild/easyblocks/generic/cmakepythonpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/cmdcp.py b/easybuild/easyblocks/generic/cmdcp.py index ee24055169..9756e09155 100644 --- a/easybuild/easyblocks/generic/cmdcp.py +++ b/easybuild/easyblocks/generic/cmdcp.py @@ -1,5 +1,5 @@ ## -# Copyright 2014-2024 Ghent University +# Copyright 2014-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/conda.py b/easybuild/easyblocks/generic/conda.py index 5fce4607e6..c886aebbda 100644 --- a/easybuild/easyblocks/generic/conda.py +++ b/easybuild/easyblocks/generic/conda.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/configuremake.py b/easybuild/easyblocks/generic/configuremake.py index 8ad952db5e..5d5334ef0d 100644 --- a/easybuild/easyblocks/generic/configuremake.py +++ b/easybuild/easyblocks/generic/configuremake.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/configuremakepythonpackage.py b/easybuild/easyblocks/generic/configuremakepythonpackage.py index 8da4ac0331..35c7b934ed 100644 --- a/easybuild/easyblocks/generic/configuremakepythonpackage.py +++ b/easybuild/easyblocks/generic/configuremakepythonpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/craytoolchain.py b/easybuild/easyblocks/generic/craytoolchain.py index 210b7e9f47..1bd6fd99ec 100644 --- a/easybuild/easyblocks/generic/craytoolchain.py +++ b/easybuild/easyblocks/generic/craytoolchain.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/fortranpythonpackage.py b/easybuild/easyblocks/generic/fortranpythonpackage.py index 1a8a512f1d..a497fbbf76 100644 --- a/easybuild/easyblocks/generic/fortranpythonpackage.py +++ b/easybuild/easyblocks/generic/fortranpythonpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/gopackage.py b/easybuild/easyblocks/generic/gopackage.py index 268d0eea61..b498ce7899 100644 --- a/easybuild/easyblocks/generic/gopackage.py +++ b/easybuild/easyblocks/generic/gopackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/intelbase.py b/easybuild/easyblocks/generic/intelbase.py index 5c03926642..a8774188a5 100644 --- a/easybuild/easyblocks/generic/intelbase.py +++ b/easybuild/easyblocks/generic/intelbase.py @@ -1,5 +1,5 @@ # # -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/jar.py b/easybuild/easyblocks/generic/jar.py index 2ac88971af..d502f9440c 100644 --- a/easybuild/easyblocks/generic/jar.py +++ b/easybuild/easyblocks/generic/jar.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/juliabundle.py b/easybuild/easyblocks/generic/juliabundle.py index 7f2c7080ce..cce7451728 100644 --- a/easybuild/easyblocks/generic/juliabundle.py +++ b/easybuild/easyblocks/generic/juliabundle.py @@ -1,5 +1,5 @@ ## -# Copyright 2022-2024 Vrije Universiteit Brussel +# Copyright 2022-2025 Vrije Universiteit Brussel # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/juliapackage.py b/easybuild/easyblocks/generic/juliapackage.py index 5a3e4acbb5..65da5c661b 100644 --- a/easybuild/easyblocks/generic/juliapackage.py +++ b/easybuild/easyblocks/generic/juliapackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2022-2024 Vrije Universiteit Brussel +# Copyright 2022-2025 Vrije Universiteit Brussel # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/makecp.py b/easybuild/easyblocks/generic/makecp.py index 230608d3aa..0bee39e09b 100644 --- a/easybuild/easyblocks/generic/makecp.py +++ b/easybuild/easyblocks/generic/makecp.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 the Cyprus Institute +# Copyright 2013-2025 the Cyprus Institute # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/mesonninja.py b/easybuild/easyblocks/generic/mesonninja.py index c432bfd021..683118323c 100644 --- a/easybuild/easyblocks/generic/mesonninja.py +++ b/easybuild/easyblocks/generic/mesonninja.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/modulerc.py b/easybuild/easyblocks/generic/modulerc.py index e9547aada1..886775e04c 100644 --- a/easybuild/easyblocks/generic/modulerc.py +++ b/easybuild/easyblocks/generic/modulerc.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/ocamlpackage.py b/easybuild/easyblocks/generic/ocamlpackage.py index 538ecb8c3f..1c3ce24d9e 100644 --- a/easybuild/easyblocks/generic/ocamlpackage.py +++ b/easybuild/easyblocks/generic/ocamlpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/octavepackage.py b/easybuild/easyblocks/generic/octavepackage.py index c7891460cc..05ff2bf1f3 100644 --- a/easybuild/easyblocks/generic/octavepackage.py +++ b/easybuild/easyblocks/generic/octavepackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/packedbinary.py b/easybuild/easyblocks/generic/packedbinary.py index 18ebbbf28d..5e6ee8d77a 100644 --- a/easybuild/easyblocks/generic/packedbinary.py +++ b/easybuild/easyblocks/generic/packedbinary.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/perlbundle.py b/easybuild/easyblocks/generic/perlbundle.py index 928dfe6886..e86bdb3de0 100644 --- a/easybuild/easyblocks/generic/perlbundle.py +++ b/easybuild/easyblocks/generic/perlbundle.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/perlmodule.py b/easybuild/easyblocks/generic/perlmodule.py index 648b5d6dab..2643b25208 100644 --- a/easybuild/easyblocks/generic/perlmodule.py +++ b/easybuild/easyblocks/generic/perlmodule.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/pythonbundle.py b/easybuild/easyblocks/generic/pythonbundle.py index 5e7d402f12..bfc3594c6e 100644 --- a/easybuild/easyblocks/generic/pythonbundle.py +++ b/easybuild/easyblocks/generic/pythonbundle.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index 6318a88f67..1d4897064a 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/rpackage.py b/easybuild/easyblocks/generic/rpackage.py index 3c9fd70018..65fbd2803e 100644 --- a/easybuild/easyblocks/generic/rpackage.py +++ b/easybuild/easyblocks/generic/rpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/rpm.py b/easybuild/easyblocks/generic/rpm.py index d23d4427e0..ddb1de1780 100644 --- a/easybuild/easyblocks/generic/rpm.py +++ b/easybuild/easyblocks/generic/rpm.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/rubygem.py b/easybuild/easyblocks/generic/rubygem.py index ddfc9010ca..bf7a87a06c 100644 --- a/easybuild/easyblocks/generic/rubygem.py +++ b/easybuild/easyblocks/generic/rubygem.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/scons.py b/easybuild/easyblocks/generic/scons.py index 9e8b615cb0..808dc62f46 100644 --- a/easybuild/easyblocks/generic/scons.py +++ b/easybuild/easyblocks/generic/scons.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/systemcompiler.py b/easybuild/easyblocks/generic/systemcompiler.py index ff9db971e0..6418bd4589 100644 --- a/easybuild/easyblocks/generic/systemcompiler.py +++ b/easybuild/easyblocks/generic/systemcompiler.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/systemmpi.py b/easybuild/easyblocks/generic/systemmpi.py index 84cb89d7eb..36b14d9c67 100644 --- a/easybuild/easyblocks/generic/systemmpi.py +++ b/easybuild/easyblocks/generic/systemmpi.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/tarball.py b/easybuild/easyblocks/generic/tarball.py index 1eef4528ae..bcded71ec0 100644 --- a/easybuild/easyblocks/generic/tarball.py +++ b/easybuild/easyblocks/generic/tarball.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/toolchain.py b/easybuild/easyblocks/generic/toolchain.py index 957971d03a..ba4dfbefa1 100644 --- a/easybuild/easyblocks/generic/toolchain.py +++ b/easybuild/easyblocks/generic/toolchain.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/versionindependentpythonpackage.py b/easybuild/easyblocks/generic/versionindependentpythonpackage.py index 9c7dc3fc8b..419c24ace5 100644 --- a/easybuild/easyblocks/generic/versionindependentpythonpackage.py +++ b/easybuild/easyblocks/generic/versionindependentpythonpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/vscpythonpackage.py b/easybuild/easyblocks/generic/vscpythonpackage.py index ea2012878a..fe9fbd6fe3 100644 --- a/easybuild/easyblocks/generic/vscpythonpackage.py +++ b/easybuild/easyblocks/generic/vscpythonpackage.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/generic/waf.py b/easybuild/easyblocks/generic/waf.py index 8cec720fd9..0e4f14b85f 100644 --- a/easybuild/easyblocks/generic/waf.py +++ b/easybuild/easyblocks/generic/waf.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/h/hadoop.py b/easybuild/easyblocks/h/hadoop.py index 856def79fd..ddc2f294b9 100644 --- a/easybuild/easyblocks/h/hadoop.py +++ b/easybuild/easyblocks/h/hadoop.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/h/hdf5.py b/easybuild/easyblocks/h/hdf5.py index 5501a9db54..7c23ec1ba5 100644 --- a/easybuild/easyblocks/h/hdf5.py +++ b/easybuild/easyblocks/h/hdf5.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/h/healpix.py b/easybuild/easyblocks/h/healpix.py index 8969836898..8e70aaf314 100644 --- a/easybuild/easyblocks/h/healpix.py +++ b/easybuild/easyblocks/h/healpix.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/h/hpcc.py b/easybuild/easyblocks/h/hpcc.py index c8137cc143..9f2f75f08c 100644 --- a/easybuild/easyblocks/h/hpcc.py +++ b/easybuild/easyblocks/h/hpcc.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/h/hpcg.py b/easybuild/easyblocks/h/hpcg.py index e634111bce..81616f5442 100644 --- a/easybuild/easyblocks/h/hpcg.py +++ b/easybuild/easyblocks/h/hpcg.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/h/hpl.py b/easybuild/easyblocks/h/hpl.py index 1f1b23e0df..fde72ac388 100644 --- a/easybuild/easyblocks/h/hpl.py +++ b/easybuild/easyblocks/h/hpl.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/h/hypre.py b/easybuild/easyblocks/h/hypre.py index 1d9615bd74..9e142d2de3 100644 --- a/easybuild/easyblocks/h/hypre.py +++ b/easybuild/easyblocks/h/hypre.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/icc.py b/easybuild/easyblocks/i/icc.py index 527921d0fa..a808a664a0 100644 --- a/easybuild/easyblocks/i/icc.py +++ b/easybuild/easyblocks/i/icc.py @@ -1,5 +1,5 @@ # # -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/iccifort.py b/easybuild/easyblocks/i/iccifort.py index 1072de00d7..b653ed80cc 100644 --- a/easybuild/easyblocks/i/iccifort.py +++ b/easybuild/easyblocks/i/iccifort.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Bart Oldeman, McGill University, Compute Canada +# Copyright 2019-2025 Bart Oldeman, McGill University, Compute Canada # # This file is triple-licensed under GPLv2 (see below), MIT, and # BSD three-clause licenses. diff --git a/easybuild/easyblocks/i/ifort.py b/easybuild/easyblocks/i/ifort.py index 6497c1124f..362c2636fc 100644 --- a/easybuild/easyblocks/i/ifort.py +++ b/easybuild/easyblocks/i/ifort.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/imkl.py b/easybuild/easyblocks/i/imkl.py index 59ce1159a6..6a46e8efb6 100644 --- a/easybuild/easyblocks/i/imkl.py +++ b/easybuild/easyblocks/i/imkl.py @@ -1,5 +1,5 @@ # # -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/imkl_fftw.py b/easybuild/easyblocks/i/imkl_fftw.py index 18cd02246b..096e427863 100644 --- a/easybuild/easyblocks/i/imkl_fftw.py +++ b/easybuild/easyblocks/i/imkl_fftw.py @@ -1,5 +1,5 @@ # # -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/imod.py b/easybuild/easyblocks/i/imod.py index cda5c3a70f..42b240b86f 100644 --- a/easybuild/easyblocks/i/imod.py +++ b/easybuild/easyblocks/i/imod.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/impi.py b/easybuild/easyblocks/i/impi.py index 42919b4a45..3eb86172bc 100644 --- a/easybuild/easyblocks/i/impi.py +++ b/easybuild/easyblocks/i/impi.py @@ -1,5 +1,5 @@ # # -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/inspector.py b/easybuild/easyblocks/i/inspector.py index 7d7ddbf062..685dc7c95c 100644 --- a/easybuild/easyblocks/i/inspector.py +++ b/easybuild/easyblocks/i/inspector.py @@ -1,5 +1,5 @@ # # -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/intel_compilers.py b/easybuild/easyblocks/i/intel_compilers.py index 4d1c33df6c..cb36b72b15 100644 --- a/easybuild/easyblocks/i/intel_compilers.py +++ b/easybuild/easyblocks/i/intel_compilers.py @@ -1,5 +1,5 @@ # # -# Copyright 2021-2024 Ghent University +# Copyright 2021-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/ipp.py b/easybuild/easyblocks/i/ipp.py index d39c55b07b..89108f0908 100644 --- a/easybuild/easyblocks/i/ipp.py +++ b/easybuild/easyblocks/i/ipp.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/ironpython.py b/easybuild/easyblocks/i/ironpython.py index dedbbe8fec..7c858d38c4 100644 --- a/easybuild/easyblocks/i/ironpython.py +++ b/easybuild/easyblocks/i/ironpython.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/i/itac.py b/easybuild/easyblocks/i/itac.py index d0811cbcc5..c2962e5d58 100644 --- a/easybuild/easyblocks/i/itac.py +++ b/easybuild/easyblocks/i/itac.py @@ -1,5 +1,5 @@ # # -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/j/java.py b/easybuild/easyblocks/j/java.py index 5731a193bb..e873a6dc53 100644 --- a/easybuild/easyblocks/j/java.py +++ b/easybuild/easyblocks/j/java.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/j/jaxlib.py b/easybuild/easyblocks/j/jaxlib.py index d4dca3245c..c7661487c5 100644 --- a/easybuild/easyblocks/j/jaxlib.py +++ b/easybuild/easyblocks/j/jaxlib.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/lammps.py b/easybuild/easyblocks/l/lammps.py index 8cb6e71494..dbdb674866 100644 --- a/easybuild/easyblocks/l/lammps.py +++ b/easybuild/easyblocks/l/lammps.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/lapack.py b/easybuild/easyblocks/l/lapack.py index f2f3ce6705..66e42a5105 100644 --- a/easybuild/easyblocks/l/lapack.py +++ b/easybuild/easyblocks/l/lapack.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/libdrm.py b/easybuild/easyblocks/l/libdrm.py index dd3d2c2b87..75902e4cef 100644 --- a/easybuild/easyblocks/l/libdrm.py +++ b/easybuild/easyblocks/l/libdrm.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/libint.py b/easybuild/easyblocks/l/libint.py index ea4f86cb78..d8ff9ff5f8 100644 --- a/easybuild/easyblocks/l/libint.py +++ b/easybuild/easyblocks/l/libint.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/libqglviewer.py b/easybuild/easyblocks/l/libqglviewer.py index 6c38a1103b..48f995d102 100644 --- a/easybuild/easyblocks/l/libqglviewer.py +++ b/easybuild/easyblocks/l/libqglviewer.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/libsmm.py b/easybuild/easyblocks/l/libsmm.py index 6010a7bb6c..b7d9d5f066 100644 --- a/easybuild/easyblocks/l/libsmm.py +++ b/easybuild/easyblocks/l/libsmm.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/libxml2.py b/easybuild/easyblocks/l/libxml2.py index dd43089579..931bddc776 100644 --- a/easybuild/easyblocks/l/libxml2.py +++ b/easybuild/easyblocks/l/libxml2.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/llvm.py b/easybuild/easyblocks/l/llvm.py index 1193828e6f..39b98f3184 100644 --- a/easybuild/easyblocks/l/llvm.py +++ b/easybuild/easyblocks/l/llvm.py @@ -1,5 +1,5 @@ ## -# Copyright 2020-2024 Ghent University +# Copyright 2020-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/l/lua.py b/easybuild/easyblocks/l/lua.py index a31ec8e107..f857f8acb7 100644 --- a/easybuild/easyblocks/l/lua.py +++ b/easybuild/easyblocks/l/lua.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mamba.py b/easybuild/easyblocks/m/mamba.py index 232011e137..3b8743438f 100644 --- a/easybuild/easyblocks/m/mamba.py +++ b/easybuild/easyblocks/m/mamba.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/maple.py b/easybuild/easyblocks/m/maple.py index e10ab4d218..ab88193ce6 100644 --- a/easybuild/easyblocks/m/maple.py +++ b/easybuild/easyblocks/m/maple.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mathematica.py b/easybuild/easyblocks/m/mathematica.py index 4372c06f2d..1926708f77 100644 --- a/easybuild/easyblocks/m/mathematica.py +++ b/easybuild/easyblocks/m/mathematica.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/matlab.py b/easybuild/easyblocks/m/matlab.py index 8cf8aef6e8..311579fe1d 100644 --- a/easybuild/easyblocks/m/matlab.py +++ b/easybuild/easyblocks/m/matlab.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mcr.py b/easybuild/easyblocks/m/mcr.py index 76f538dc30..0a75f5c566 100644 --- a/easybuild/easyblocks/m/mcr.py +++ b/easybuild/easyblocks/m/mcr.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mesa.py b/easybuild/easyblocks/m/mesa.py index e482ac9c13..9fa4c20d27 100644 --- a/easybuild/easyblocks/m/mesa.py +++ b/easybuild/easyblocks/m/mesa.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/metagenome_atlas.py b/easybuild/easyblocks/m/metagenome_atlas.py index 2391595cee..a439cda2db 100644 --- a/easybuild/easyblocks/m/metagenome_atlas.py +++ b/easybuild/easyblocks/m/metagenome_atlas.py @@ -1,5 +1,5 @@ ## -# Copyright 2020-2024 Ghent University +# Copyright 2020-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/metavelvet.py b/easybuild/easyblocks/m/metavelvet.py index 4ffc693bb2..4dcdb1581a 100644 --- a/easybuild/easyblocks/m/metavelvet.py +++ b/easybuild/easyblocks/m/metavelvet.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/m/metis.py b/easybuild/easyblocks/m/metis.py index d724630d91..a05c596795 100644 --- a/easybuild/easyblocks/m/metis.py +++ b/easybuild/easyblocks/m/metis.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/modeller.py b/easybuild/easyblocks/m/modeller.py index d3dec47929..a8fa262c4c 100755 --- a/easybuild/easyblocks/m/modeller.py +++ b/easybuild/easyblocks/m/modeller.py @@ -1,5 +1,5 @@ ## -# Copyright 2014-2024 Ghent University +# Copyright 2014-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of the University of Ghent (http://ugent.be/hpc). diff --git a/easybuild/easyblocks/m/molpro.py b/easybuild/easyblocks/m/molpro.py index e6f53ed1bc..2845c164bd 100644 --- a/easybuild/easyblocks/m/molpro.py +++ b/easybuild/easyblocks/m/molpro.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mono.py b/easybuild/easyblocks/m/mono.py index c82f6a5303..448a9995f9 100644 --- a/easybuild/easyblocks/m/mono.py +++ b/easybuild/easyblocks/m/mono.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mothur.py b/easybuild/easyblocks/m/mothur.py index 7e44bc7b4f..461c3f5fef 100644 --- a/easybuild/easyblocks/m/mothur.py +++ b/easybuild/easyblocks/m/mothur.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/motioncor2.py b/easybuild/easyblocks/m/motioncor2.py index 80daae592b..e1a287842a 100644 --- a/easybuild/easyblocks/m/motioncor2.py +++ b/easybuild/easyblocks/m/motioncor2.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Ghent University +# Copyright 2019-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mpich.py b/easybuild/easyblocks/m/mpich.py index d29092e063..94a69105a5 100644 --- a/easybuild/easyblocks/m/mpich.py +++ b/easybuild/easyblocks/m/mpich.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University, Forschungszentrum Juelich +# Copyright 2009-2025 Ghent University, Forschungszentrum Juelich # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mrbayes.py b/easybuild/easyblocks/m/mrbayes.py index 5584122689..bedc8dc6ee 100644 --- a/easybuild/easyblocks/m/mrbayes.py +++ b/easybuild/easyblocks/m/mrbayes.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mrtrix.py b/easybuild/easyblocks/m/mrtrix.py index 08ca57b013..518d656a66 100644 --- a/easybuild/easyblocks/m/mrtrix.py +++ b/easybuild/easyblocks/m/mrtrix.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/msm.py b/easybuild/easyblocks/m/msm.py index 2f31dddabe..e551b70cc3 100644 --- a/easybuild/easyblocks/m/msm.py +++ b/easybuild/easyblocks/m/msm.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mtl4.py b/easybuild/easyblocks/m/mtl4.py index a77b223c4b..887a83e2c2 100644 --- a/easybuild/easyblocks/m/mtl4.py +++ b/easybuild/easyblocks/m/mtl4.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mummer.py b/easybuild/easyblocks/m/mummer.py index ee259fa0fc..3bc79f5962 100644 --- a/easybuild/easyblocks/m/mummer.py +++ b/easybuild/easyblocks/m/mummer.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of the University of Ghent (http://ugent.be/hpc). diff --git a/easybuild/easyblocks/m/mumps.py b/easybuild/easyblocks/m/mumps.py index 4cd1b71f00..238ef160b1 100644 --- a/easybuild/easyblocks/m/mumps.py +++ b/easybuild/easyblocks/m/mumps.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mutil.py b/easybuild/easyblocks/m/mutil.py index 7559a44ee6..ac3fe38aa2 100644 --- a/easybuild/easyblocks/m/mutil.py +++ b/easybuild/easyblocks/m/mutil.py @@ -1,5 +1,5 @@ ## -# Copyright 2016-2024 Ghent University +# Copyright 2016-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mvapich2.py b/easybuild/easyblocks/m/mvapich2.py index a80bd8b8d2..cd3767e984 100644 --- a/easybuild/easyblocks/m/mvapich2.py +++ b/easybuild/easyblocks/m/mvapich2.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University, Forschungszentrum Juelich +# Copyright 2009-2025 Ghent University, Forschungszentrum Juelich # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mxnet.py b/easybuild/easyblocks/m/mxnet.py index 016c5ebab8..d02df7640d 100644 --- a/easybuild/easyblocks/m/mxnet.py +++ b/easybuild/easyblocks/m/mxnet.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Free University of Brussels (VUB) +# Copyright 2018-2025 Free University of Brussels (VUB) # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/m/mymedialite.py b/easybuild/easyblocks/m/mymedialite.py index 5aeb784b86..30ff966598 100644 --- a/easybuild/easyblocks/m/mymedialite.py +++ b/easybuild/easyblocks/m/mymedialite.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/namd.py b/easybuild/easyblocks/n/namd.py index 4c7a18cc79..22f492b3bf 100644 --- a/easybuild/easyblocks/n/namd.py +++ b/easybuild/easyblocks/n/namd.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2013-2024 CaSToRC, The Cyprus Institute +# Copyright:: Copyright 2013-2025 CaSToRC, The Cyprus Institute # Authors:: George Tsouloupas # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/n/nccl.py b/easybuild/easyblocks/n/nccl.py index 15ce298ce0..cf00c8eee3 100644 --- a/easybuild/easyblocks/n/nccl.py +++ b/easybuild/easyblocks/n/nccl.py @@ -1,5 +1,5 @@ ## -# Copyright 2021-2024 Ghent University +# Copyright 2021-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/ncl.py b/easybuild/easyblocks/n/ncl.py index 3169ab86d1..ff2d3ca5e6 100644 --- a/easybuild/easyblocks/n/ncl.py +++ b/easybuild/easyblocks/n/ncl.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/ncurses.py b/easybuild/easyblocks/n/ncurses.py index 66176969aa..0995545944 100644 --- a/easybuild/easyblocks/n/ncurses.py +++ b/easybuild/easyblocks/n/ncurses.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/n/nemo.py b/easybuild/easyblocks/n/nemo.py index f6ce8fca1d..f212d95358 100644 --- a/easybuild/easyblocks/n/nemo.py +++ b/easybuild/easyblocks/n/nemo.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/netcdf.py b/easybuild/easyblocks/n/netcdf.py index 3d90c79540..7477e86d70 100644 --- a/easybuild/easyblocks/n/netcdf.py +++ b/easybuild/easyblocks/n/netcdf.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/netcdf4_python.py b/easybuild/easyblocks/n/netcdf4_python.py index c8bb096f62..6c76c7ea2b 100644 --- a/easybuild/easyblocks/n/netcdf4_python.py +++ b/easybuild/easyblocks/n/netcdf4_python.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/netcdf_fortran.py b/easybuild/easyblocks/n/netcdf_fortran.py index 3365cb837d..ed143afe90 100644 --- a/easybuild/easyblocks/n/netcdf_fortran.py +++ b/easybuild/easyblocks/n/netcdf_fortran.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/neuron.py b/easybuild/easyblocks/n/neuron.py index fb462030fc..1cc82e457d 100644 --- a/easybuild/easyblocks/n/neuron.py +++ b/easybuild/easyblocks/n/neuron.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/nim.py b/easybuild/easyblocks/n/nim.py index d54fdde56c..4c73a16eda 100644 --- a/easybuild/easyblocks/n/nim.py +++ b/easybuild/easyblocks/n/nim.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/nose.py b/easybuild/easyblocks/n/nose.py index d46223e7fa..327296da3e 100644 --- a/easybuild/easyblocks/n/nose.py +++ b/easybuild/easyblocks/n/nose.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/numexpr.py b/easybuild/easyblocks/n/numexpr.py index 8d222b40dd..3a6110ecdc 100644 --- a/easybuild/easyblocks/n/numexpr.py +++ b/easybuild/easyblocks/n/numexpr.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Ghent University +# Copyright 2019-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/numpy.py b/easybuild/easyblocks/n/numpy.py index e1b92eca55..c12e7da486 100644 --- a/easybuild/easyblocks/n/numpy.py +++ b/easybuild/easyblocks/n/numpy.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/n/nvhpc.py b/easybuild/easyblocks/n/nvhpc.py index b70bfb66f9..9dd1415437 100644 --- a/easybuild/easyblocks/n/nvhpc.py +++ b/easybuild/easyblocks/n/nvhpc.py @@ -1,6 +1,6 @@ ## -# Copyright 2015-2024 Bart Oldeman -# Copyright 2016-2024 Forschungszentrum Juelich +# Copyright 2015-2025 Bart Oldeman +# Copyright 2016-2025 Forschungszentrum Juelich # # This file is triple-licensed under GPLv2 (see below), MIT, and # BSD three-clause licenses. diff --git a/easybuild/easyblocks/n/nwchem.py b/easybuild/easyblocks/n/nwchem.py index fb8e78b9a4..6e13d55189 100644 --- a/easybuild/easyblocks/n/nwchem.py +++ b/easybuild/easyblocks/n/nwchem.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/ocaml.py b/easybuild/easyblocks/o/ocaml.py index 257e83ed61..973e4b1937 100644 --- a/easybuild/easyblocks/o/ocaml.py +++ b/easybuild/easyblocks/o/ocaml.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/octave.py b/easybuild/easyblocks/o/octave.py index f342303bb7..c6eac52a7f 100644 --- a/easybuild/easyblocks/o/octave.py +++ b/easybuild/easyblocks/o/octave.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/openbabel.py b/easybuild/easyblocks/o/openbabel.py index 420d54c9ce..3e9b90e62e 100644 --- a/easybuild/easyblocks/o/openbabel.py +++ b/easybuild/easyblocks/o/openbabel.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/opencv.py b/easybuild/easyblocks/o/opencv.py index b777f3bec3..6293b8296f 100644 --- a/easybuild/easyblocks/o/opencv.py +++ b/easybuild/easyblocks/o/opencv.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/openfoam.py b/easybuild/easyblocks/o/openfoam.py index 4ffa5e98d6..cad2acd18d 100644 --- a/easybuild/easyblocks/o/openfoam.py +++ b/easybuild/easyblocks/o/openfoam.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/openifs.py b/easybuild/easyblocks/o/openifs.py index f9aa48dfeb..1c2c195725 100644 --- a/easybuild/easyblocks/o/openifs.py +++ b/easybuild/easyblocks/o/openifs.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/openmpi.py b/easybuild/easyblocks/o/openmpi.py index ebdbd02391..55128d389f 100644 --- a/easybuild/easyblocks/o/openmpi.py +++ b/easybuild/easyblocks/o/openmpi.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Ghent University +# Copyright 2019-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/openssl.py b/easybuild/easyblocks/o/openssl.py index 09daefcae7..fcdceffa1c 100644 --- a/easybuild/easyblocks/o/openssl.py +++ b/easybuild/easyblocks/o/openssl.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/openssl_wrapper.py b/easybuild/easyblocks/o/openssl_wrapper.py index 780fc26466..b0b236c4d5 100644 --- a/easybuild/easyblocks/o/openssl_wrapper.py +++ b/easybuild/easyblocks/o/openssl_wrapper.py @@ -1,5 +1,5 @@ ## -# Copyright 2021-2024 Vrije Universiteit Brussel +# Copyright 2021-2025 Vrije Universiteit Brussel # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/optislang.py b/easybuild/easyblocks/o/optislang.py index 84b335e5fd..43843be8cb 100644 --- a/easybuild/easyblocks/o/optislang.py +++ b/easybuild/easyblocks/o/optislang.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/o/orca.py b/easybuild/easyblocks/o/orca.py index 672c321860..9d645d52ae 100644 --- a/easybuild/easyblocks/o/orca.py +++ b/easybuild/easyblocks/o/orca.py @@ -1,5 +1,5 @@ ## -# Copyright 2021-2024 Vrije Universiteit Brussel +# Copyright 2021-2025 Vrije Universiteit Brussel # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/palm.py b/easybuild/easyblocks/p/palm.py index 8e91eeb346..3d732708c8 100644 --- a/easybuild/easyblocks/p/palm.py +++ b/easybuild/easyblocks/p/palm.py @@ -1,5 +1,5 @@ ## -# Copyright 2023-2024 Ghent University +# Copyright 2023-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/paraver.py b/easybuild/easyblocks/p/paraver.py index 4e4b9c6390..7faa351bf2 100644 --- a/easybuild/easyblocks/p/paraver.py +++ b/easybuild/easyblocks/p/paraver.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/parmetis.py b/easybuild/easyblocks/p/parmetis.py index a728784cce..70490775d5 100644 --- a/easybuild/easyblocks/p/parmetis.py +++ b/easybuild/easyblocks/p/parmetis.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pasha.py b/easybuild/easyblocks/p/pasha.py index 9634aad21f..3a6b9d9082 100644 --- a/easybuild/easyblocks/p/pasha.py +++ b/easybuild/easyblocks/p/pasha.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pbdmpi.py b/easybuild/easyblocks/p/pbdmpi.py index d1f9b1b6f9..e0f346c691 100644 --- a/easybuild/easyblocks/p/pbdmpi.py +++ b/easybuild/easyblocks/p/pbdmpi.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pbdslap.py b/easybuild/easyblocks/p/pbdslap.py index 1337c02f60..d721dc855c 100644 --- a/easybuild/easyblocks/p/pbdslap.py +++ b/easybuild/easyblocks/p/pbdslap.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pdt.py b/easybuild/easyblocks/p/pdt.py index fc49b71047..1fbc109e2f 100644 --- a/easybuild/easyblocks/p/pdt.py +++ b/easybuild/easyblocks/p/pdt.py @@ -1,7 +1,7 @@ ## # This is an easyblock for EasyBuild, see https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2015-2024 Juelich Supercomputing Centre, Germany +# Copyright:: Copyright 2015-2025 Juelich Supercomputing Centre, Germany # Authors:: Bernd Mohr # Markus Geimer # License:: 3-clause BSD diff --git a/easybuild/easyblocks/p/perl.py b/easybuild/easyblocks/p/perl.py index c4c0d430eb..5e6594e6d7 100644 --- a/easybuild/easyblocks/p/perl.py +++ b/easybuild/easyblocks/p/perl.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/petsc.py b/easybuild/easyblocks/p/petsc.py index cb1d66f17b..64ac071a6d 100644 --- a/easybuild/easyblocks/p/petsc.py +++ b/easybuild/easyblocks/p/petsc.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pgi.py b/easybuild/easyblocks/p/pgi.py index e8ad2b6670..b4886b2ad3 100644 --- a/easybuild/easyblocks/p/pgi.py +++ b/easybuild/easyblocks/p/pgi.py @@ -1,6 +1,6 @@ ## -# Copyright 2015-2024 Bart Oldeman -# Copyright 2016-2024 Forschungszentrum Juelich +# Copyright 2015-2025 Bart Oldeman +# Copyright 2016-2025 Forschungszentrum Juelich # # This file is triple-licensed under GPLv2 (see below), MIT, and # BSD three-clause licenses. diff --git a/easybuild/easyblocks/p/picard.py b/easybuild/easyblocks/p/picard.py index 15481fd40e..b0cffc9124 100644 --- a/easybuild/easyblocks/p/picard.py +++ b/easybuild/easyblocks/p/picard.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pplacer.py b/easybuild/easyblocks/p/pplacer.py index 3972d0e975..30bd94e5fe 100644 --- a/easybuild/easyblocks/p/pplacer.py +++ b/easybuild/easyblocks/p/pplacer.py @@ -1,5 +1,5 @@ ## -# Copyright 2016-2024 Ghent University +# Copyright 2016-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/primer3.py b/easybuild/easyblocks/p/primer3.py index e2776b8e59..ab745318ad 100644 --- a/easybuild/easyblocks/p/primer3.py +++ b/easybuild/easyblocks/p/primer3.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/psi.py b/easybuild/easyblocks/p/psi.py index 1779b59ec7..efdece3752 100644 --- a/easybuild/easyblocks/p/psi.py +++ b/easybuild/easyblocks/p/psi.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/psmpi.py b/easybuild/easyblocks/p/psmpi.py index 9d91dd09d3..8e9af9644e 100644 --- a/easybuild/easyblocks/p/psmpi.py +++ b/easybuild/easyblocks/p/psmpi.py @@ -1,5 +1,5 @@ ## -# Copyright 2016-2024 Ghent University, Forschungszentrum Juelich +# Copyright 2016-2025 Ghent University, Forschungszentrum Juelich # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pybind11.py b/easybuild/easyblocks/p/pybind11.py index e9c4e3df1e..6f9a420361 100644 --- a/easybuild/easyblocks/p/pybind11.py +++ b/easybuild/easyblocks/p/pybind11.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pyquante.py b/easybuild/easyblocks/p/pyquante.py index a7e93b35a2..5f13556281 100644 --- a/easybuild/easyblocks/p/pyquante.py +++ b/easybuild/easyblocks/p/pyquante.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/python.py b/easybuild/easyblocks/p/python.py index 3bbdfd709c..9856485191 100644 --- a/easybuild/easyblocks/p/python.py +++ b/easybuild/easyblocks/p/python.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/python_meep.py b/easybuild/easyblocks/p/python_meep.py index 3ae46d996b..e52b80b9dc 100644 --- a/easybuild/easyblocks/p/python_meep.py +++ b/easybuild/easyblocks/p/python_meep.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pytorch.py b/easybuild/easyblocks/p/pytorch.py index 5599c9f2dc..13136e63e7 100644 --- a/easybuild/easyblocks/p/pytorch.py +++ b/easybuild/easyblocks/p/pytorch.py @@ -1,5 +1,5 @@ ## -# Copyright 2020-2024 Ghent University +# Copyright 2020-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/p/pyzmq.py b/easybuild/easyblocks/p/pyzmq.py index 34911c3d56..b0f18ebb0b 100644 --- a/easybuild/easyblocks/p/pyzmq.py +++ b/easybuild/easyblocks/p/pyzmq.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/q/qscintilla.py b/easybuild/easyblocks/q/qscintilla.py index 0034c35967..c849dabd65 100644 --- a/easybuild/easyblocks/q/qscintilla.py +++ b/easybuild/easyblocks/q/qscintilla.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/q/qt.py b/easybuild/easyblocks/q/qt.py index 6da172414a..f2a3132223 100644 --- a/easybuild/easyblocks/q/qt.py +++ b/easybuild/easyblocks/q/qt.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/q/quantumespresso.py b/easybuild/easyblocks/q/quantumespresso.py index d5607d1581..91769e5111 100644 --- a/easybuild/easyblocks/q/quantumespresso.py +++ b/easybuild/easyblocks/q/quantumespresso.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/__init__.py b/easybuild/easyblocks/r/__init__.py index 6d31738209..c61a11ef49 100644 --- a/easybuild/easyblocks/r/__init__.py +++ b/easybuild/easyblocks/r/__init__.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/r.py b/easybuild/easyblocks/r/r.py index 8151df81a6..58087c0272 100644 --- a/easybuild/easyblocks/r/r.py +++ b/easybuild/easyblocks/r/r.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/repeatmasker.py b/easybuild/easyblocks/r/repeatmasker.py index 29e62abcae..c6bfe2cfcb 100644 --- a/easybuild/easyblocks/r/repeatmasker.py +++ b/easybuild/easyblocks/r/repeatmasker.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/repeatmodeler.py b/easybuild/easyblocks/r/repeatmodeler.py index 45bb1a4996..1d8fcdbb75 100644 --- a/easybuild/easyblocks/r/repeatmodeler.py +++ b/easybuild/easyblocks/r/repeatmodeler.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/reticulate.py b/easybuild/easyblocks/r/reticulate.py index 99c4ca3aee..215d4dcef2 100644 --- a/easybuild/easyblocks/r/reticulate.py +++ b/easybuild/easyblocks/r/reticulate.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/rmpi.py b/easybuild/easyblocks/r/rmpi.py index a0f248828d..2fb325cf44 100644 --- a/easybuild/easyblocks/r/rmpi.py +++ b/easybuild/easyblocks/r/rmpi.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/root.py b/easybuild/easyblocks/r/root.py index ddaed5761d..e255cf5835 100644 --- a/easybuild/easyblocks/r/root.py +++ b/easybuild/easyblocks/r/root.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/rosetta.py b/easybuild/easyblocks/r/rosetta.py index 973b5ada96..559acbc9e1 100644 --- a/easybuild/easyblocks/r/rosetta.py +++ b/easybuild/easyblocks/r/rosetta.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/rserve.py b/easybuild/easyblocks/r/rserve.py index c9fd24716d..a6a1a5f0bf 100644 --- a/easybuild/easyblocks/r/rserve.py +++ b/easybuild/easyblocks/r/rserve.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/ruby.py b/easybuild/easyblocks/r/ruby.py index a7ba02930b..48b39a9ac2 100644 --- a/easybuild/easyblocks/r/ruby.py +++ b/easybuild/easyblocks/r/ruby.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/r/rust.py b/easybuild/easyblocks/r/rust.py index 5c66d71239..b34957ec29 100644 --- a/easybuild/easyblocks/r/rust.py +++ b/easybuild/easyblocks/r/rust.py @@ -1,5 +1,5 @@ ## -# Copyright 2023-2024 Ghent University +# Copyright 2023-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/samcef.py b/easybuild/easyblocks/s/samcef.py index 6874863c1c..c8d33d375a 100644 --- a/easybuild/easyblocks/s/samcef.py +++ b/easybuild/easyblocks/s/samcef.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/samtools.py b/easybuild/easyblocks/s/samtools.py index 3f613be14b..3e83da067a 100644 --- a/easybuild/easyblocks/s/samtools.py +++ b/easybuild/easyblocks/s/samtools.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/s/sas.py b/easybuild/easyblocks/s/sas.py index ce0df1d3b9..9c9f234411 100644 --- a/easybuild/easyblocks/s/sas.py +++ b/easybuild/easyblocks/s/sas.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/scalapack.py b/easybuild/easyblocks/s/scalapack.py index ff0d3fadf0..a9dfac654e 100644 --- a/easybuild/easyblocks/s/scalapack.py +++ b/easybuild/easyblocks/s/scalapack.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/scalasca1.py b/easybuild/easyblocks/s/scalasca1.py index 641deb4ee7..9e63cf6ab1 100644 --- a/easybuild/easyblocks/s/scalasca1.py +++ b/easybuild/easyblocks/s/scalasca1.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/scipion.py b/easybuild/easyblocks/s/scipion.py index 5d11ff1992..801f1583b3 100644 --- a/easybuild/easyblocks/s/scipion.py +++ b/easybuild/easyblocks/s/scipion.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Ghent University +# Copyright 2019-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/scipy.py b/easybuild/easyblocks/s/scipy.py index 4d2d011885..5213145d6a 100644 --- a/easybuild/easyblocks/s/scipy.py +++ b/easybuild/easyblocks/s/scipy.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/score_p.py b/easybuild/easyblocks/s/score_p.py index 9450004440..ac0d974e44 100644 --- a/easybuild/easyblocks/s/score_p.py +++ b/easybuild/easyblocks/s/score_p.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/scotch.py b/easybuild/easyblocks/s/scotch.py index 600afb8753..e966ac59e5 100644 --- a/easybuild/easyblocks/s/scotch.py +++ b/easybuild/easyblocks/s/scotch.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/sepp.py b/easybuild/easyblocks/s/sepp.py index 506ff2c539..b4e6a260ff 100644 --- a/easybuild/easyblocks/s/sepp.py +++ b/easybuild/easyblocks/s/sepp.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/shrimp.py b/easybuild/easyblocks/s/shrimp.py index 9c28875e35..bc916ab1db 100644 --- a/easybuild/easyblocks/s/shrimp.py +++ b/easybuild/easyblocks/s/shrimp.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/siesta.py b/easybuild/easyblocks/s/siesta.py index a6f9b491e2..410befa14f 100644 --- a/easybuild/easyblocks/s/siesta.py +++ b/easybuild/easyblocks/s/siesta.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/slepc.py b/easybuild/easyblocks/s/slepc.py index 1c15a5537d..b6a9cb74ae 100644 --- a/easybuild/easyblocks/s/slepc.py +++ b/easybuild/easyblocks/s/slepc.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/snphylo.py b/easybuild/easyblocks/s/snphylo.py index 0826477418..a0c9a28f5e 100644 --- a/easybuild/easyblocks/s/snphylo.py +++ b/easybuild/easyblocks/s/snphylo.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/soapdenovo.py b/easybuild/easyblocks/s/soapdenovo.py index 79c9176c37..2ace3d66c1 100644 --- a/easybuild/easyblocks/s/soapdenovo.py +++ b/easybuild/easyblocks/s/soapdenovo.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/s/star_ccm.py b/easybuild/easyblocks/s/star_ccm.py index 9acff54a65..9d5037e38d 100644 --- a/easybuild/easyblocks/s/star_ccm.py +++ b/easybuild/easyblocks/s/star_ccm.py @@ -1,5 +1,5 @@ ## -# Copyright 2018-2024 Ghent University +# Copyright 2018-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/stata.py b/easybuild/easyblocks/s/stata.py index 25e9e6c0da..d10fd37432 100644 --- a/easybuild/easyblocks/s/stata.py +++ b/easybuild/easyblocks/s/stata.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/suitesparse.py b/easybuild/easyblocks/s/suitesparse.py index 410f8ee257..160e1f37a5 100644 --- a/easybuild/easyblocks/s/suitesparse.py +++ b/easybuild/easyblocks/s/suitesparse.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/superlu.py b/easybuild/easyblocks/s/superlu.py index 060272073f..86e338bcab 100644 --- a/easybuild/easyblocks/s/superlu.py +++ b/easybuild/easyblocks/s/superlu.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University, University of Luxembourg +# Copyright 2009-2025 Ghent University, University of Luxembourg # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/swig.py b/easybuild/easyblocks/s/swig.py index ed641ffe68..bb24f1030d 100644 --- a/easybuild/easyblocks/s/swig.py +++ b/easybuild/easyblocks/s/swig.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/s/sympy.py b/easybuild/easyblocks/s/sympy.py index 2f8fef6433..ebbaf4e585 100644 --- a/easybuild/easyblocks/s/sympy.py +++ b/easybuild/easyblocks/s/sympy.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tau.py b/easybuild/easyblocks/t/tau.py index 2cb7598656..8eff5dbcf1 100644 --- a/easybuild/easyblocks/t/tau.py +++ b/easybuild/easyblocks/t/tau.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tbb.py b/easybuild/easyblocks/t/tbb.py index 4fdbcc4fbe..e41279b801 100644 --- a/easybuild/easyblocks/t/tbb.py +++ b/easybuild/easyblocks/t/tbb.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tensorflow.py b/easybuild/easyblocks/t/tensorflow.py index c72aec1ea1..f3195e5e1c 100644 --- a/easybuild/easyblocks/t/tensorflow.py +++ b/easybuild/easyblocks/t/tensorflow.py @@ -1,5 +1,5 @@ ## -# Copyright 2017-2024 Ghent University +# Copyright 2017-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tensorflow_compression.py b/easybuild/easyblocks/t/tensorflow_compression.py index 108ba59cc3..203068dcb9 100644 --- a/easybuild/easyblocks/t/tensorflow_compression.py +++ b/easybuild/easyblocks/t/tensorflow_compression.py @@ -1,5 +1,5 @@ ## -# Copyright 2017-2024 Ghent University +# Copyright 2017-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tensorrt.py b/easybuild/easyblocks/t/tensorrt.py index 52eeef2c6f..2e066e510c 100644 --- a/easybuild/easyblocks/t/tensorrt.py +++ b/easybuild/easyblocks/t/tensorrt.py @@ -1,5 +1,5 @@ ## -# Copyright 2017-2024 Ghent University +# Copyright 2017-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tinker.py b/easybuild/easyblocks/t/tinker.py index 24adb95a00..95a3f23506 100644 --- a/easybuild/easyblocks/t/tinker.py +++ b/easybuild/easyblocks/t/tinker.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tkinter.py b/easybuild/easyblocks/t/tkinter.py index 3588836d5d..28c2ccf5d3 100644 --- a/easybuild/easyblocks/t/tkinter.py +++ b/easybuild/easyblocks/t/tkinter.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/torchvision.py b/easybuild/easyblocks/t/torchvision.py index 378b5525a8..08a83c6758 100644 --- a/easybuild/easyblocks/t/torchvision.py +++ b/easybuild/easyblocks/t/torchvision.py @@ -1,5 +1,5 @@ ## -# Copyright 2021-2024 Ghent University +# Copyright 2021-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/tornado.py b/easybuild/easyblocks/t/tornado.py index 5d1de12dcb..1ade72c987 100644 --- a/easybuild/easyblocks/t/tornado.py +++ b/easybuild/easyblocks/t/tornado.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/totalview.py b/easybuild/easyblocks/t/totalview.py index 3ef4bc7c1f..984366a6cd 100644 --- a/easybuild/easyblocks/t/totalview.py +++ b/easybuild/easyblocks/t/totalview.py @@ -1,8 +1,8 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA -# Copyright:: Copyright 2016-2024 Forschungszentrum Juelich +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2016-2025 Forschungszentrum Juelich # Authors:: Fotis Georgatos # Authors:: Damian Alvarez # License:: MIT/GPL diff --git a/easybuild/easyblocks/t/trilinos.py b/easybuild/easyblocks/t/trilinos.py index 0231184a60..f73c7bf1ff 100644 --- a/easybuild/easyblocks/t/trilinos.py +++ b/easybuild/easyblocks/t/trilinos.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/t/trinity.py b/easybuild/easyblocks/t/trinity.py index 149a16e3a2..82d5326f8d 100644 --- a/easybuild/easyblocks/t/trinity.py +++ b/easybuild/easyblocks/t/trinity.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/u/ucx_plugins.py b/easybuild/easyblocks/u/ucx_plugins.py index 3cba0e277c..98e46b9ec5 100644 --- a/easybuild/easyblocks/u/ucx_plugins.py +++ b/easybuild/easyblocks/u/ucx_plugins.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/u/ufc.py b/easybuild/easyblocks/u/ufc.py index cbf087b08a..ada9664583 100644 --- a/easybuild/easyblocks/u/ufc.py +++ b/easybuild/easyblocks/u/ufc.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/v/velvet.py b/easybuild/easyblocks/v/velvet.py index 553037277c..5d041ac782 100644 --- a/easybuild/easyblocks/v/velvet.py +++ b/easybuild/easyblocks/v/velvet.py @@ -1,7 +1,7 @@ ## # This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild # -# Copyright:: Copyright 2012-2024 Uni.Lu/LCSB, NTUA +# Copyright:: Copyright 2012-2025 Uni.Lu/LCSB, NTUA # Authors:: Cedric Laczny , Fotis Georgatos , Kenneth Hoste # License:: MIT/GPL # $Id$ diff --git a/easybuild/easyblocks/v/vep.py b/easybuild/easyblocks/v/vep.py index bea0d80a8b..a15643cd7e 100644 --- a/easybuild/easyblocks/v/vep.py +++ b/easybuild/easyblocks/v/vep.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/v/vmd.py b/easybuild/easyblocks/v/vmd.py index e85bebfe10..9525b548bb 100644 --- a/easybuild/easyblocks/v/vmd.py +++ b/easybuild/easyblocks/v/vmd.py @@ -1,6 +1,6 @@ ## -# Copyright 2009-2024 Ghent University -# Copyright 2015-2024 Stanford University +# Copyright 2009-2025 Ghent University +# Copyright 2015-2025 Stanford University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/v/vsc_tools.py b/easybuild/easyblocks/v/vsc_tools.py index 17f91ad204..795fd49b04 100644 --- a/easybuild/easyblocks/v/vsc_tools.py +++ b/easybuild/easyblocks/v/vsc_tools.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/v/vtune.py b/easybuild/easyblocks/v/vtune.py index 94e6ce71fb..5a81bc55ca 100644 --- a/easybuild/easyblocks/v/vtune.py +++ b/easybuild/easyblocks/v/vtune.py @@ -1,5 +1,5 @@ # # -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/w/wien2k.py b/easybuild/easyblocks/w/wien2k.py index 26a50cb4d6..fe70ce7e42 100644 --- a/easybuild/easyblocks/w/wien2k.py +++ b/easybuild/easyblocks/w/wien2k.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/w/wps.py b/easybuild/easyblocks/w/wps.py index 73f6359899..f07f693b40 100644 --- a/easybuild/easyblocks/w/wps.py +++ b/easybuild/easyblocks/w/wps.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/w/wrf.py b/easybuild/easyblocks/w/wrf.py index 3c9c76f18e..acfcc68e55 100644 --- a/easybuild/easyblocks/w/wrf.py +++ b/easybuild/easyblocks/w/wrf.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/w/wrf_fire.py b/easybuild/easyblocks/w/wrf_fire.py index 740b33581e..5cc55d33ae 100644 --- a/easybuild/easyblocks/w/wrf_fire.py +++ b/easybuild/easyblocks/w/wrf_fire.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/w/wxpython.py b/easybuild/easyblocks/w/wxpython.py index 4df68fc0a9..3e1e055101 100644 --- a/easybuild/easyblocks/w/wxpython.py +++ b/easybuild/easyblocks/w/wxpython.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/x/xalt.py b/easybuild/easyblocks/x/xalt.py index 28a4e0d294..909b7e49cb 100644 --- a/easybuild/easyblocks/x/xalt.py +++ b/easybuild/easyblocks/x/xalt.py @@ -1,5 +1,5 @@ ## -# Copyright 2020-2024 NVIDIA +# Copyright 2020-2025 NVIDIA # # This file is triple-licensed under GPLv2 (see below), MIT, and # BSD three-clause licenses. diff --git a/easybuild/easyblocks/x/xcrysden.py b/easybuild/easyblocks/x/xcrysden.py index eb13ef7593..e43cdb1515 100644 --- a/easybuild/easyblocks/x/xcrysden.py +++ b/easybuild/easyblocks/x/xcrysden.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/x/xmipp.py b/easybuild/easyblocks/x/xmipp.py index 9a0035907e..bad9e35ec1 100644 --- a/easybuild/easyblocks/x/xmipp.py +++ b/easybuild/easyblocks/x/xmipp.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/easybuild/easyblocks/x/xml.py b/easybuild/easyblocks/x/xml.py index bfca761060..5c617da27b 100644 --- a/easybuild/easyblocks/x/xml.py +++ b/easybuild/easyblocks/x/xml.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/setup.py b/setup.py index f917516a64..98128f63a8 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/test/__init__.py b/test/__init__.py index 8ab7c0ed70..c084153bcc 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -1,5 +1,5 @@ ## -# Copyright 2009-2024 Ghent University +# Copyright 2009-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/test/easyblocks/easyblock_specific.py b/test/easyblocks/easyblock_specific.py index e17822318e..306cbcfaa3 100644 --- a/test/easyblocks/easyblock_specific.py +++ b/test/easyblocks/easyblock_specific.py @@ -1,5 +1,5 @@ ## -# Copyright 2019-2024 Ghent University +# Copyright 2019-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/test/easyblocks/general.py b/test/easyblocks/general.py index fdae324a1b..8858f9980a 100644 --- a/test/easyblocks/general.py +++ b/test/easyblocks/general.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/test/easyblocks/init_easyblocks.py b/test/easyblocks/init_easyblocks.py index 35089902d6..ec631968d9 100644 --- a/test/easyblocks/init_easyblocks.py +++ b/test/easyblocks/init_easyblocks.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/test/easyblocks/module.py b/test/easyblocks/module.py index 122e1285ce..026c3b3583 100644 --- a/test/easyblocks/module.py +++ b/test/easyblocks/module.py @@ -1,5 +1,5 @@ ## -# Copyright 2015-2024 Ghent University +# Copyright 2015-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), diff --git a/test/easyblocks/suite.py b/test/easyblocks/suite.py index 17dc886ea8..be0f6a5c09 100644 --- a/test/easyblocks/suite.py +++ b/test/easyblocks/suite.py @@ -1,6 +1,6 @@ #!/usr/bin/python ## -# Copyright 2012-2024 Ghent University +# Copyright 2012-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), From 2c9311614c283071327f7ed5dd0ffc85f52969d3 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Thu, 2 Jan 2025 11:36:46 +0000 Subject: [PATCH 76/87] switch default to `install_pip=True` in `python.py` --- easybuild/easyblocks/p/python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/p/python.py b/easybuild/easyblocks/p/python.py index 824a44dd11..65d74e4889 100644 --- a/easybuild/easyblocks/p/python.py +++ b/easybuild/easyblocks/p/python.py @@ -124,7 +124,7 @@ def extra_options(): """Add extra config options specific to Python.""" extra_vars = { 'ebpythonprefixes': [True, "Create sitecustomize.py and allow use of $EBPYTHONPREFIXES", CUSTOM], - 'install_pip': [False, + 'install_pip': [True, "Use the ensurepip module (Python 2.7.9+, 3.4+) to install the bundled versions " "of pip and setuptools into Python. You _must_ then use pip for upgrading " "pip & setuptools by installing newer versions as extensions!", From 0f03eb2a51e2d05a796dc5f576191fa5a691aeb7 Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Thu, 2 Jan 2025 11:47:33 +0000 Subject: [PATCH 77/87] tests --- test/easyblocks/init_easyblocks.py | 3 +++ test/easyblocks/module.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/test/easyblocks/init_easyblocks.py b/test/easyblocks/init_easyblocks.py index 97f1bccc4e..d54e4d35b1 100644 --- a/test/easyblocks/init_easyblocks.py +++ b/test/easyblocks/init_easyblocks.py @@ -244,6 +244,9 @@ def innertest(self): elif easyblock_fn == 'paraver.py': # custom easyblock for Paraver requires version >= 4.7 innertest = make_inner_test(easyblock, version='4.8') + elif easyblock_fn == 'python.py': + # custom easyblock for Python (ensurepip) requires version >= 3.4.0 + innertest = make_inner_test(easyblock, version='3.4.0') elif easyblock_fn == 'torchvision.py': # torchvision easyblock requires that PyTorch is listed as dependency innertest = make_inner_test(easyblock, name='torchvision', deps=[('PyTorch', '1.12.1')]) diff --git a/test/easyblocks/module.py b/test/easyblocks/module.py index a4d2874305..f6bffd2c60 100644 --- a/test/easyblocks/module.py +++ b/test/easyblocks/module.py @@ -471,6 +471,9 @@ def innertest(self): elif eb_fn == 'paraver.py': # custom easyblock for Paraver requires version >= 4.7 innertest = make_inner_test(easyblock, name='Paraver', version='4.8') + elif easyblock_fn == 'python.py': + # custom easyblock for Python (ensurepip) requires version >= 3.4.0 + innertest = make_inner_test(easyblock, version='3.4.0') elif eb_fn == 'torchvision.py': # torchvision easyblock requires that PyTorch is listed as dependency extra_txt = "dependencies = [('PyTorch', '1.12.1')]" From ec121030c8abbe03186d4d90190bce87196ee79f Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Thu, 2 Jan 2025 11:48:12 +0000 Subject: [PATCH 78/87] eb_fn --- test/easyblocks/module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/easyblocks/module.py b/test/easyblocks/module.py index f6bffd2c60..d403363b01 100644 --- a/test/easyblocks/module.py +++ b/test/easyblocks/module.py @@ -471,7 +471,7 @@ def innertest(self): elif eb_fn == 'paraver.py': # custom easyblock for Paraver requires version >= 4.7 innertest = make_inner_test(easyblock, name='Paraver', version='4.8') - elif easyblock_fn == 'python.py': + elif eb_fn == 'python.py': # custom easyblock for Python (ensurepip) requires version >= 3.4.0 innertest = make_inner_test(easyblock, version='3.4.0') elif eb_fn == 'torchvision.py': From c0ba76b948c44312ba89df999fcfeb4fd2838455 Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:09:21 +0000 Subject: [PATCH 79/87] and tkinter --- test/easyblocks/init_easyblocks.py | 2 +- test/easyblocks/module.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/easyblocks/init_easyblocks.py b/test/easyblocks/init_easyblocks.py index d54e4d35b1..9ed4b92a7c 100644 --- a/test/easyblocks/init_easyblocks.py +++ b/test/easyblocks/init_easyblocks.py @@ -244,7 +244,7 @@ def innertest(self): elif easyblock_fn == 'paraver.py': # custom easyblock for Paraver requires version >= 4.7 innertest = make_inner_test(easyblock, version='4.8') - elif easyblock_fn == 'python.py': + elif easyblock_fn in ['python.py', 'tkinter.py']: # custom easyblock for Python (ensurepip) requires version >= 3.4.0 innertest = make_inner_test(easyblock, version='3.4.0') elif easyblock_fn == 'torchvision.py': diff --git a/test/easyblocks/module.py b/test/easyblocks/module.py index d403363b01..b67bd47f0e 100644 --- a/test/easyblocks/module.py +++ b/test/easyblocks/module.py @@ -471,7 +471,7 @@ def innertest(self): elif eb_fn == 'paraver.py': # custom easyblock for Paraver requires version >= 4.7 innertest = make_inner_test(easyblock, name='Paraver', version='4.8') - elif eb_fn == 'python.py': + elif eb_fn in ['python.py', 'tkinter.py']: # custom easyblock for Python (ensurepip) requires version >= 3.4.0 innertest = make_inner_test(easyblock, version='3.4.0') elif eb_fn == 'torchvision.py': From bfe295f883d55e0afd95b36d8459359c3ef13643 Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:13:26 +0000 Subject: [PATCH 80/87] copy/paste fail --- test/easyblocks/module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/easyblocks/module.py b/test/easyblocks/module.py index b67bd47f0e..5ef7175a64 100644 --- a/test/easyblocks/module.py +++ b/test/easyblocks/module.py @@ -473,7 +473,7 @@ def innertest(self): innertest = make_inner_test(easyblock, name='Paraver', version='4.8') elif eb_fn in ['python.py', 'tkinter.py']: # custom easyblock for Python (ensurepip) requires version >= 3.4.0 - innertest = make_inner_test(easyblock, version='3.4.0') + innertest = make_inner_test(easyblock, name=eb_fn.replace('_', '-')[:-3], version='3.4.0') elif eb_fn == 'torchvision.py': # torchvision easyblock requires that PyTorch is listed as dependency extra_txt = "dependencies = [('PyTorch', '1.12.1')]" From 05bda72c2579468cf3ba5c92c66a9ae10f260c17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Sat, 7 Dec 2024 20:44:45 +0100 Subject: [PATCH 81/87] Enhance Score-P EasyBlock for future releases and better oneAPI support. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The following changes are implemented: - Properly handle Qt5 & Qt6 dependencies for CubeGUI, not only Qt4 - Remove `--with-cube` option, as this is not supported by Score-P 6.0+ - Add dependency handling for GOTCHA, as this option will likely be added with Score-P 9.0+ - Switch to `--with-nocross-compiler-suite=oneapi` if Intel toolchain uses oneAPI compilers (checked via 'oneapi' toolchain option). This allows building Score-P with oneAPI 2024.0.0 and newer. Signed-off-by: Jan André Reuter --- easybuild/easyblocks/s/score_p.py | 40 +++++++++++++++++++------------ 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/easybuild/easyblocks/s/score_p.py b/easybuild/easyblocks/s/score_p.py index 9450004440..90d00619d0 100644 --- a/easybuild/easyblocks/s/score_p.py +++ b/easybuild/easyblocks/s/score_p.py @@ -24,13 +24,14 @@ ## """ EasyBuild support for software using the Score-P configuration style (e.g., Cube, OTF2, Scalasca, and Score-P), -implemented as an easyblock. +implemented as an EasyBlock. @author: Kenneth Hoste (Ghent University) @author: Bernd Mohr (Juelich Supercomputing Centre) @author: Markus Geimer (Juelich Supercomputing Centre) @author: Alexander Grund (TU Dresden) @author: Christian Feld (Juelich Supercomputing Centre) +@author: Jan Andre Reuter (Juelich Supercomputing Centre) """ import os @@ -48,11 +49,10 @@ class EB_Score_minus_P(ConfigureMake): Support for building and installing software using the Score-P configuration style (e.g., Cube, OTF2, Scalasca, and Score-P). """ - def configure_step(self, *args, **kwargs): """Configure the build, set configure options for compiler, MPI and dependencies.""" - if LooseVersion(self.version) >= LooseVersion('8.0') and LooseVersion(self.version) < LooseVersion('8.5'): + if LooseVersion('8.0') <= LooseVersion(self.version) < LooseVersion('8.5'): # Fix an issue where the configure script would fail if certain dependencies are installed in a path # that includes "yes" or "no", see https://gitlab.com/score-p/scorep/-/issues/1008. yes_no_regex = [ @@ -71,8 +71,8 @@ def configure_step(self, *args, **kwargs): # Score-P's configure magic... unset_env_vars(['CPPFLAGS', 'LDFLAGS', 'LIBS']) - # On non-cross-compile platforms, specify compiler and MPI suite explicitly. This is much quicker and safer - # than autodetection. In Score-P build-system terms, the following platforms are considered cross-compile + # On non-cross-compile platforms, specify compiler and MPI suite explicitly. This is much quicker and safer + # than autodetection. In Score-P build-system terms, the following platforms are considered cross-compile # architectures: # # - Cray XT/XE/XK/XC series @@ -82,7 +82,8 @@ def configure_step(self, *args, **kwargs): # Of those, only Cray is supported right now. tc_fam = self.toolchain.toolchain_family() if tc_fam != toolchain.CRAYPE: - # since 2022/12 releases: --with-nocross-compiler-suite=(gcc|ibm|intel|oneapi|nvhpc|pgi|clang|aocc|amdclang) + # --with-nocross-compiler-suite=(gcc|ibm|intel|oneapi|nvhpc|pgi|clang| \ + # aocc|amdclang|cray) comp_opts = { # assume that system toolchain uses a system-provided GCC toolchain.SYSTEM: 'gcc', @@ -102,6 +103,11 @@ def configure_step(self, *args, **kwargs): } if LooseVersion(self.version) < LooseVersion(nvhpc_since.get(self.name, '0')): comp_opts[toolchain.NVHPC] = 'pgi' + # Switch to oneAPI for toolchains using oneAPI variants as default. + # This may result in installations without Fortran compiler instrumentation support, + # if this is chosen before 2024.0.0, as prior versions did not support the required flags. + if self.toolchain.options.get('oneapi', None) is True: + comp_opts[toolchain.INTELCOMP] = 'oneapi' comp_fam = self.toolchain.comp_family() if comp_fam in comp_opts: @@ -110,8 +116,9 @@ def configure_step(self, *args, **kwargs): raise EasyBuildError("Compiler family %s not supported yet (only: %s)", comp_fam, ', '.join(comp_opts.keys())) - # --with-mpi=(bullxmpi|hp|ibmpoe|intel|intel2|intelpoe|lam|mpibull2|mpich|mpich2|mpich3|openmpi| - # platform|scali|sgimpt|sun) + # --with-mpi=(bullxmpi|cray|hp|ibmpoe|intel|intel2|intel3|intelpoe|lam| + # mpibull2|mpich|mpich2|mpich3|mpich4|openmpi|openmpi3| \ + # platform|scali|sgimpt|sgimptwrapper|spectrum|sun) # # Notes: # - intel: Intel MPI v1.x (ancient & unsupported) @@ -125,12 +132,13 @@ def configure_step(self, *args, **kwargs): # safe to use 'mpich3' for all supported versions although MVAPICH2 is based on MPICH v3.x # only since v1.9b. # - # With minimal toolchains, packages using this easyblock may be built with a non-MPI toolchain (e.g., OTF2). + # With minimal toolchains, packages using this EasyBlock may be built with a non-MPI toolchain (e.g., OTF2). # In this case, skip passing the '--with-mpi' option. mpi_opts = { toolchain.INTELMPI: 'intel2', toolchain.OPENMPI: 'openmpi', - toolchain.MPICH: 'mpich3', # In EB terms, MPICH means MPICH 3.x + # In EB terms, MPICH means MPICH 3.x + toolchain.MPICH: 'mpich3', toolchain.MPICH2: 'mpich2', toolchain.MVAPICH2: 'mpich3', } @@ -151,17 +159,19 @@ def configure_step(self, *args, **kwargs): 'binutils': ['--with-libbfd-include=%s/include', '--with-libbfd-lib=%%s/%s' % get_software_libdir('binutils', fs=['libbfd.a'])], 'libunwind': ['--with-libunwind=%s'], - # Older versions use Cube - 'Cube': ['--with-cube=%s/bin'], - # Recent versions of Cube are split into CubeLib and CubeW(riter) 'CubeLib': ['--with-cubelib=%s/bin'], 'CubeWriter': ['--with-cubew=%s/bin'], 'CUDA': ['--enable-cuda', '--with-libcudart=%s'], + 'GOTCHA': ['--with-libgotcha=%s'], 'OTF2': ['--with-otf2=%s/bin'], 'OPARI2': ['--with-opari2=%s/bin'], 'PAPI': ['--with-papi-header=%s/include', '--with-papi-lib=%%s/%s' % get_software_libdir('PAPI')], 'PDT': ['--with-pdt=%s/bin'], - 'Qt': ['--with-qt=%s'], + # Used for CubeGUI. As EasyBuild splits Qt versions into separate EasyConfig names, we need to specify all + # supported Qt versions. EasyConfigs should only use one of them. + 'Qt': ['--with-qt=%s/bin'], + 'Qt5': ['--with-qt=%s/bin'], + 'Qt6': ['--with-qt=%s/bin'], 'SIONlib': ['--with-sionlib=%s/bin'], } for (dep_name, dep_opts) in deps.items(): @@ -171,7 +181,7 @@ def configure_step(self, *args, **kwargs): try: dep_opt = dep_opt % dep_root except TypeError: - pass # Ignore subtitution error when there is nothing to substitute + pass # Ignore substitution error when there is nothing to substitute self.cfg.update('configopts', dep_opt) super(EB_Score_minus_P, self).configure_step(*args, **kwargs) From 5ce8104d3514c034eee6b184092cfa599847ac6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Thu, 16 Jan 2025 16:08:23 +0100 Subject: [PATCH 82/87] score_p: Pass dependencies to EasyBlock based on EasyConfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of going through the defined dependencies in EasyBlock and searching if they are loaded, go through the explicit dependencies in the EasyConfig and pass them instead. This reduces the amount of unnecessary passed configure options. However, this now requires having 'binutils' as an explicit dependency for Score-P, since it requires having the paths for libbfd. Signed-off-by: Jan André Reuter --- easybuild/easyblocks/s/score_p.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/easybuild/easyblocks/s/score_p.py b/easybuild/easyblocks/s/score_p.py index 90d00619d0..5a5852be6b 100644 --- a/easybuild/easyblocks/s/score_p.py +++ b/easybuild/easyblocks/s/score_p.py @@ -1,5 +1,5 @@ ## -# Copyright 2013-2024 Ghent University +# Copyright 2013-2025 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), @@ -43,7 +43,6 @@ from easybuild.tools.filetools import apply_regex_substitutions from easybuild.tools.modules import get_software_root, get_software_libdir - class EB_Score_minus_P(ConfigureMake): """ Support for building and installing software using the Score-P configuration style (e.g., Cube, OTF2, Scalasca, @@ -174,14 +173,19 @@ def configure_step(self, *args, **kwargs): 'Qt6': ['--with-qt=%s/bin'], 'SIONlib': ['--with-sionlib=%s/bin'], } - for (dep_name, dep_opts) in deps.items(): - dep_root = get_software_root(dep_name) - if dep_root: - for dep_opt in dep_opts: - try: - dep_opt = dep_opt % dep_root - except TypeError: - pass # Ignore substitution error when there is nothing to substitute - self.cfg.update('configopts', dep_opt) + + # Go through all dependencies of passed EasyConfig to determine which flags to pass + # explicitly to configure. + ec_explicit_deps = [dep for dep in self.cfg.all_dependencies if dep['name'] in deps.keys()] + for dep in ec_explicit_deps: + dep_root = get_software_root(dep['name']) + configure_opts = deps[dep['name']] + for configure_opt in configure_opts: + try: + configure_opt = configure_opt % dep_root + except TypeError: + # Ignore substitution error when there is nothing to substitute + pass + self.cfg.update('configopts', configure_opt) super(EB_Score_minus_P, self).configure_step(*args, **kwargs) From 5f15ca68585744abc7f5847aaf1003601e352578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Fri, 17 Jan 2025 11:30:36 +0100 Subject: [PATCH 83/87] Add blank line for flake8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan André Reuter --- easybuild/easyblocks/s/score_p.py | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyblocks/s/score_p.py b/easybuild/easyblocks/s/score_p.py index 5a5852be6b..6d7072961e 100644 --- a/easybuild/easyblocks/s/score_p.py +++ b/easybuild/easyblocks/s/score_p.py @@ -43,6 +43,7 @@ from easybuild.tools.filetools import apply_regex_substitutions from easybuild.tools.modules import get_software_root, get_software_libdir + class EB_Score_minus_P(ConfigureMake): """ Support for building and installing software using the Score-P configuration style (e.g., Cube, OTF2, Scalasca, From d46153fceb40ec7dbce33c3bcd292932267b0ddb Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Fri, 17 Jan 2025 14:13:04 +0100 Subject: [PATCH 84/87] replace make_module_req_guess with module_load_environment in rpm easyblock --- easybuild/easyblocks/generic/rpm.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/easybuild/easyblocks/generic/rpm.py b/easybuild/easyblocks/generic/rpm.py index 070e424e57..373237b605 100644 --- a/easybuild/easyblocks/generic/rpm.py +++ b/easybuild/easyblocks/generic/rpm.py @@ -105,6 +105,11 @@ def __init__(self, *args, **kwargs): self.rebuild_rpm = False + # Add common PATH/LD_LIBRARY_PATH paths found in RPMs to module load environment + self.module_load_environment.PATH = ['usr/bin', 'sbin', 'usr/sbin'] + self.module_load_environment.LD_LIBRARY_PATH = ['usr/lib', 'usr/lib64'] + self.module_load_environment.MANPATH = ['usr/share/man'] + @staticmethod def extra_options(extra_vars=None): """Extra easyconfig parameters specific to RPMs.""" @@ -232,16 +237,3 @@ def install_step(self): symlink(realdirs[0], os.path.join(self.installdir, os.path.basename(path))) else: self.log.debug("No match found for symlink glob %s." % path) - - def make_module_req_guess(self): - """Add common PATH/LD_LIBRARY_PATH paths found in RPMs to list of guesses.""" - - guesses = super(Rpm, self).make_module_req_guess() - - guesses.update({ - 'PATH': guesses.get('PATH', []) + ['usr/bin', 'sbin', 'usr/sbin'], - 'LD_LIBRARY_PATH': guesses.get('LD_LIBRARY_PATH', []) + ['usr/lib', 'usr/lib64'], - 'MANPATH': guesses.get('MANPATH', []) + ['usr/share/man'], - }) - - return guesses From 8161f561ea3aebdbba508ef86fe5a130174a0279 Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Fri, 17 Jan 2025 14:26:24 +0100 Subject: [PATCH 85/87] generate module load environment paths from their components in rpm easyblock --- easybuild/easyblocks/generic/rpm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/easybuild/easyblocks/generic/rpm.py b/easybuild/easyblocks/generic/rpm.py index 373237b605..94ef2f0825 100644 --- a/easybuild/easyblocks/generic/rpm.py +++ b/easybuild/easyblocks/generic/rpm.py @@ -106,9 +106,9 @@ def __init__(self, *args, **kwargs): self.rebuild_rpm = False # Add common PATH/LD_LIBRARY_PATH paths found in RPMs to module load environment - self.module_load_environment.PATH = ['usr/bin', 'sbin', 'usr/sbin'] - self.module_load_environment.LD_LIBRARY_PATH = ['usr/lib', 'usr/lib64'] - self.module_load_environment.MANPATH = ['usr/share/man'] + self.module_load_environment.PATH = [os.path.join('usr', 'bin'), 'sbin', os.path.join('usr', 'sbin')] + self.module_load_environment.LD_LIBRARY_PATH = [os.path.join('usr', 'lib'), os.path.join('usr', 'lib64')] + self.module_load_environment.MANPATH = [os.path.join('usr', 'share', 'man')] @staticmethod def extra_options(extra_vars=None): From 081a90f5bcdf31be637ad5f39822b99523328331 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 17 Jan 2025 19:18:00 +0100 Subject: [PATCH 86/87] fix error reporting for unknown value of unrecognized_configure_options in ConfigureMake --- easybuild/easyblocks/generic/configuremake.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/generic/configuremake.py b/easybuild/easyblocks/generic/configuremake.py index c20563228b..d2f1367df4 100644 --- a/easybuild/easyblocks/generic/configuremake.py +++ b/easybuild/easyblocks/generic/configuremake.py @@ -335,7 +335,7 @@ def configure_step(self, cmd_prefix=''): valid_actions = (ERROR, WARN, IGNORE) # Always verify the EC param if action not in valid_actions: - raise EasyBuildError('Invalid value for `unrecognized_configure_options`: %s. Must be one of: ', + raise EasyBuildError("Invalid value for 'unrecognized_configure_options': %s. Must be one of: %s", action, ', '.join(valid_actions)) if action != IGNORE: unrecognized_options_str = 'configure: WARNING: unrecognized options:' From 2b906415285e5e7885534cd77b47c84ed54a4d61 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 20 Jan 2025 21:39:51 +0100 Subject: [PATCH 87/87] complete migration of Bundle easyblock to module_load_environment + take into account that component easyblocks may still be using make_module_req_guess --- easybuild/easyblocks/generic/bundle.py | 103 ++++++++++++++++--------- 1 file changed, 65 insertions(+), 38 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 14f5fdfa19..b07d215af9 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -317,24 +317,42 @@ def install_step(self): else: comp.run_step(step_name, [lambda x: getattr(x, '%s_step' % step_name)]) - # Update current environment with component environment to ensure stuff provided - # by this component can be picked up by installation of subsequent components - # - this is a stripped down version of EasyBlock.make_module_req for fake modules - # - once bundle installation is complete, this is handled by the generated module as usual - for mod_envar, mod_paths in comp.module_load_environment.items(): - # expand glob patterns in module load environment to existing absolute paths - mod_expand = [x for p in mod_paths for x in comp.expand_module_search_path(p, False, fake=True)] - mod_expand = nub(mod_expand) - mod_expand = [os.path.join(self.installdir, path) for path in mod_expand] - # prepend to current environment variable if new stuff added to installation - curr_env = os.getenv(mod_envar, '') - curr_paths = [path for path in curr_env.split(os.pathsep) if path] - new_paths = nub(mod_expand + curr_paths) - new_env = os.pathsep.join(new_paths) - if new_env and new_env != curr_env: - env.setvar(mod_envar, new_env) - - def make_module_req_guess(self): + if comp.make_module_req_guess.__qualname__ != 'EasyBlock.make_module_req_guess': + depr_msg = f"Easyblock used to install component {comp.name} still uses make_module_req_guess" + self.log.deprecated(depr_msg, '6.0') + # update environment to ensure stuff provided by former components can be picked up by latter components + # once the installation is finalised, this is handled by the generated module + reqs = comp.make_module_req_guess() + for envvar in reqs: + curr_val = os.getenv(envvar, '') + curr_paths = curr_val.split(os.pathsep) + for subdir in reqs[envvar]: + path = os.path.join(self.installdir, subdir) + if path not in curr_paths: + if curr_val: + new_val = '%s:%s' % (path, curr_val) + else: + new_val = path + env.setvar(envvar, new_val) + else: + # Update current environment with component environment to ensure stuff provided + # by this component can be picked up by installation of subsequent components + # - this is a stripped down version of EasyBlock.make_module_req for fake modules + # - once bundle installation is complete, this is handled by the generated module as usual + for mod_envar, mod_paths in comp.module_load_environment.items(): + # expand glob patterns in module load environment to existing absolute paths + mod_expand = [x for p in mod_paths for x in comp.expand_module_search_path(p, False)] + mod_expand = nub(mod_expand) + mod_expand = [os.path.join(self.installdir, path) for path in mod_expand] + # prepend to current environment variable if new stuff added to installation + curr_env = os.getenv(mod_envar, '') + curr_paths = [path for path in curr_env.split(os.pathsep) if path] + new_paths = nub(mod_expand + curr_paths) + new_env = os.pathsep.join(new_paths) + if new_env and new_env != curr_env: + env.setvar(mod_envar, new_env) + + def make_module_step(self, *args, **kwargs): """ Set module requirements from all components, e.g. $PATH, etc. During the install step, we only set these requirements temporarily. @@ -346,28 +364,37 @@ def make_module_req_guess(self): as this is done in the generic EasyBlock while creating the module file already. """ - # Start with the paths from the generic EasyBlock. - # If not added here, they might be missing entirely and fail sanity checks. - final_reqs = super(Bundle, self).make_module_req_guess() - for cfg, comp in self.comp_instances: self.log.info("Gathering module paths for component %s v%s", cfg['name'], cfg['version']) - reqs = comp.make_module_req_guess() - - # Try-except block to fail with an easily understandable error message. - # This should only trigger when an EasyBlock returns non-dict module requirements - # for make_module_req_guess() which should then be fixed in the components EasyBlock. - try: - for key, value in sorted(reqs.items()): - if isinstance(value, str): - value = [value] - final_reqs.setdefault(key, []) - final_reqs[key].extend(value) - except AttributeError: - raise EasyBuildError("Cannot process module requirements of bundle component %s v%s", - cfg['name'], cfg['version']) - - return final_reqs + + # take into account that easyblock used for component may not be migrated yet to module_load_environment + if comp.make_module_req_guess.__qualname__ != 'EasyBlock.make_module_req_guess': + + depr_msg = f"Easyblock used to install component {cfg['name']} still uses make_module_req_guess" + self.log.deprecated(depr_msg, '6.0') + + reqs = comp.make_module_req_guess() + + # Try-except block to fail with an easily understandable error message. + # This should only trigger when an EasyBlock returns non-dict module requirements + # for make_module_req_guess() which should then be fixed in the components EasyBlock. + try: + for key, value in sorted(reqs.items()): + if key in self.module_load_environment: + getattr(self.module_load_environment, key).extend(value) + else: + setattr(self.module_load_environment, key, value) + except AttributeError: + raise EasyBuildError("Cannot process module requirements of bundle component %s v%s", + cfg['name'], cfg['version']) + else: + for env_var_name, env_var_val in comp.module_load_environment.items(): + if env_var_name in self.module_load_environment: + getattr(self.module_load_environment, env_var_name).extend(env_var_val) + else: + setattr(self.module_load_environment, env_var_name, env_var_val) + + return super().make_module_step(*args, **kwargs) def make_module_extra(self, *args, **kwargs): """Set extra stuff in module file, e.g. $EBROOT*, $EBVERSION*, etc."""