~ruther/guix-local

8eeb04e205ac22fdb2eaca1017f46a8adb4210c5 — David Elsing 1 year, 2 months ago 9d7da25
gnu: hdf5: Update to 1.14.6.

* gnu/packages/maths.scm (hdf5): Update to 1.14.6. Do not inherit from
hdf5-1.8.
[name, version]: New field.
[source]: Switch to git-fetch. Add modules and snippet fields. Use different
patch file.
[build-system]: New field. Use CMake.
[inputs]: New field.
[native-inputs]: New field. Add bison, flex and which.
[arguments]: Do not inherit from hdf5-1.8.
<#:configure-flags>: New field.
<#:phases>: New field. Use gexps. Remove 'patch-configure, 'patch-settings,
'patch-references, 'split, 'skip-version-test and
'patch-configure-build-settings phases.  Add 'make-gen-deterministic,
'generate-flexbison, 'patch-trace-shebang, 'fix-fortran-i686-test and
'generate-headers phases.
[home-page, synopsis, description]: New fields.
[license]: New field. Adjust URL.
(hdf5-parallel-openmpi)[inputs]: Use modify-inputs and drop labels.
[arguments]<#:configure-flags> Use flags for CMake.
<#:phases>: Delete 'patch-tests phase.
* gnu/packages/patches/hdf5-config-dependencies.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.

Change-Id: If3a97fe7e252cc48a050ac396a68a87a02600916
Signed-off-by: Andreas Enge <andreas@enge.fr>
3 files changed, 171 insertions(+), 54 deletions(-)

M gnu/local.mk
M gnu/packages/maths.scm
A gnu/packages/patches/hdf5-config-dependencies.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1575,6 1575,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/hdf4-reproducibility.patch 		\
  %D%/packages/patches/hdf4-shared-fortran.patch 		\
  %D%/packages/patches/hdf5-config-date.patch			\
  %D%/packages/patches/hdf5-config-dependencies.patch		\
  %D%/packages/patches/hdf-eos2-build-shared.patch 		\
  %D%/packages/patches/hdf-eos2-remove-gctp.patch		\
  %D%/packages/patches/hdf-eos2-fortrantests.patch		\

M gnu/packages/maths.scm => gnu/packages/maths.scm +139 -54
@@ 62,7 62,7 @@
;;; Copyright © 2022 Roman Scherer <roman.scherer@burningswell.com>
;;; Copyright © 2023 Jake Leporte <jakeleporte@outlook.com>
;;; Copyright © 2023 Camilo Q.S. (Distopico) <distopico@riseup.net>
;;; Copyright © 2023 David Elsing <david.elsing@posteo.net>
;;; Copyright © 2023, 2025 David Elsing <david.elsing@posteo.net>
;;; Copyright © 2024 Herman Rimm <herman@rimm.ee>
;;; Copyright © 2024 Foundation Devices, Inc. <hello@foundation.xyz>
;;; Copyright © 2024, 2025 Artyom V. Poptsov <poptsov.artyom@gmail.com>


@@ 139,6 139,7 @@
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages gcc)
  #:use-module (gnu packages gd)
  #:use-module (gnu packages geo)
  #:use-module (gnu packages ghostscript)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gperf)


@@ 1836,44 1837,141 @@ extremely large and complex data collections.")
        (base32 "14gih7kmjx4h3lc7pg4fwcl28hf1qqkf2x7rljpxqvzkjrqbxi00"))
       (patches (search-patches "hdf5-config-date.patch"))))))

