From 3f9a445593cbc1cc712db45bf495b4479c7296d6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:35:21 +0000 Subject: [PATCH 1/4] Initial plan From 15f01c2899be1a6f45f87947e34f483c5cbc88f6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:39:39 +0000 Subject: [PATCH 2/4] Add robust HDF5 configuration to lxelsim package Co-authored-by: madbaron <7315158+madbaron@users.noreply.github.com> --- packages/lxelsim/package.py | 41 ++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/packages/lxelsim/package.py b/packages/lxelsim/package.py index ccf369c..726572e 100644 --- a/packages/lxelsim/package.py +++ b/packages/lxelsim/package.py @@ -1,6 +1,8 @@ from spack.package import * from spack.pkg.k4.key4hep_stack import * +import os + class Lxelsim(CMakePackage, Key4hepPackage): """LUXE simulation framework""" @@ -8,7 +10,7 @@ class Lxelsim(CMakePackage, Key4hepPackage): git = "https://github.com/LUXEsoftware/lxelsim.git" url = "https://github.com/LUXEsoftware/lxelsim/archive/refs/tags/v00-01.tar.gz" - maintainers = [''] + maintainers = ['madbaron'] version('master', branch='master') @@ -18,7 +20,40 @@ class Lxelsim(CMakePackage, Key4hepPackage): depends_on('hdf5') def cmake_args(self): - args = [] + args = [] args.append(self.define('CMAKE_CXX_STANDARD', '20')) - #args.append(self.define('BUILD_TESTING', self.run_tests)) + + # Ensure CMake/Find modules pick up Spack-installed HDF5 + h5 = self.spec['hdf5'] + h5_prefix = str(h5.prefix) + + # If the HDF5 CMake package config directory exists, point CMake to it + h5_cmake_dir = os.path.join(h5_prefix, 'lib', 'cmake', 'HDF5') + if os.path.isdir(h5_cmake_dir): + args.append(self.define('HDF5_DIR', h5_cmake_dir)) + + # Always provide HDF5 root and add it to CMAKE_PREFIX_PATH as a robust fallback + args.append(self.define('HDF5_ROOT', h5_prefix)) + + # Extend CMAKE_PREFIX_PATH so find_package searches Spack prefixes first + # Use semicolon-separated list which CMake expects + cmake_prefix_path = ';'.join(filter(None, [h5_prefix, str(self.spec.prefix)])) + args.append(self.define('CMAKE_PREFIX_PATH', cmake_prefix_path)) + + # Provide explicit include directory if present (fallback) + h5_include = os.path.join(h5_prefix, 'include') + if os.path.isdir(h5_include): + args.append(self.define('HDF5_INCLUDE_DIRS', h5_include)) + + # Provide explicit library paths for common HDF5 libs as a fallback + lib_dir = os.path.join(h5_prefix, 'lib') + if os.path.isdir(lib_dir): + libs = [] + for libname in ('libhdf5.so', 'libhdf5.a', 'libhdf5_hl.so', 'libhdf5_hl.a'): + lp = os.path.join(lib_dir, libname) + if os.path.exists(lp): + libs.append(lp) + if libs: + args.append(self.define('HDF5_LIBRARIES', ';'.join(libs))) + return args From c9da94161e5c4f41f4d44c4405a5fa8949c11d05 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Oct 2025 19:42:12 +0000 Subject: [PATCH 3/4] Simplify HDF5 configuration to only set HDF5_ROOT Co-authored-by: madbaron <7315158+madbaron@users.noreply.github.com> --- packages/lxelsim/package.py | 36 ++---------------------------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/packages/lxelsim/package.py b/packages/lxelsim/package.py index 726572e..5420bb1 100644 --- a/packages/lxelsim/package.py +++ b/packages/lxelsim/package.py @@ -1,8 +1,6 @@ from spack.package import * from spack.pkg.k4.key4hep_stack import * -import os - class Lxelsim(CMakePackage, Key4hepPackage): """LUXE simulation framework""" @@ -23,37 +21,7 @@ def cmake_args(self): args = [] args.append(self.define('CMAKE_CXX_STANDARD', '20')) - # Ensure CMake/Find modules pick up Spack-installed HDF5 - h5 = self.spec['hdf5'] - h5_prefix = str(h5.prefix) - - # If the HDF5 CMake package config directory exists, point CMake to it - h5_cmake_dir = os.path.join(h5_prefix, 'lib', 'cmake', 'HDF5') - if os.path.isdir(h5_cmake_dir): - args.append(self.define('HDF5_DIR', h5_cmake_dir)) - - # Always provide HDF5 root and add it to CMAKE_PREFIX_PATH as a robust fallback - args.append(self.define('HDF5_ROOT', h5_prefix)) - - # Extend CMAKE_PREFIX_PATH so find_package searches Spack prefixes first - # Use semicolon-separated list which CMake expects - cmake_prefix_path = ';'.join(filter(None, [h5_prefix, str(self.spec.prefix)])) - args.append(self.define('CMAKE_PREFIX_PATH', cmake_prefix_path)) - - # Provide explicit include directory if present (fallback) - h5_include = os.path.join(h5_prefix, 'include') - if os.path.isdir(h5_include): - args.append(self.define('HDF5_INCLUDE_DIRS', h5_include)) - - # Provide explicit library paths for common HDF5 libs as a fallback - lib_dir = os.path.join(h5_prefix, 'lib') - if os.path.isdir(lib_dir): - libs = [] - for libname in ('libhdf5.so', 'libhdf5.a', 'libhdf5_hl.so', 'libhdf5_hl.a'): - lp = os.path.join(lib_dir, libname) - if os.path.exists(lp): - libs.append(lp) - if libs: - args.append(self.define('HDF5_LIBRARIES', ';'.join(libs))) + # Set HDF5_ROOT to prevent CMake from picking up system HDF5 + args.append(self.define('HDF5_ROOT', self.spec['hdf5'].prefix)) return args From 14b987af4fccf1bdb06638bf7f00db127ac86e49 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Oct 2025 19:58:37 +0000 Subject: [PATCH 4/4] Remove system HDF5 installations from Docker image Co-authored-by: madbaron <7315158+madbaron@users.noreply.github.com> --- Docker/Dockerfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index e2850d1..2411b23 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -25,6 +25,19 @@ RUN apt-get update && \ apt-get install -y lsb-release wget software-properties-common gnupg && \ bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" +# Remove any system HDF5 installations to prevent CMake from finding them +RUN apt-get remove -y libhdf5-* hdf5-* || true && \ + apt-get autoremove -y && \ + rm -rf /usr/lib/x86_64-linux-gnu/libhdf5* \ + /usr/lib/x86_64-linux-gnu/hdf5 \ + /usr/lib/aarch64-linux-gnu/libhdf5* \ + /usr/lib/aarch64-linux-gnu/hdf5 \ + /usr/lib/libhdf5* \ + /usr/include/hdf5* \ + /usr/share/hdf5* \ + /usr/local/lib/libhdf5* \ + /usr/local/include/hdf5* || true + # Apply our patches to spack RUN . /opt/setup_spack.sh && \ REPOPATH=${SPACK_ROOT}/var/luxe-spack && \