Skip to content
31 changes: 31 additions & 0 deletions easybuild/easyconfigs/b/Blosc2/Blosc2-2.6.1-GCCcore-11.3.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild
# Author: Denis Kristak
# Update: Thomas Hoffmann (EMBL)
easyblock = 'CMakeMake'

name = 'Blosc2'
version = '2.6.1'

homepage = 'https://www.blosc.org/'

description = "Blosc, an extremely fast, multi-threaded, meta-compressor library"

toolchain = {'name': 'GCCcore', 'version': '11.3.0'}
toolchainopts = {'pic': True, 'cstd': 'c++11'}

source_urls = ['https://github.com/Blosc/c-blosc2/archive/']
sources = ['v%(version)s.tar.gz']
checksums = ['514a793368093893c1a7cae030f7e31faca7f86465ae69dd576f256d8bf28c08']

builddependencies = [
('binutils', '2.38'),
('CMake', '3.24.3'),
]

sanity_check_paths = {
'files': ['include/blosc2/blosc2-export.h', 'include/blosc2.h', 'lib/libblosc2.a',
'lib/libblosc2.%s' % SHLIB_EXT],
'dirs': [],
}

moduleclass = 'lib'
74 changes: 74 additions & 0 deletions easybuild/easyconfigs/p/PyTables/PyTables-3.8.0-foss-2022a.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# http://www.pytables.org/usersguide/installation.html
# updated: Denis Kristak (INUITS)

easyblock = 'PythonBundle'

name = 'PyTables'
version = '3.8.0'

homepage = 'https://www.pytables.org'
description = """PyTables is a package for managing hierarchical datasets and designed to efficiently and easily cope
with extremely large amounts of data. PyTables is built on top of the HDF5 library, using the Python language and the
NumPy package. It features an object-oriented interface that, combined with C extensions for the performance-critical
parts of the code (generated using Cython), makes it a fast, yet extremely easy to use tool for interactively browsing,
processing and searching very large amounts of data. One important feature of PyTables is that it optimizes memory and
disk resources so that data takes much less space (specially if on-flight compression is used) than other solutions
such as relational or object oriented databases."""

toolchain = {'name': 'foss', 'version': '2022a'}
toolchainopts = {'usempi': True}

builddependencies = [
('pkgconf', '1.8.0'),
('CMake', '3.24.3'),
('Ninja', '1.10.2'),
('scikit-build', '0.15.0'),
]

dependencies = [
('Python', '3.10.4'),
('SciPy-bundle', '2022.05'), # provides numexpr
('HDF5', '1.12.2'),
('LZO', '2.10'),
('Blosc', '1.21.3'),
('Blosc2', '2.6.1'),
('py-cpuinfo', '9.0.0'),
]

use_pip = True

exts_list = [
('blosc2', '2.0.0', {
'patches': ['blosc2-2.0.0_use-Blosc2-dep.patch'],
'checksums': [
{'blosc2-2.0.0.tar.gz': 'f19b0b3674f6c825b490f00d8264b0c540c2cdc11ec7e81178d38b83c57790a1'},
{'blosc2-2.0.0_use-Blosc2-dep.patch': '6a9443f378472ada3c8fe8a8a346fe16f22b01bab7d9e60c23b64b546178054b'},
],
}),
('tables', version, {
'patches': [
'PyTables-%(version)s_fix-libs.patch',
'PyTables-3.8.0_fix-find-blosc2-library-path.patch',
],
'checksums': [
{'tables-3.8.0.tar.gz': '34f3fa2366ce20b18f1df573a77c1d27306ce1f2a41d9f9eff621b5192ea8788'},
{'PyTables-3.8.0_fix-libs.patch': '7a1e6fa1f9169e52293e2b433a4302fa13c5d31e7709cd4fe0e087199b9e3f8a'},
{'PyTables-3.8.0_fix-find-blosc2-library-path.patch':
'dcf6c3a16a138454296161e99cf6470620755d4c26303186a744f09a11e6013b'},
],
}),
]

local_bins = ['pt2to3', 'ptdump', 'ptrepack', 'pttree']
sanity_check_paths = {
'files': ['bin/%s' % x for x in local_bins],
'dirs': ['lib/python%(pyshortver)s/site-packages'],
}

options = {'modulename': 'tables'}

sanity_check_commands = ["%s --help" % x for x in local_bins]

sanity_pip_check = True

moduleclass = 'data'
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
determine location to Blosc2 library via $EBROOTBLOSC2, if defined,
since mechanism to locate the library via blosc2-*.dist-info/RECORD doesn't work if blosc2 was not installed
with vendored c-blosc2 library;
author: Kenneth Hoste (HPC-UGent)
--- tables-3.8.0/setup.py.orig 2023-01-19 20:10:15.637759755 +0100
+++ tables-3.8.0/setup.py 2023-01-19 20:11:48.590853686 +0100
@@ -110,19 +110,25 @@