;; When updating this package, please also update hdf-java.
(define-public hdf5
  (package
    (inherit hdf5-1.8)
    (version "1.14.3")
    (name "hdf5")
    (version "1.14.6")
    (source
     (origin
       (method url-fetch)
       (uri (list (string-append "https://support.hdfgroup.org/ftp/HDF5/releases/"
                                 "hdf5-" (version-major+minor version)
                                 "/hdf5-" version "/src/hdf5-"
                                 version ".tar.bz2")
                  (string-append "https://support.hdfgroup.org/ftp/HDF5/"
                                 "current"
                                 (apply string-append
                                        (take (string-split version #\.) 2))
                                 "/src/hdf5-" version ".tar.bz2")))
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/HDFGroup/hdf5")
             (commit (string-append "hdf5_" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32 "05zr11y3bivfwrbvzbky1q2gjf6r7n92cvvdnh5jilbmxljg49cl"))
       (patches (search-patches "hdf5-config-date.patch"))))
        (base32
         "1f7yv0xra465c3qy8c79fzddib653wzj5dsakb0bs02nwp3xm54q"))
       (modules '((guix build utils)))
       (snippet
        '(for-each
          delete-file
          (append
           (find-files "." "Makefile\\.in$")
           (find-files "java/lib" "\\.jar$")
           (list "aclocal.m4"
                 "bin/compile"
                 "bin/config.guess"
                 "bin/config.sub"
                 "bin/depcomp"
                 "bin/install-sh"
                 "bin/ltmain.sh"
                 "bin/missing"
                 "bin/test-driver"
                 "configure"
                 "HDF5Examples/aclocal.m4"
                 "HDF5Examples/compile"
                 "HDF5Examples/configure"
                 "HDF5Examples/depcomp"
                 "HDF5Examples/missing"
                 "HDF5Examples/test-driver"
                 "hl/src/H5LTanalyze.c"
                 "hl/src/H5LTparse.c"
                 "hl/src/H5LTparse.h"
                 "hl/tools/gif2h5/testfiles/ex_image2.h5"
                 "hl/tools/gif2h5/testfiles/h52giftst.h5"
                 "m4/ax_prog_doxygen.m4"
                 "m4/libtool.m4"
                 "m4/lt~obsolete.m4"
                 "m4/ltoptions.m4"
                 "m4/ltsugar.m4"
                 "m4/ltversion.m4"
                 "src/H5config.h.in"
                 "src/H5Edefin.h"
                 "src/H5Einit.h"
                 "src/H5Epubgen.h"
                 "src/H5Eterm.h"
                 "src/H5overflow.h"
                 "src/H5version.h"))))
       (patches (search-patches "hdf5-config-dependencies.patch"))))
    (build-system cmake-build-system)
    (arguments
     (substitute-keyword-arguments (package-arguments hdf5-1.8)
       ((#:phases phases #~%standard-phases)
        #~(modify-phases #$phases
            (add-after 'configure 'skip-version-test
              (lambda _
                ;; Skip test_check_version since the 'patch-settings' phase
                ;; modifies the test reference.
                (substitute* "test/test_check_version.sh.in"
                  (("TESTING\\(\\).*" all)
                   (string-append all "\nSKIP; exit 0\n")))))
            (add-after 'patch-configure 'patch-configure-build-settings
              (lambda _
                (substitute* "src/H5build_settings.autotools.c.in"
                  ;; Don't record the build-time kernel version to make the
                  ;; library file reproducible.
                  (("@UNAME_INFO@")
                   "Linux"))))))))))
     (list
      ;; Some of the users, notably Flann, need the C++ interface.
      #:configure-flags
      #~(list
         (string-append "-DHDF5_INSTALL_CMAKE_DIR=" #$output "/lib/cmake")
         "-DHDF5_BUILD_CPP_LIB=ON"
         "-DHDF5_BUILD_FORTRAN=ON"
         ;; Build a thread-safe library.  Unfortunately, CMakeLists.txt
         ;; invites you to either turn off C++, Fortran, and the high-level
         ;; interface (HL), or to enable 'ALLOW_UNSUPPORTED'.  Debian
         ;; packagers chose to pass '--enable-unsupported' to the 'configure'
         ;; script and we follow their lead here.
         "-DHDF5_ENABLE_THREADSAFE=ON"
         "-DALLOW_UNSUPPORTED=ON"
         "-DHDF5_BUILD_DOC=ON")
      #:phases
      #~(modify-phases %standard-phases
          ;; XXX: src/H5private.h includes <fenv.h> and fails to find the
          ;; stdlib types when the gfortran header is used.  Remove gfortran
          ;; from CPLUS_INCLUDE_PATH as a workaround.
          (add-after 'set-paths 'hide-gfortran
            (lambda _
              (let ((gfortran #$(this-package-native-input "gfortran")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
                         (delete (string-append gfortran "/include/c++")
                                 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
                         ":")))))
          (add-after 'unpack 'make-gen-deterministic
            (lambda _
              (substitute* "bin/make_err"
                (("keys %major" all)
                 (string-append "sort " all))
                (("while.*each \\(%section\\).*")
                 (string-append
                  "foreach $sect_name (sort keys %section) {\n"
                  "        $sect_desc = $section{$sect_name};\n")))))
          (add-after 'unpack 'generate-flexbison
            (lambda _
              (invoke "bash" "bin/genparser" "hl/src")))
          (add-after 'unpack 'patch-trace-shebang
            (lambda _
              (for-each patch-shebang
                        (find-files "bin" (lambda (file stat)
                                            (executable-file? file))))))
          ;; This is a known issue on i686, see
          ;; https://github.com/HDFGroup/hdf5/issues/4926
          (add-after 'unpack 'fix-fortran-i686-test
            (lambda _
              (substitute* "fortran/test/tH5R.F90"
                (((string-append
                   "CALL h5rget_obj_name_f\\(C_LOC\\(ref_ptr\\(2\\)\\),"
                   " \"\", error, name_len=buf_size \\)"))
                 (string-append
                  "CALL h5rget_obj_name_f(C_LOC(ref_ptr(2)),"
                  " \"xxxxxxxxxxxxxx\", error, name_len=buf_size)")))))
          (add-after 'unpack 'generate-headers
            (lambda _
              (invoke "perl" "bin/make_err" "src/H5err.txt")
              (invoke "perl" "bin/make_vers" "src/H5vers.txt")
              (invoke "perl" "bin/make_overflow" "src/H5overflow.txt"))))))
    (inputs (list libaec zlib))
    (native-inputs
     (list bison
           doxygen
           flex
           gfortran
           graphviz
           ;; Needed to generate some headers and for tests
           perl
           which))
    (home-page "https://www.hdfgroup.org")
    (synopsis "Management suite for extremely large and complex data")
    (description "HDF5 is a suite that makes possible the management of
extremely large and complex data collections.")
    (license (license:x11-style
              "https://support.hdfgroup.org/ftp/HDF5/releases/COPYING.html"))))

