Subject: [PATCH] gnu: fenics-dolfin: Fix build with gcc@14.

From: Paul Garlick <[email-masked]>
Date: Mon, 28 Jul 2025 16:50:36 +0100

* gnu/packages/patches/fenics-dolfin-integer-types.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register new patch.
* gnu/packages/simulation.scm (fenics-dolfin)[source]: Use new patch.
---
 gnu/local.mk                                  |  1 +
 .../patches/fenics-dolfin-integer-types.patch | 29 +++++++++++++++++++
 gnu/packages/simulation.scm                   |  3 +-
 3 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/fenics-dolfin-integer-types.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 6e4664ac35..16d39fd207 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1294,6 +1294,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/fenics-dolfin-boost.patch		\
   %D%/packages/patches/fenics-dolfin-config-slepc.patch		\
   %D%/packages/patches/fenics-dolfin-hdf5-version-check.patch	\
+  %D%/packages/patches/fenics-dolfin-integer-types.patch	\
   %D%/packages/patches/ffmpeg-add-av_stream_get_first_dts-for-chromium.patch	\
   %D%/packages/patches/ffmpeg-jami-change-RTCP-ratio.patch	\
   %D%/packages/patches/ffmpeg-jami-rtp_ext_abs_send_time.patch	\
diff --git a/gnu/packages/patches/fenics-dolfin-integer-types.patch b/gnu/packages/patches/fenics-dolfin-integer-types.patch
new file mode 100644
index 0000000000..97cc13f95f
--- /dev/null
+++ b/gnu/packages/patches/fenics-dolfin-integer-types.patch
@@ -0,0 +1,29 @@
+This patch updates the integer types used in two of the dolfin header files.
+The changes enable building with gcc-13 and above.
+
+See <https://gcc.gnu.org/gcc-13/porting_to.html> for the porting notes.
+
+See <https://bitbucket.org/fenics-project/dolfin/commits/d56b1b082c50d846fb5bbe4971799ab9ecb21a24> for the upstream fix.
+
+--- a/dolfin/common/timing.h
++++ b/dolfin/common/timing.h
+@@ -39,7 +39,7 @@
+   ///
+   /// Precision of wall is around 1 microsecond, user and system are around
+   /// 10 millisecond (on Linux).
+-  enum class TimingType : int32_t { wall = 0, user = 1, system = 2 };
++  enum class TimingType : int { wall = 0, user = 1, system = 2 };
+ 
+   /// Start timing (should not be used internally in DOLFIN!)
+   void tic();
+
+--- a/dolfin/mesh/MeshConnectivity.h
++++ b/dolfin/mesh/MeshConnectivity.h
+@@ -24,5 +24,7 @@
+ #include <vector>
+ #include <dolfin/log/log.h>
+ 
++#include <cstdint>
++
+ namespace dolfin
+ {
diff --git a/gnu/packages/simulation.scm b/gnu/packages/simulation.scm
index ba41bf658e..5568a567ae 100644
--- a/gnu/packages/simulation.scm
+++ b/gnu/packages/simulation.scm
@@ -755,7 +755,8 @@ (define-public fenics-dolfin
                                 "fenics-dolfin-demo-init.patch"
                                 "fenics-dolfin-boost.patch"
                                 "fenics-dolfin-config-slepc.patch"
-                                "fenics-dolfin-hdf5-version-check.patch"))
+                                "fenics-dolfin-hdf5-version-check.patch"
+                                "fenics-dolfin-integer-types.patch"))
        (modules '((guix build utils)))
        (snippet '(begin
                    ;; Make sure we don't use the bundled test framework.
-- 
2.39.5