def get_blosc2_directories():
"""Get Blosc2 directories for the C library by using wheel metadata"""
- try:
- import blosc2
- except ModuleNotFoundError:
- raise EnvironmentError("Cannot import the blosc2 requirement")
- version = blosc2.__version__
- basepath = Path(os.path.dirname(blosc2.__file__))
- recinfo = basepath.parent / f'blosc2-{version}.dist-info' / 'RECORD'
library_path = None
- for line in open(recinfo):
- if 'libblosc2' in line:
- library_path = Path(os.path.abspath(basepath.parent /
- Path(line[:line.find('libblosc2')])))
- break
+ blosc2_root = os.getenv('EBROOTBLOSC2')
+ if blosc2_root:
+ library_path = Path(os.path.join(blosc2_root, 'lib'))
+ else:
+ try:
+ import blosc2
+ except ModuleNotFoundError:
+ raise EnvironmentError("Cannot import the blosc2 requirement")
+ version = blosc2.__version__
+ basepath = Path(os.path.dirname(blosc2.__file__))
+ recinfo = basepath.parent / f'blosc2-{version}.dist-info' / 'RECORD'
+ library_path = None
+ for line in open(recinfo):
+ if 'libblosc2' in line:
+ library_path = Path(os.path.abspath(basepath.parent /
+ Path(line[:line.find('libblosc2')])))
+ break
+
if not library_path:
raise NotADirectoryError("Library directory not found for blosc2!")

15 changes: 15 additions & 0 deletions easybuild/easyconfigs/p/PyTables/PyTables-3.8.0_fix-libs.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# pyTables expects that LIBS is a list of library names and will add
# a -l by itself.
# original patch by ward.poelmans@ugent.be, ported to newer PyTables version by Kenneth Hoste (HPC-UGent)
--- PyTables-3.8.0/setup.py.orig 2023-01-11 19:14:27.160064110 +0100
+++ PyTables-3.8.0/setup.py 2023-01-11 19:21:48.460252182 +0100
@@ -576,6 +576,9 @@
# is not a good idea.
CFLAGS = os.environ.get("CFLAGS", "").split()
LIBS = os.environ.get("LIBS", "").split()
+ for idx, lib in enumerate(LIBS):
+ if lib.startswith("-l"):
+ LIBS[idx] = lib.replace("-l", "")
CONDA_PREFIX = os.environ.get("CONDA_PREFIX", "")
# We start using pkg-config since some distributions are putting HDF5
# (and possibly other libraries) in exotic locations. See issue #442.
24 changes: 24 additions & 0 deletions easybuild/easyconfigs/p/PyTables/blosc2-2.0.0_use-Blosc2-dep.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
make blosc2 use provided Blosc2 dependency, rather than letting it build its own vendored copy of c-blosc2
author: Kenneth Hoste (HPC-UGent)
--- blosc2-2.0.0/blosc2/CMakeLists.txt.orig 2023-01-19 13:20:38.055582814 +0100
+++ blosc2-2.0.0/blosc2/CMakeLists.txt 2023-01-19 13:21:03.808615093 +0100
@@ -7,17 +7,14 @@
set(BUILD_FUZZERS OFF CACHE BOOL "Build C-Blosc2 fuzzers")

set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-# we want the binaries of the C-Blosc2 library to go into the wheels
-set(BLOSC_INSTALL ON)
-add_subdirectory(c-blosc2)
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/c-blosc2/include")
+include_directories("$ENV{EBROOTBLOSC2}/include")
include_directories("${Python_NumPy_INCLUDE_DIRS}")


add_cython_target(blosc2_ext blosc2_ext.pyx)
add_library(blosc2_ext MODULE ${blosc2_ext})

-target_link_libraries(blosc2_ext blosc2_static)
+target_link_libraries(blosc2_ext $ENV{EBROOTBLOSC2}/lib/libblosc2.a)

python_extension_module(blosc2_ext)

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
easyblock = 'PythonPackage'
Comment thread
verdurin marked this conversation as resolved.

name = 'py-cpuinfo'
version = '9.0.0'

homepage = 'https://github.com/workhorsy/py-cpuinfo'
description = "py-cpuinfo gets CPU info with pure Python."

toolchain = {'name': 'GCCcore', 'version': '11.3.0'}

sources = [SOURCE_TAR_GZ]
checksums = ['3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690']

builddependencies = [
('binutils', '2.38'),
]

dependencies = [
('Python', '3.10.4'),
]

download_dep_fail = True
use_pip = True

sanity_check_paths = {
'files': ['bin/cpuinfo'],
'dirs': ['lib/python%(pyshortver)s/site-packages'],
}

sanity_check_commands = [
"cpuinfo",
"python -m cpuinfo",
]

options = {'modulename': 'cpuinfo'}

sanity_pip_check = True

moduleclass = 'tools'