* [bug#64448] [PATCH 1/2] gnu: hdf5-1.8: Remove generated files from source
2023-07-03 21:58 [bug#64448] [PATCH 0/2] Fix hdf5-1.14 wrappers and remove generated source files from all hdf5 versions David Elsing
@ 2023-07-03 22:00 ` David Elsing
2023-07-03 22:00 ` [bug#64448] [PATCH 2/2] gnu: hdf5-1.14: Remove spurious include directories David Elsing
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: David Elsing @ 2023-07-03 22:00 UTC (permalink / raw)
To: 64448; +Cc: David Elsing, andreas, efraim, bavier
* gnu/packages/maths.scm (hdf5-snippet): New variable.
(hdf5-1.8.21-source): New variable.
(hdf5-1.8)[source](modules, snippet): New fields.
[native-inputs]: Add autoconf, automake, bison, flex, libtool and which.
[arguments] Use Gexps.
<#:phases>: Add 'copy-scripts, 'make-gen-deterministic, 'generate-flexbison
and 'generate-headers phases.
(hdf5-1.10)[source](modules, snippet): New fields.
[arguments]<#:phases>: Use 'substitute-keyword-arguments' and delete
'copy-scripts phase.
(hdf5-1.12): Inherit from hdf5-1.10.
[source](modules, snippet): New fields.
(hdf5-1.14): Inherit from hdf5-1.10.
[source](modules, snippet): New fields.
* gnu/packages/patches/hdf5-config-date.patch: Apply to configure.ac instead
of configure.
---
gnu/packages/maths.scm | 221 +++++++++++++++-----
gnu/packages/patches/hdf5-config-date.patch | 14 +-
2 files changed, 176 insertions(+), 59 deletions(-)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 653e76027a..b2029db615 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -60,6 +60,7 @@
;;; Copyright © 2022 Akira Kyle <akira@akirakyle.com>
;;; Copyright © 2022 Roman Scherer <roman.scherer@burningswell.com>
;;; Copyright © 2023 Jake Leporte <jakeleporte@outlook.com>
+;;; Copyright © 2023 David Elsing <david.elsing@posteo.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1376,12 +1377,48 @@ (define-public hdf4-alt
(synopsis
"HDF4 without netCDF API, can be combined with the regular netCDF library")))
-(define-public hdf5-1.8
- (package
- (name "hdf5")
- (version "1.8.23")
- (source
- (origin
+(define hdf5-snippet
+ #~(begin
+ (for-each delete-file (find-files "." "Makefile\\.in$"))
+ (when (file-exists? "autom4te.cache")
+ (delete-file-recursively "autom4te.cache"))
+ (for-each (lambda (file)
+ (when (file-exists? file)
+ (delete-file file)))
+ (list
+ "configure"
+ "bin/ltmain.sh"
+ "bin/compile"
+ "bin/config.guess"
+ "bin/config.sub"
+ "bin/install-sh"
+ "bin/missing"
+ "bin/test-driver"
+ "bin/depcomp"
+ "src/H5config.h.in"
+ "src/H5Epubgen.h"
+ "src/H5Einit.h"
+ "src/H5Eterm.h"
+ "src/H5Edefin.h"
+ "src/H5version.h"
+ "src/H5overflow.h"
+ "aclocal.m4"
+ "hl/tools/gif2h5/testfiles/ex_image2.h5"
+ "hl/tools/gif2h5/testfiles/5giftst.h5"
+ "hl/src/H5LTparse.h"
+ "hl/src/H5LTparse.c"
+ "hl/src/H5LTanalyze.c"
+ ;; In later releases
+ "m4/libtool.m4"
+ "m4/ltoptions.m4"
+ "m4/ltsugar.m4"
+ "m4/ltversion.m4"
+ "m4/lt~obsolete.m4"))))
+
+;; In the 1.8.22 and 1.8.23 release, some m4 scripts are missing
+(define hdf5-1.8.21-source
+ (let ((version "1.8.21"))
+ (origin
(method url-fetch)
(uri (list (string-append "https://support.hdfgroup.org/ftp/HDF5/releases/"
"hdf5-" (version-major+minor version)
@@ -1394,18 +1431,53 @@ (define-public hdf5-1.8
(string-append major minor)))
"/src/hdf5-" version ".tar.bz2")))
(sha256
- (base32 "0km65mr6dgk4ia2dqr1b9dzw9qg15j5z35ymbys9cnny51z1zb39"))
- (patches (search-patches "hdf5-config-date.patch"))))
+ (base32 "03glk4w4wyb1jyb443g53y3y1ncnf6mj2cqwm6avfr2awkgb3cg5"))
+ (modules '((guix build utils)))
+ (snippet hdf5-snippet)
+ (patches (search-patches "hdf5-config-date.patch")))))
+
+(define-public hdf5-1.8
+ (package
+ (name "hdf5")
+ (version "1.8.23")
+ (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"
+ (match (string-split version #\.)
+ ((major minor _ ...)
+ (string-append major minor)))
+ "/src/hdf5-" version ".tar.bz2")))
+ (sha256
+ (base32 "0km65mr6dgk4ia2dqr1b9dzw9qg15j5z35ymbys9cnny51z1zb39"))
+ (modules '((guix build utils)))
+ (snippet hdf5-snippet)
+ (patches (search-patches "hdf5-config-date.patch"))))
(build-system gnu-build-system)
(inputs
(list zlib))
(native-inputs
- (list gfortran perl)) ;part of the test machinery needs Perl
+ (list autoconf
+ automake
+ bison
+ flex
+ gfortran
+ libtool
+ ;; Needed to generate some headers and for tests
+ perl
+ which))
(outputs '("out" ; core library
"fortran")) ; fortran interface
(arguments
- `(;; Some of the users, notably Flann, need the C++ interface.
- #:configure-flags '("--enable-cxx"
+ (list
+ ;; Some of the users, notably Flann, need the C++ interface.
+ #:configure-flags #~(list
+ "--enable-cxx"
"--enable-fortran"
"--enable-fortran2003"
@@ -1418,44 +1490,71 @@ (define-public hdf5-1.8
"--enable-threadsafe"
"--with-pthread"
"--enable-unsupported")
- ;; Use -fPIC to allow the R bindings to link with the static libraries
- #:make-flags (list "CFLAGS=-fPIC"
- "CXXFLAGS=-fPIC")
- #:phases
- (modify-phases %standard-phases
- (add-before 'configure 'patch-configure
- (lambda* (#:key outputs #:allow-other-keys)
- (substitute* "configure"
- (("/bin/mv") "mv"))
- (substitute* "fortran/src/Makefile.in"
- (("libhdf5_fortran_la_LDFLAGS =")
- (string-append "libhdf5_fortran_la_LDFLAGS = -Wl,-rpath="
- (assoc-ref outputs "fortran") "/lib")))
- (substitute* "hl/fortran/src/Makefile.in"
- (("libhdf5hl_fortran_la_LDFLAGS =")
- (string-append "libhdf5hl_fortran_la_LDFLAGS = -Wl,-rpath="
- (assoc-ref outputs "fortran") "/lib")))))
- (add-after 'configure 'patch-settings
- (lambda _
- ;; libhdf5.settings contains the full path of the
- ;; compilers used, and its contents are included in
- ;; libhdf5.so. We truncate the hashes to avoid
- ;; unnecessary store references to those compilers:
- (substitute* "src/libhdf5.settings"
- (("(/gnu/store/)([a-zA-Z0-9]*)" all prefix hash)
- (string-append prefix (string-take hash 10) "..."))
- ;; Don't record the build-time kernel version to make the
- ;; settings file reproducible.
- (("Uname information:.*")
- "Uname information: Linux\n"))))
- (add-after 'install 'patch-references
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
- (zlib (assoc-ref inputs "zlib")))
- (substitute* (find-files bin "h5p?cc")
- (("-lz" lib)
- (string-append "-L" zlib "/lib " lib))))))
- (add-after 'install 'split
+ ;; Use -fPIC to allow the R bindings to link with the static libraries
+ #:make-flags #~(list "CFLAGS=-fPIC"
+ "CXXFLAGS=-fPIC")
+ #:phases
+ #~(modify-phases %standard-phases
+ ;; These scripts are missing in this release
+ (add-after 'unpack 'copy-scripts
+ (lambda _
+ (invoke "tar" "-xf" #$hdf5-1.8.21-source
+ "-C" "m4" "--strip-components=2"
+ "hdf5-1.8.21/m4/aclocal_fc.m4"
+ "hdf5-1.8.21/m4/aclocal_cxx.m4")
+ (invoke "tar" "-xf" #$(package-source hdf5-1.10)
+ "-C" "bin" "--strip-components=2"
+ "hdf5-1.10.9/bin/genparser")))
+ (add-after 'copy-scripts '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 'copy-scripts 'generate-flexbison
+ (lambda _
+ (invoke "bash" "bin/genparser" "hl/src")))
+ (add-before 'configure 'patch-configure
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "configure"
+ (("/bin/mv") "mv"))
+ (substitute* "fortran/src/Makefile.in"
+ (("libhdf5_fortran_la_LDFLAGS =")
+ (string-append "libhdf5_fortran_la_LDFLAGS = -Wl,-rpath="
+ (assoc-ref outputs "fortran") "/lib")))
+ (substitute* "hl/fortran/src/Makefile.in"
+ (("libhdf5hl_fortran_la_LDFLAGS =")
+ (string-append "libhdf5hl_fortran_la_LDFLAGS = -Wl,-rpath="
+ (assoc-ref outputs "fortran") "/lib")))))
+ (add-after 'configure 'patch-settings
+ (lambda _
+ ;; libhdf5.settings contains the full path of the
+ ;; compilers used, and its contents are included in
+ ;; libhdf5.so. We truncate the hashes to avoid
+ ;; unnecessary store references to those compilers:
+ (substitute* "src/libhdf5.settings"
+ (("(/gnu/store/)([a-zA-Z0-9]*)" all prefix hash)
+ (string-append prefix (string-take hash 10) "..."))
+ ;; Don't record the build-time kernel version to make the
+ ;; settings file reproducible.
+ (("Uname information:.*")
+ "Uname information: Linux\n"))))
+ (add-after 'configure '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")))
+ (add-after 'install 'patch-references
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
+ (zlib (assoc-ref inputs "zlib")))
+ (substitute* (find-files bin "h5p?cc")
+ (("-lz" lib)
+ (string-append "-L" zlib "/lib " lib))))))
+ (add-after 'install 'split
(lambda* (#:key inputs outputs #:allow-other-keys)
;; Move all fortran-related files
(let* ((out (assoc-ref outputs "out"))
@@ -1515,11 +1614,25 @@ (define-public hdf5-1.10
"/src/hdf5-" version ".tar.bz2")))
(sha256
(base32 "14gih7kmjx4h3lc7pg4fwcl28hf1qqkf2x7rljpxqvzkjrqbxi00"))
- (patches (search-patches "hdf5-config-date.patch"))))))
+ (modules '((guix build utils)))
+ (snippet hdf5-snippet)
+ (patches (search-patches "hdf5-config-date.patch"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments hdf5-1.8)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (delete 'copy-scripts)
+ (add-after 'unpack 'patch-trace-shebang
+ (lambda _
+ (for-each
+ patch-shebang
+ (find-files "bin"
+ (lambda (file stat)
+ (executable-file? file))))))))))))
(define-public hdf5-1.12
(package
- (inherit hdf5-1.8)
+ (inherit hdf5-1.10)
(version "1.12.2")
(source
(origin
@@ -1535,11 +1648,13 @@ (define-public hdf5-1.12
"/src/hdf5-" version ".tar.bz2")))
(sha256
(base32 "1zlawdzb0gsvcxif14fwr5ap2gk4b6j02wirr2hcx8hkcbivp20s"))
+ (modules '((guix build utils)))
+ (snippet hdf5-snippet)
(patches (search-patches "hdf5-config-date.patch"))))))
(define-public hdf5-1.14
(package
- (inherit hdf5-1.8)
+ (inherit hdf5-1.10)
(version "1.14.0")
(source
(origin
@@ -1555,6 +1670,8 @@ (define-public hdf5-1.14
"/src/hdf5-" version ".tar.bz2")))
(sha256
(base32 "181bdh8hp7v9xqwcby3lknr92lxlicc2hqscba3f5nhf8lrr9rz4"))
+ (modules '((guix build utils)))
+ (snippet hdf5-snippet)
(patches (search-patches "hdf5-config-date.patch"))))))
(define-public hdf5
diff --git a/gnu/packages/patches/hdf5-config-date.patch b/gnu/packages/patches/hdf5-config-date.patch
index c105435dc2..d9710f91e9 100644
--- a/gnu/packages/patches/hdf5-config-date.patch
+++ b/gnu/packages/patches/hdf5-config-date.patch
@@ -1,14 +1,14 @@
Honor SOURCE_DATE_EPOCH when exporting configuration date.
Autoconf-level patch submitted upstream on Wed Apr 13 17:03:23 UTC 2016
---- a/configure
-+++ b/configure
-@@ -27737,7 +28573,14 @@
-
+--- a/configure.ac
++++ b/configure.ac
+@@ -3566,7 +3566,14 @@
+ AC_SUBST([H5_VERSION])
## Configuration date
-- CONFIG_DATE="`date`"
-+ CONFIG_DATE="`date -u`"
+-AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`"
++AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date -u`"
+if test -n "$SOURCE_DATE_EPOCH"; then
+ CONFIG_DATE=`date -u -d "@$SOURCE_DATE_EPOCH" 2>/dev/null \
+ || date -u -r "$SOURCE_DATE_EPOCH" 2>/dev/null`
@@ -18,4 +18,4 @@ Autoconf-level patch submitted upstream on Wed Apr 13 17:03:23 UTC 2016
+fi
## User doing the configuration
- CONFIG_USER="`whoami`@`hostname`"
+ AC_SUBST([CONFIG_USER]) CONFIG_USER="`whoami`@`hostname`"
\ No newline at end of file
--
2.40.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [bug#64448] [PATCH 0/2] Fix hdf5-1.14 wrappers and remove generated source files from all hdf5 versions.
2023-07-03 21:58 [bug#64448] [PATCH 0/2] Fix hdf5-1.14 wrappers and remove generated source files from all hdf5 versions David Elsing
` (2 preceding siblings ...)
2023-07-04 21:14 ` [bug#64448] [PATCH 0/2] Fix hdf5-1.14 wrappers and remove generated source files from all hdf5 versions David Elsing
@ 2023-07-24 13:49 ` Andreas Enge
2023-07-24 14:00 ` Andreas Enge
2023-08-21 0:36 ` Gerd Heber
3 siblings, 2 replies; 10+ messages in thread
From: Andreas Enge @ 2023-07-24 13:49 UTC (permalink / raw)
To: David Elsing; +Cc: bavier, 64448, Gerd Heber, efraim
Hello,
adding Gerd Heber in cc, who seems to be the last person having worked on
these packages.
I am not competent at all about them, so commenting more as an outsider.
Using "guix package -A hdf":
hdf4 4.2.14 out gnu/packages/maths.scm:1289:2
hdf4-alt 4.2.14 out gnu/packages/maths.scm:1372:2
hdf5 1.8.23 out,fortran gnu/packages/maths.scm:1382:2
hdf5 1.14.0 out,fortran gnu/packages/maths.scm:1543:2
hdf5 1.12.2 out,fortran gnu/packages/maths.scm:1523:2
hdf5 1.10.9 out,fortran gnu/packages/maths.scm:1503:2
hdf5-blosc 1.0.0 out gnu/packages/maths.scm:1807:2
hdf5-parallel-openmpi 1.10.9 out,fortran gnu/packages/maths.scm:1775:2
and a lot of packages in other languages, for instance:
cl-hdf5-cffi 1.8.18-1.5b5c88f out gnu/packages/lisp-xyz.scm:12238:4
ecl-hdf5-cffi 1.8.18-1.5b5c88f out gnu/packages/lisp-xyz.scm:12238:4
(apparently based on 1.8.18? but it has hdf5-1.10 as input).
So there are lots of versions, and in the middle of them,
(define-public hdf5
;; Default version of HDF5.
hdf5-1.10)
And
hdf5-parallel-openmpi 1.10.9 out,fortran gnu/packages/maths.scm:1775:2
which inherits like this:
(package/inherit hdf5-1.10 ;use the latest
but takes inputs like this:
(inputs
`(("mpi" ,openmpi)
,@(package-inputs hdf5)))
which, I suppose, works by chance since currently hdf5-1.10 and hdf5 are
the same (but not "the latest").
Are all of these needed? If only the latest version 1.14.0 could be kept,
this would make the patch for 1.8.23 obsolete, for instance.
Andreas
^ permalink raw reply [flat|nested] 10+ messages in thread