;; Keep this in sync with the current hdf5 package.
(define-public hdf-java


@@ 2077,32 2175,19 @@ Swath).")
(define-public hdf5-parallel-openmpi
  (package/inherit hdf5
    (name "hdf5-parallel-openmpi")
    (inputs
     `(("mpi" ,openmpi)
       ,@(package-inputs hdf5)))
    (inputs (modify-inputs (package-inputs hdf5)
              (prepend openmpi)))
    (arguments
     (substitute-keyword-arguments (package-arguments hdf5)
       ((#:configure-flags flags)
        #~(cons "--enable-parallel"
                (delete "--enable-cxx"
                        (delete "--enable-threadsafe" #$flags))))
       ((#:configure-flags _ #f)
        ''("-DHDF5_ENABLE_THREADSAFE=OFF"
           "-DHDF5_ENABLE_PARALLEL=ON"
           "-DHDF5_BUILD_CPP_LIB=OFF"
           "-DHDF5_BUILD_DOC=ON"))
       ((#:phases phases)
        #~(modify-phases #$phases
            (add-after 'build 'mpi-setup
              #$%openmpi-setup)
            (add-before 'check 'patch-tests
              (lambda _
                ;; OpenMPI's mpirun will exit with non-zero status if it
                ;; detects an "abnormal termination", i.e. any process not
                ;; calling MPI_Finalize().  Since the test is explicitly
                ;; avoiding MPI_Finalize so as not to have at_exit and thus
                ;; H5C_flush_cache from being called, mpirun will always
                ;; complain, so turn this test off.
                (substitute* "testpar/Makefile"
                  (("(^TEST_PROG_PARA.*)t_pflush1(.*)" front back)
                   (string-append front back "\n")))
                (substitute* "tools/test/h5diff/testph5diff.sh"
                  (("/bin/sh") (which "sh")))))))))
              #$%openmpi-setup)))))
    (synopsis "Management suite for data with parallel IO support")))

(define-public hdf5-blosc

A gnu/packages/patches/hdf5-config-dependencies.patch => gnu/packages/patches/hdf5-config-dependencies.patch +31 -0
@@ 0,0 1,31 @@
The installed CMake configuration is missing targets for zlib and
libaec. Taken from
https://github.com/microsoft/vcpkg/blob/e36fe7110deac47a3aff8eda3dcc7cfb894a2ebf/ports/hdf5/hdf5_config.patch

diff --git a/config/cmake/hdf5-config.cmake.in b/config/cmake/hdf5-config.cmake.in
index 1a3fb7bbf2..79081ce040 100644
--- a/config/cmake/hdf5-config.cmake.in
+++ b/config/cmake/hdf5-config.cmake.in
@@ -120,12 +114,22 @@ set (${HDF5_PACKAGE_NAME}_VERSION_MINOR  @HDF5_VERSION_MINOR@)
 # Don't include targets if this file is being picked up by another
 # project which has already built hdf5 as a subproject
 #-----------------------------------------------------------------------------
+include(CMakeFindDependencyMacro)
 if (NOT TARGET "@HDF5_PACKAGE@")
   if (${HDF5_PACKAGE_NAME}_ENABLE_Z_LIB_SUPPORT AND ${HDF5_PACKAGE_NAME}_PACKAGE_EXTLIBS)
     include (@PACKAGE_SHARE_INSTALL_DIR@/@ZLIB_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake)
+  elseif (${HDF5_PACKAGE_NAME}_ENABLE_Z_LIB_SUPPORT)
+    find_dependency(ZLIB)
   endif ()
   if (${HDF5_PACKAGE_NAME}_ENABLE_SZIP_SUPPORT AND ${HDF5_PACKAGE_NAME}_PACKAGE_EXTLIBS)
     include (@PACKAGE_SHARE_INSTALL_DIR@/@LIBAEC_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake)
+  elseif (${HDF5_PACKAGE_NAME}_ENABLE_SZIP_SUPPORT)
+    if (${HDF5_PACKAGE_NAME}_BUILD_STATIC_LIBS)
+      set(libaec_USE_STATIC_LIBS ON)
+    else()
+      set(libaec_USE_STATIC_LIBS OFF)
+    endif()
+    find_dependency(libaec)
   endif ()
   include (@PACKAGE_SHARE_INSTALL_DIR@/@HDF5_PACKAGE@@HDF_PACKAGE_EXT@-targets.cmake)
 endif ()