Skip to content

Commit

Permalink
Merge pull request #2613 from easybuilders/4.5.x
Browse files Browse the repository at this point in the history
release EasyBuild v4.5.0
  • Loading branch information
boegel authored Oct 29, 2021
2 parents 0d6dceb + 313b800 commit 6667133
Show file tree
Hide file tree
Showing 31 changed files with 960 additions and 329 deletions.
44 changes: 42 additions & 2 deletions RELEASE_NOTES
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,47 @@ For more detailed information, please see the git log.

These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html.

The latest version of easybuild-easyblocks provides 241 software-specific easyblocks and 37 generic easyblocks.
The latest version of easybuild-easyblocks provides 242 software-specific easyblocks and 37 generic easyblocks.


v4.5.0 (October 29th 2021)
--------------------------

feature release

- new software-specific easyblock for imkl-FFTW (#2599)
- minor enhancements and updates, including:
- add support for installing R extensions in parallel (#2408)
- update MotionCor2 easyblock to consider to locations for built binary (#2541, #2598)
- let GROMACS runtime logs show EasyBuild was used by setting -DGMX_VERSION_STRING_OF_FORK configuration option (#2571)
- adjust qa list in WIEN2k easyblock to handle new questions + fix sanity check for v21.1 (#2572)
- enhance GCC easyblock to add support for AMD GPU offloading (#2578)
- add support for specifying subdirectory for target installation directory in CMakMake (#2579)
- enhance COMSOL easyblock to change permission on build directory during extract step (to allow using patches) (#2584)
- enhance FlexiBLAS easyblock to support building with Intel MKL (imkl) as backend (#2588)
- update MATLAB easyblock for 2021b (jre is no longer included) (#2589)
- update OpenCV easyblock to detect GTK3 and GTK2 dependencies (next to GTK+) (#2591)
- avoid that path to CUDA install directory is added to $PATH (#2593)
- enhance imkl easyblock to add support for installing with NVHPC (#2595)
- enhance PETSc easyblock to run tests in parallel (#2601)
- update ELSI easyblock to support two new external dependencies (#2602)
- add custom custom easyconfig parameter 'backends' in FlexiBLAS easyblock to specify backends (#2605)
- detect problem with compiling CPU detection code in configure output in GROMACS easyblock (#2609)
- use correct include directory for FlexiBLAS (#2610)
- various bug fixes, including:
- unset $EASYBUILD_* environment variables when running sanity check in EasyBuildMeta easyblock + also unset $MODULES_LMCONFLICT to avoid conflict when loading EasyBuild module (#2568)
- ensure that all ABAQUS components get installed for ABAQUS 2021.x (+ add support for enabling/disabling fe-safe) (#2569)
- fix subdir path in VTune easyblock for 2021.x versions + add sanity check command (#2576)
- make sure custom easyblock for installing EasyBuild respects requested version of Python (like $EB_PYTHON) (#2581)
- restore RPATH wrappers for OpenMPI sanity check (#2582)
- fix installation of libcp2k for recent CP2K versions (#2585)
- make version regex in OpenSSL wrapper easyblock less strict (version string does not always end with a letter) (#2597)
- redefine collect_exts_file_info instead of now deprecated fetch_extension_sources in OCaml easyblock (#2603)
- other changes:
- don't use --config=mkl for TensorFlow 2.4+ (#2583)
- this fixes some performance related issues for TensorFlow, see https://github.com/easybuilders/easybuild-easyblocks/issues/2577 and https://github.com/easybuilders/easybuild-easyconfigs/issues/14120
- fix support for recent imkl version in numexpr easyblock (#2606)
- derive custom easyblock from MotionCor2 from PackedBinary instead of EasyBlock (#2607)


v4.4.2 (September 7th 2021)
Expand All @@ -29,7 +69,7 @@ update/bugfix release
- fix motorBike test in sanity check for OpenFOAM 9 (#2544)
- generate and install pkg-config files for OpenSSL wrapper (#2549)
- don't run 'setup.py config' for numpy >= 1.21, since it's no longer supported (#2554)
- update WIEK2k easyblock to handle new Intel versions, WIEN2k v21, Perl dependency, and tuning of dimension parameters (#2558)
- update WIEN2k easyblock to handle new Intel versions, WIEN2k v21, Perl dependency, and tuning of dimension parameters (#2558)
- remove PCRE from list of system libraries for TensorFlow 2.6.0 (#2559)
- add support for also installing Tosca component in ABAQUS (#2560)
- update ABAQUS easyblock to support installing of version 2021 with hot fixes (#2562)
Expand Down
2 changes: 1 addition & 1 deletion easybuild/easyblocks/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,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 = LooseVersion('4.4.2')
VERSION = LooseVersion('4.5.0')
UNKNOWN = 'UNKNOWN'


Expand Down
25 changes: 24 additions & 1 deletion easybuild/easyblocks/a/abaqus.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class EB_ABAQUS(Binary):
@staticmethod
def extra_options():
extra_vars = {
'with_fe_safe': [None, "Enable installation of fe-safe (if None: auto-enable for ABAQUS >= 2020)", CUSTOM],
'with_tosca': [None, "Enable installation of Tosca (if None: auto-enable for ABAQUS >= 2020)", CUSTOM],
}
return Binary.extra_options(extra_vars)
Expand All @@ -62,9 +63,13 @@ def __init__(self, *args, **kwargs):
self.replayfile = None

if self.cfg['with_tosca'] is None and LooseVersion(self.version) >= LooseVersion('2020'):
self.log.info("Auto-enabling installation of Tosca component for ABAQUS versions >= 2020")
self.log.info("Auto-enabling installation of Tosca components for ABAQUS versions >= 2020")
self.cfg['with_tosca'] = True

if self.cfg['with_fe_safe'] is None and LooseVersion(self.version) >= LooseVersion('2020'):
self.log.info("Auto-enabling installation of fe-safe components for ABAQUS versions >= 2020")
self.cfg['with_fe_safe'] = True

def extract_step(self):
"""Use default extraction procedure instead of the one for the Binary easyblock."""
EasyBlock.extract_step(self)
Expand Down Expand Up @@ -124,6 +129,19 @@ def install_step(self):
# Enable Abaqus CAE (docs)
std_qa[selectionstr % (r"\[ \]", "Abaqus CAE")] = "%(nr)s"

# enable all ABAQUS components
std_qa[selectionstr % (r"\[ \]", "Abaqus.*")] = "%(nr)s"
std_qa[selectionstr % (r"\[ \]", "Cosimulation Services")] = "%(nr)s"

# enable 3DSFlow Solver (used to be called "Abaqus/CFD Solver")
std_qa[selectionstr % (r"\[ \]", "3DSFlow Solver")] = "%(nr)s"

# disable/enable fe-safe components
if self.cfg['with_fe_safe']:
std_qa[selectionstr % (r"\[ \]", ".*fe-safe")] = "%(nr)s"
else:
std_qa[selectionstr % (r"\[*\]", ".*fe-safe")] = "%(nr)s"

# Disable/enable Tosca
if self.cfg['with_tosca']:
std_qa[selectionstr % (r"\[\ \]", "Tosca")] = "%(nr)s"
Expand Down Expand Up @@ -285,6 +303,11 @@ def sanity_check_step(self):
custom_paths['dirs'].append('%s-%s' % ('.'.join(verparts[0:2]), verparts[2]))
custom_commands.append("abaqus information=all")

if LooseVersion(self.version) >= LooseVersion('2020'):
custom_paths['files'].append(os.path.join('cae', 'linux_a64', 'code', 'bin', 'abaqusstd'))
if self.cfg['with_fe_safe']:
custom_paths['files'].append(os.path.join('cae', 'linux_a64', 'code', 'bin', 'fe-safe'))

if self.cfg['with_tosca']:
custom_commands.append("ToscaPython.sh --help")

Expand Down
10 changes: 7 additions & 3 deletions easybuild/easyblocks/c/comsol.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,15 @@ def __init__(self, *args, **kwargs):
super(EB_COMSOL, self).__init__(*args, **kwargs)
self.configfile = os.path.join(self.builddir, 'my_setupconfig.ini')

def configure_step(self):
"""Configure COMSOL installation: create license file."""
def extract_step(self):
"""Need to adjust the permissions on the top dir, the DVD has 0444."""
super(EB_COMSOL, self).extract_step()

# The tar file comes from the DVD and has 0444 as permission at the top dir.
adjust_permissions(self.start_dir, stat.S_IWUSR)
adjust_permissions(self.builddir, stat.S_IWUSR)

def configure_step(self):
"""Configure COMSOL installation: create license file."""

default_lic_env_var = 'LMCOMSOL_LICENSE_FILE'
lic_specs, self.license_env_var = find_flexlm_license(custom_env_vars=[default_lic_env_var],
Expand Down
8 changes: 6 additions & 2 deletions easybuild/easyblocks/c/cp2k.py
Original file line number Diff line number Diff line change
Expand Up @@ -668,9 +668,13 @@ def build_step(self):
run_cmd(cmd + " clean", log_all=True, simple=True, log_output=True)

# build and install
# compile regularly first with the default make target
# and only then build the library
run_cmd(cmd + ' all', log_all=True, simple=True, log_output=True)

# build as a library
if self.cfg['library']:
cmd += ' libcp2k'
run_cmd(cmd + " all", log_all=True, simple=True, log_output=True)
run_cmd(cmd + 'libcp2k', log_all=True, simple=True, log_output=True)

def test_step(self):
"""Run regression test."""
Expand Down
6 changes: 6 additions & 0 deletions easybuild/easyblocks/c/cuda.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,12 @@ def sanity_check_step(self):

def make_module_extra(self):
"""Set the install directory as CUDA_HOME, CUDA_ROOT, CUDA_PATH."""

# avoid adding of installation directory to $PATH (cfr. Binary easyblock) since that may cause trouble,
# for example when there's a clash between command name and a subdirectory in the installation directory
# (like compute-sanitizer)
self.cfg['prepend_to_path'] = False

txt = super(EB_CUDA, self).make_module_extra()
txt += self.module_generator.set_environment('CUDA_HOME', self.installdir)
txt += self.module_generator.set_environment('CUDA_ROOT', self.installdir)
Expand Down
25 changes: 22 additions & 3 deletions easybuild/easyblocks/e/easybuildmeta.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import copy
import os
import re
import sys
from distutils.version import LooseVersion

from easybuild.easyblocks.generic.pythonpackage import PythonPackage
Expand All @@ -48,7 +49,8 @@ class EB_EasyBuildMeta(PythonPackage):
def __init__(self, *args, **kwargs):
"""Initialize custom class variables."""
super(EB_EasyBuildMeta, self).__init__(*args, **kwargs)
self.real_initial_environ = None

self.real_initial_environ = copy.deepcopy(self.initial_environ)

self.easybuild_pkgs = ['easybuild-framework', 'easybuild-easyblocks', 'easybuild-easyconfigs']
if LooseVersion(self.version) >= LooseVersion('2.0') and LooseVersion(self.version) <= LooseVersion('3.999'):
Expand All @@ -64,6 +66,17 @@ def __init__(self, *args, **kwargs):
# consider setuptools first, in case it is listed as a sources
self.easybuild_pkgs.insert(0, 'setuptools')

# Override this function since we want to respect the user choice for the python installation to use
# (which can be influenced by EB_PYTHON and EB_INSTALLPYTHON)
def prepare_python(self):
"""Python-specific preparations."""

self.python_cmd = sys.executable
# set Python lib directories
self.set_pylibdirs()

self.log.info("Python command being used: %s", self.python_cmd)

def check_readiness_step(self):
"""Make sure EasyBuild can be installed with a loaded EasyBuild module."""
env_var_name = get_software_root_env_var_name(self.name)
Expand Down Expand Up @@ -208,13 +221,19 @@ def sanity_check_step(self):
]

# (temporary) cleanse copy of initial environment to avoid conflict with (potentially) loaded EasyBuild module
self.real_initial_environ = copy.deepcopy(self.initial_environ)
for env_var in ['_LMFILES_', 'LOADEDMODULES']:
for env_var in ['_LMFILES_', 'LOADEDMODULES', 'MODULES_LMCONFLICT', '__MODULES_LMCONFLICT']:
if env_var in self.initial_environ:
self.initial_environ.pop(env_var)
os.environ.pop(env_var)
self.log.debug("Unset $%s in current env and copy of original env to make sanity check work" % env_var)

# unset all $EASYBUILD_* environment variables when running sanity check commands,
# to prevent failing sanity check for old EasyBuild versions when configuration options are defined
# via $EASYBUILD_* environment variables
for key in [k for k in self.initial_environ if k.startswith('EASYBUILD_')]:
val = self.initial_environ.pop(key)
self.log.info("$%s found in environment, unset for running sanity check (was: %s)", key, val)

super(EB_EasyBuildMeta, self).sanity_check_step(custom_paths=custom_paths, custom_commands=custom_commands)

def make_module_extra(self):
Expand Down
20 changes: 19 additions & 1 deletion easybuild/easyblocks/e/elsi.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ def __init__(self, *args, **kwargs):
"""Initialize ELSI-specific variables."""
super(EB_ELSI, self).__init__(*args, **kwargs)
self.enable_sips = False
self.internal_ntpoly = True
self.env_suff = '_MT' if self.toolchain.options.get('openmp', None) else ''

@staticmethod
Expand Down Expand Up @@ -115,6 +116,21 @@ def configure_step(self):
else:
raise EasyBuildError("Could not find FFTW library or interface.")

ntpoly = get_software_root('NTPoly')
if ntpoly:
self.internal_ntpoly = False
self.log.info("Using external NTPoly.")
self.cfg.update('configopts', "-DUSE_EXTERNAL_NTPOLY=ON")
external_libs.append('NTPoly')
else:
self.log.info("No external NTPoly specified as dependency, building internal NTPoly.")

bsepack = get_software_root('bsepack')
if bsepack:
self.log.info("Using external BSEPACK.")
self.cfg.update('configopts', "-DENABLE_BSEPACK=ON -DUSE_EXTERNAL_BSEPACK=ON")
external_libs.extend(['bsepack', 'sseig'])

if get_software_root('imkl') or get_software_root('ScaLAPACK'):
external_libs.extend(re.findall(r'lib(.*?)\.a', os.environ['SCALAPACK%s_STATIC_LIBS' % self.env_suff]))
else:
Expand All @@ -131,7 +147,9 @@ def configure_step(self):
def sanity_check_step(self):
"""Custom sanity check for ELSI."""

libs = ['elsi', 'fortjson', 'MatrixSwitch', 'NTPoly', 'OMM']
libs = ['elsi', 'fortjson', 'MatrixSwitch', 'OMM']
if self.internal_ntpoly:
libs.append('NTPoly')
modules = [lib.lower() for lib in libs if lib != 'OMM']
modules.extend(['omm_ops', 'omm_params', 'omm_rand'])

Expand Down
Loading

0 comments on commit 6667133

Please sign in to comment.