Skip to content

[EasyBuild] [package list]

EasyBuild/4.9.2 (EasyBuild-4.9.2.eb)

To access module help and find out for which stacks and partitions the module is installed, use module spider EasyBuild/4.9.2.

EasyConfig:

easyblock = 'EB_EasyBuildMetaLUMI'

name =    'EasyBuild'
version = '4.9.2'

homepage = 'https://easybuilders.github.io/easybuild'

whatis = [
    "Description: EasyBuild is a software build and installation framework written in Python that allows you to install software in a structured, repeatable and robust way."
]

description = """
EasyBuild is a software build and installation framework
written in Python that allows you to install software in a structured,
repeatable and robust way.
"""

usage = """
See the documentation on readthedocs. Only the documentation of the latest
version is readily available.

The EasyBuild module on LUMI should be used through the EasyBuild-user or
EasyBuild-production modules. These modules ensure that EasyBuild is properly
configured to install software on LUMI.
  * Installing software that is common to all partitions: First load the
    appropriate LUMI software stack module and the hidden partition/common module
    and then load either EasyBuild-user or EasyBuild-production (the latter for
    system managers only) module.
  * Installing software for a specific partition works in the same way, but then
    by loading the appropriate partition module. It is best to compile software on
    a node of that partition as cross-compiling may not always work as some packages
    have the nasty habit to add compiler options that conflict with the requirements
    of cross-compiling.
"""

docurls = [
    "Web-based documentation on https://easybuild.readthedocs.io/"
]

toolchain = SYSTEM

source_urls = [
    # easybuild-framework
    'https://files.pythonhosted.org/packages/cc/1f/676fc9e29c68e9c39c6dadf150ab4e5bf4907de4b9afd2bc6e0afd24ab7c/',
    # easybuild-easyblocks
    'https://files.pythonhosted.org/packages/5d/85/e8593ceeb00c61253204e74d2a8360076ce016f42d83d33841f8e7de57a1/',
    # easybuild-easyconfigs
    'https://files.pythonhosted.org/packages/99/b2/d899b4310bc54a10e0fb46995a2abc333857db16d116f22a53b0313d13d7/',
]

# note: subdirectory for each unpacked source tarball is renamed because custom easyblock in older EasyBuild version
# that is used for installing EasyBuild with EasyBuild expects subdirectories with '-' rather than '_';
# see also https://github.com/easybuilders/easybuild-easyblocks/pull/3358
sources = [
    {
        'filename': 'easybuild_framework-%(version)s.tar.gz',
        'extract_cmd': "tar xfvz %s && mv easybuild_framework-%(version)s easybuild-framework-%(version)s",
    },
    {
        'filename': 'easybuild_easyblocks-%(version)s.tar.gz',
        'extract_cmd': "tar xfvz %s && mv easybuild_easyblocks-%(version)s easybuild-easyblocks-%(version)s",
    },
    {
        'filename': 'easybuild_easyconfigs-%(version)s.tar.gz',
        'extract_cmd': "tar xfvz %s && mv easybuild_easyconfigs-%(version)s easybuild-easyconfigs-%(version)s",
    },
]

patches = [
    'EasyBuild-4.4.2_keyring_DBus.patch',
    'EasyBuild-4.9.2_LibSci.patch',
]

checksums = [
    {'easybuild_framework-4.9.2.tar.gz': 'cc6e0fe7bab2a96d424656ed70bf33e3b083eef5ceaa5d5fed88aa7b91dd3d63'},
    {'easybuild_easyblocks-4.9.2.tar.gz': '48202a89995a3d0a19228a35e409228bb6aa190ec7d7a7560e449303954953df'},
    {'easybuild_easyconfigs-4.9.2.tar.gz': '52d6f6378fc331cda8a94ff196d5bd6bb74c8029c973ee6a92763c256571eec7'},
]

# order matters a lot, to avoid having dependencies auto-resolved (--no-deps easy_install option doesn't work?)
# EasyBuild is a (set of) Python packages, so it depends on Python
# usually, we want to use the system Python, so no actual Python dependency is listed
allow_system_deps = [('Python', SYS_PYTHON_VERSION)]

local_pyshortver = '.'.join(SYS_PYTHON_VERSION.split('.')[:2])

exts_defaultclass = 'PythonPackage'
exts_filter = (f"/usr/bin/python{local_pyshortver} -c 'import %(ext_name)s'", '')
exts_default_options = {
    'download_dep_fail': True,
    'sanity_pip_check':  False,
    'source_urls':       [PYPI_SOURCE],
    'use_pip':           False,
}

exts_list = [
    ('click',             '7.1.2',    {}), # archspec 0.1.3 is incompatible with more recent versions of click
    ('archspec',          '0.1.3',    {}),
    ('colorama',          '0.4.4',    {}),
    ('commonmark',        '0.9.1',    {}),
    ('dataclasses',       '0.8',      {}),
    ('Pygments',          '2.11.2',   {}),
    ('typing_extensions', '3.10.0.2', {}), # The 4.0.x versions did not install, maybe due to the lack of pip?
    ('rich',              '11.2.0',   {}),
    # Trying to install PyYAML but it installs in the wrong directory. Tests pass but 
    # when you try to use it afterwards, Python fails to find it.
    ('PyYAML',            '5.4.1',    {'modulename': 'yaml'}), # Needed for easystack support in containers that do not yet provide the package.
]

postinstallcmds = [ # Robustify a number of commands.
    f'sed -i -e \'s|bin/python3|bin/python{local_pyshortver} -E|\' -e \'s|import sys|import sys\\nsys.path.append("%(installdir)s/lib/python{local_pyshortver}/site-packages")|\' %(installdir)s/bin/archspec',
    f'sed -i -e \'s|bin/python3|bin/python{local_pyshortver} -E|\' -e \'s|import sys|import sys\\nsys.path.append("%(installdir)s/lib/python{local_pyshortver}/site-packages")|\' %(installdir)s/bin/cmark',
    f'sed -i -e \'s|bin/python3|bin/python{local_pyshortver} -E|\' -e \'s|import sys|import sys\\nsys.path.append("%(installdir)s/lib/python{local_pyshortver}/site-packages")|\' %(installdir)s/bin/pygmentize',
    f'sed -i -e \'s|^PYTHON=.*|export PYTHONPATH="%(installdir)s/lib/python{local_pyshortver}/site-packages:%(installdir)s/lib64/python{local_pyshortver}/site-packages"\\nPYTHON=|\' -e \'s|for python_cmd in|for python_cmd in "/usr/bin/python{local_pyshortver}"|\' %(installdir)s/bin/eb',
]

sanity_check_paths = {
    'files': ['bin/eb'],
    'dirs':  [f'lib/python{local_pyshortver}/site-packages'],
}

sanity_check_commands = [
    'unset PYTHONPATH && archspec --version',
    'unset PYTHONPATH && cmark -h',
    'unset PYTHONPATH && pygmentize -V',
    'unset PYTHONPATH && eb --version',
]

# Set Python 3 for EasyBuild: Not needed as we hard-coded it.
#modextravars = {
#    'EB_PYTHON': f'/usr/bin/python{local_pyshortver}',
#}

moduleclass = 'tools'

#modluafooter= f"""
#if not ( isloaded("EasyBuild-tools/{local_LUMI_version}") ) then
#    try_load("EasyBuild-tools/{local_LUMI_version}")
#end
#"""

[EasyBuild] [package list]