diff --git a/gnu/local.mk b/gnu/local.mk
index 011ababfb7..a9acd493e9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1363,10 +1363,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/gtksourceview-2-add-default-directory.patch \
   %D%/packages/patches/gzdoom-search-in-installed-share.patch	\
   %D%/packages/patches/gzdoom-find-system-libgme.patch	\
-  %D%/packages/patches/hdf4-architectures.patch 		\
   %D%/packages/patches/hdf4-reproducibility.patch 		\
   %D%/packages/patches/hdf4-shared-fortran.patch 		\
-  %D%/packages/patches/hdf4-tirpc.patch 			\
   %D%/packages/patches/hdf5-config-date.patch			\
   %D%/packages/patches/hdf-eos2-build-shared.patch 		\
   %D%/packages/patches/hdf-eos2-remove-gctp.patch		\
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 1666d6e420..b90746f7f6 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020, 2023 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2016, 2017 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2014-2022 Eric Bavier <bavier@posteo.net>
@@ -1321,18 +1321,16 @@ (define-public gctp
 (define-public hdf4
   (package
     (name "hdf4")
-    (version "4.2.14")
+    (version "4.2.16-2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://support.hdfgroup.org/ftp/HDF/releases/HDF"
                            version "/src/hdf-" version ".tar.bz2"))
        (sha256
-        (base32 "0n29klrrbwan9307np0d9hr128dlpc4nnlf57a140080ll3jmp8l"))
-       (patches (search-patches "hdf4-architectures.patch"
-                                "hdf4-reproducibility.patch"
-                                "hdf4-shared-fortran.patch"
-                                "hdf4-tirpc.patch"))))
+        (base32 "0b395czhqr43mmbiifmg2mhb488wnd4zccj45vpql98ja15j7hy5"))
+       (patches (search-patches "hdf4-reproducibility.patch"
+                                "hdf4-shared-fortran.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      (list gfortran bison flex))
@@ -1345,9 +1343,7 @@ (define-public hdf4
        #:configure-flags (list "--enable-shared"
                                "FCFLAGS=-fallow-argument-mismatch"
                                "FFLAGS=-fallow-argument-mismatch"
-                               (string-append "CPPFLAGS=-I"
-                                              (assoc-ref %build-inputs "libtirpc")
-                                              "/include/tirpc"))
+                               "--enable-hdf4-xdr")
        #:phases
        (modify-phases %standard-phases
          ;; This is inspired by two of Debian's patches.
@@ -1362,14 +1358,7 @@ (define-public hdf4
              (substitute*
                  '("mfhdf/hdfimport/testutil.sh.in" "hdf/util/testutil.sh.in")
                (("/bin/rm") "rm")
-               (("/bin/mkdir") "mkdir"))
-             (substitute* (find-files "." "^Makefile\\.in$")
-               (("@HDF_BUILD_XDR_TRUE@XDR_ADD = \
--R\\$\\(abs_top_builddir\\)/mfhdf/xdr/\\.libs") "")
-               (("@HDF_BUILD_SHARED_TRUE@AM_LDFLAGS = \
--R\\$\\(abs_top_builddir\\)/mfhdf/libsrc/\\.libs \
--R\\$\\(abs_top_builddir\\)/hdf/src/\\.libs \\$\\(XDR_ADD\\)") ""))
-             #t))
+               (("/bin/mkdir") "mkdir"))))
          (add-after 'configure 'patch-settings
            (lambda _
              ;; libhdf4.settings contains the full path of the
@@ -1389,8 +1378,7 @@ (define-public hdf4
                ;; files.  Fix it manually to avoid having to propagate it.
                (substitute* (find-files (string-append out "/lib") "\\.la$")
                  (("-ljpeg")
-                  (string-append "-L" libjpeg "/lib -ljpeg")))
-               #t))))))
+                  (string-append "-L" libjpeg "/lib -ljpeg")))))))))
     (home-page "https://www.hdfgroup.org/products/hdf4/")
     (synopsis
      "Library and multi-object file format for storing and managing data")
diff --git a/gnu/packages/patches/hdf4-architectures.patch b/gnu/packages/patches/hdf4-architectures.patch
deleted file mode 100644
index aa71d5a383..0000000000
--- a/gnu/packages/patches/hdf4-architectures.patch
+++ /dev/null
@@ -1,632 +0,0 @@
-Copied from Debian.
-
-Description: Support additional architectures.
-Author: Francesco Paolo Lovergine <frankie@debian.org>
-
---- a/hdf/src/hdfi.h
-+++ b/hdf/src/hdfi.h
-@@ -48,6 +48,7 @@
- /*      8 - Cray IEEE                                                       */
- /*          (i.e. Big-Endian, all 64-bit architecture w/IEEE Floats)        */
- /*--------------------------------------------------------------------------*/
-+#define     DFMT_S390           0x1111
- #define     DFMT_SUN            0x1111 
- #define     DFMT_SUN_INTEL      0x4441
- #define     DFMT_ALLIANT        0x1111
-@@ -62,6 +63,7 @@
- #define     DFMT_CTSS           0x3331
- #define     DFMT_VAX            0x2221
- #define     DFMT_MIPSEL         0x4441
-+#define     DFMT_MIPSEB         0x1111
- #define     DFMT_PC             0x4441
- #define     DFMT_APPLE          0x1111
- #define     DFMT_APPLE_INTEL    0x4441
-@@ -75,6 +77,13 @@
- #define     DFMT_IA64           0x4441
- #define     DFMT_LINUX64        0x4441
- #define     DFMT_POWERPC64      0x1111
-+#define     DFMT_POWERPC64LE    0x4441
-+#define     DFMT_ARMV4L         0x4441
-+#define     DFMT_AARCH64        0x4441
-+#define     DFMT_X86_64         0x4441
-+#define     DFMT_SH             0x4441
-+#define     DFMT_SHEB           0x1111
-+#define     DFMT_RISCV64        0x4441
- 
- /* I/O library constants */
- #define UNIXUNBUFIO 1
-@@ -288,7 +297,7 @@ typedef int               hdf_pint_t;
- 
- #endif /* IBM6000 */
- 
--#if defined(HP9000) || (!defined(__convexc__) && (defined(hpux) || defined(__hpux)))
-+#if defined(HP9000) || (!defined(__convexc__) && (defined(hpux) || defined(__hpux) || defined(__hppa__)))
- 
- #ifndef HP9000
- #define HP9000
-@@ -347,6 +356,10 @@ typedef int               hdf_pint_t;
- /*  what each does */
- #define JMEMSYS         MEM_ANSI
- 
-+#ifdef __linux__
-+#define FNAME_POST_UNDERSCORE
-+#endif
-+
- #endif /* HP9000 */
- 
- 
-@@ -670,6 +683,462 @@ typedef int               hdf_pint_t;
- #endif /* !(defined(__APPLE__)) */
- 
- /*-----------------------------------------------------*/
-+#if defined (__linux__) && defined (__mc68000__)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#define DF_MT             DFMT_MOTOROLA
-+
-+#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
-+typedef void              VOID;
-+#endif  /* end VOID */
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef char              int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+typedef long int          int32;
-+typedef unsigned long int uint32;
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef long              intf;     /* size of INTEGERs in Fortran compiler */
-+typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+
-+#ifdef  HAVE_FMPOOL
-+#define FILELIB PAGEBUFIO  /* enable page buffering */
-+#else
-+#define FILELIB UNIXBUFIO
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/m68k */
-+
-+#if defined (__linux__) && defined (__sparc__)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#define DF_MT             DFMT_SUN
-+
-+#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
-+typedef void              VOID;
-+#endif  /* end VOID */
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef char              int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+#ifdef _LP64 /* 64-bit environment */
-+typedef int               int32;
-+typedef unsigned int      uint32;
-+#else /* 32-bit environment */
-+typedef long int          int32;
-+typedef unsigned long int uint32;
-+#endif
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef long              intf;     /* size of INTEGERs in Fortran compiler */
-+#ifdef _LP64 /* 64-bit environment */
-+typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
-+#else /* 32-bit environment */
-+typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
-+#endif
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+
-+#ifdef  HAVE_FMPOOL
-+#define FILELIB PAGEBUFIO  /* enable page buffering */
-+#else
-+#define FILELIB UNIXBUFIO
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/Sparc */
-+
-+#if defined (__linux__) && defined (__powerpc__) && !defined(__powerpc64__)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#define DF_MT             DFMT_MOTOROLA
-+
-+#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
-+typedef void              VOID;
-+#endif  /* end VOID */
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef signed char       int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+typedef long int          int32;
-+typedef unsigned long int uint32;
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef long              intf;     /* size of INTEGERs in Fortran compiler */
-+typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+
-+#ifdef  HAVE_FMPOOL
-+#define FILELIB PAGEBUFIO  /* enable page buffering */
-+#else
-+#define FILELIB UNIXBUFIO
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/powerpc */
-+
-+#if defined (__linux__) && defined (__s390__)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#define DF_MT             DFMT_S390
-+
-+#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
-+typedef void              VOID;
-+#endif  /* end VOID */
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef signed char       int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+#ifdef _LP64 /* 64-bit environment */
-+typedef int               int32;
-+typedef unsigned int      uint32;
-+#else /* 32-bit environment */
-+typedef long int          int32;
-+typedef unsigned long int uint32;
-+#endif
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef long              intf;     /* size of INTEGERs in Fortran compiler */
-+#ifdef _LP64 /* 64-bit environment */
-+typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
-+#else /* 32-bit environment */
-+typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
-+#endif
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+
-+#ifdef  HAVE_FMPOOL
-+#define FILELIB PAGEBUFIO  /* enable page buffering */
-+#else
-+#define FILELIB UNIXBUFIO
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/s390 */
-+
-+#if defined (__linux__) && (defined (__MIPSEB__) || defined(__MIPSEL__))
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#if defined (__MIPSEB__)
-+#define DF_MT             DFMT_MIPSEB
-+#elif defined(__MIPSEL__)
-+#define DF_MT		  DFMT_MIPSEL
-+#endif
-+
-+#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
-+typedef void              VOID;
-+#endif  /* end VOID */
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef signed char       int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+typedef int          int32;
-+typedef unsigned int uint32;
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef long              intf;     /* size of INTEGERs in Fortran compiler */
-+typedef long int               hdf_pint_t;   /* an integer the same size as a pointer */
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+
-+#ifdef  HAVE_FMPOOL
-+#define FILELIB PAGEBUFIO  /* enable page buffering */
-+#else
-+#define FILELIB UNIXBUFIO
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/mips */
-+
-+#if defined (__linux__) && defined (__arm__)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#define DF_MT             DFMT_ARMV4L
-+
-+#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
-+typedef void              VOID;
-+#endif  /* end VOID */
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef signed char       int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+typedef int          int32;
-+typedef unsigned int uint32;
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef long              intf;     /* size of INTEGERs in Fortran compiler */
-+typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+
-+#ifdef  HAVE_FMPOOL
-+#define FILELIB PAGEBUFIO  /* enable page buffering */
-+#else
-+#define FILELIB UNIXBUFIO
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/arm */
-+
-+#if defined (__linux__) && defined (__aarch64__)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#define DF_MT             DFMT_AARCH64
-+
-+typedef void              VOID;
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef signed char       int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+typedef int               int32;
-+typedef unsigned int      uint32;
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef int               intf;     /* size of INTEGERs in Fortran compiler */
-+typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+#define FILELIB UNIXBUFIO
-+
-+#ifndef BIG_LONGS
-+#define BIG_LONGS
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/aarch64 */
-+
-+#if defined (__linux__) && defined (__riscv) && (__riscv_xlen == 64)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#define DF_MT             DFMT_RISCV64
-+
-+typedef void              VOID;
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef signed char       int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+typedef int               int32;
-+typedef unsigned int      uint32;
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef int               intf;     /* size of INTEGERs in Fortran compiler */
-+typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+#define FILELIB UNIXBUFIO
-+
-+#ifndef BIG_LONGS
-+#define BIG_LONGS
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/riscv64 */
-+
- #if defined(NEXT) || defined(NeXT)
- 
- #ifndef NEXT
-@@ -932,7 +1401,11 @@ Please check your Makefile.
- 
- #include <sys/file.h>               /* for unbuffered i/o stuff */
- #include <sys/stat.h>
--#define DF_MT             DFMT_POWERPC64
-+#ifdef __LITTLE_ENDIAN__
-+#define DF_MT DFMT_POWERPC64LE
-+#else
-+#define DF_MT DFMT_POWERPC64
-+#endif
- typedef void              VOID;
- typedef void              *VOIDP;
- typedef char              *_fcd;
-@@ -956,6 +1429,11 @@ typedef long              hdf_pint_t;
- #define _fcdtocp(desc) (desc)
- #define FILELIB UNIXBUFIO
- 
-+#ifndef BIG_LONGS
-+#define BIG_LONGS
-+#endif
-+
-+
- /* JPEG #define's - Look in the JPEG docs before changing - (Q) */
- 
- /* Determine the memory manager we are going to use. Valid values are: */
-@@ -1101,6 +1579,8 @@ typedef long              hdf_pint_t;
- #define _fcdtocp(desc) (desc)
- #define FILELIB UNIXBUFIO
- 
-+#define BIG_LONGS
-+
- /* JPEG #define's - Look in the JPEG docs before changing - (Q) */
- 
- /* Determine the memory manager we are going to use. Valid values are: */
-@@ -1115,6 +1595,66 @@ typedef long              hdf_pint_t;
- 
- #endif /* IA64 */
- 
-+/* Renesas SuperH SH3(little/big)/SH4(little/big) */
-+#if defined (__linux__) && defined(__sh__)
-+
-+#ifdef GOT_MACHINE
-+If you get an error on this line more than one machine type has been defined.
-+Please check your Makefile.
-+#endif
-+#define GOT_MACHINE 1
-+
-+#include <fcntl.h>
-+#include <sys/types.h>      /* for unbuffered file I/O */
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <ctype.h>          /* for character macros */
-+
-+#if defined (__LITTLE_ENDIAN__)
-+#define DF_MT             DFMT_SH
-+#elif defined(__BIG_ENDIAN__)
-+#define DF_MT		  DFMT_SHEB
-+#endif
-+
-+#ifndef VOID /* The stupid windows.h header file uses a #define instead of a typedef */
-+typedef void              VOID;
-+#endif  /* end VOID */
-+
-+typedef void *            VOIDP;
-+typedef char *            _fcd;
-+typedef char              char8;
-+typedef unsigned char     uchar8;
-+typedef signed char       int8;
-+typedef unsigned char     uint8;
-+typedef short int         int16;
-+typedef unsigned short int uint16;
-+typedef long int          int32;
-+typedef unsigned long int uint32;
-+typedef int               intn;
-+typedef unsigned int      uintn;
-+typedef float             float32;
-+typedef double            float64;
-+typedef long              intf;
-+typedef int               hdf_pint_t;
-+#define FNAME_POST_UNDERSCORE
-+#define _fcdtocp(desc) (desc)
-+
-+#ifdef  HAVE_FMPOOL
-+#define FILELIB PAGEBUFIO  /* enable page buffering */
-+#else
-+#define FILELIB UNIXBUFIO
-+#endif
-+
-+/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
-+/* Determine the memory manager we are going to use. Valid values are: */
-+/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
-+/*  what each does */
-+#define JMEMSYS         MEM_ANSI
-+#define HAVE_STDC
-+#define INCLUDES_ARE_ANSI
-+
-+#endif /* Linux/sh */
-+
- #ifndef GOT_MACHINE
- No machine type has been defined.  Your Makefile needs to have someing like
- -DSUN or -DUNICOS in order for the HDF internal structures to be defined
---- a/hdf/src/hconv.h
-+++ b/hdf/src/hconv.h
-@@ -59,7 +59,7 @@
- /* CONSTANT DEFINITIONS                                                      */
- /*****************************************************************************/
- /* Generally Big-Endian machines */
--#if !defined(INTEL86) && !defined(MIPSEL) && !defined(DEC_ALPHA) && !defined(I860) && !defined(SUN386) && !(defined(__ia64) && !(defined(hpux) || defined(__hpux))) && !defined(__x86_64__)
-+#if !defined(INTEL86) && !defined(MIPSEL) && !defined(DEC_ALPHA) && !defined(I860) && !defined(SUN386) && !(defined(__ia64) && !(defined(hpux) || defined(__hpux))) && !defined(__x86_64__) && !(defined(__powerpc__) && defined(__LITTLE_ENDIAN__)) && !defined(__aarch64__) && !defined(__ARM_EABI__) && !defined(__riscv)
- #       define UI8_IN     DFKnb1b   /* Unsigned Integer, 8 bits */
- #       define UI8_OUT    DFKnb1b
- #       define SI16_IN    DFKnb2b   /* S = Signed */
diff --git a/gnu/packages/patches/hdf4-tirpc.patch b/gnu/packages/patches/hdf4-tirpc.patch
deleted file mode 100644
index 3f436e3887..0000000000
--- a/gnu/packages/patches/hdf4-tirpc.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Build with libtirpc on all architectures because glibc no longer provides
-SunRPC support.
-
-diff --git a/configure b/configure
---- a/configure
-+++ b/configure
-@@ -23635,10 +23635,13 @@
-   *-pc-cygwin*)
-     LIBS="$LIBS -ltirpc"
-     CPPFLAGS="$CPPFLAGS -I/usr/include/tirpc"  ;;
-+  *-linux-gnu)
-+    LIBS="$LIBS -ltirpc"
-+    CPPFLAGS="$CPPFLAGS"  ;;
-   *) ;;
- esac
- 
--if test "X$BUILD_XDR" != "Xyes"; then
-+if test "X$BUILD_XDR" = "Xyes"; then
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
- 
-@@ -23693,9 +23696,9 @@
-   ## but we need to make sure that it is present on the system. Do that here,
-   ## The SunRPC of the glibc has been replaced by a TI-RPC (Transport Independent RPC) library for IPv6 support
-   case "$host" in
--    *-pc-cygwin*)
-+    *)
-       HAVE_RPC="yes"
--      ac_fn_c_check_header_mongrel "$LINENO" "rpc.h" "ac_cv_header_rpc_h" "$ac_includes_default"
-+      ac_fn_c_check_header_mongrel "$LINENO" "rpc/rpc.h" "ac_cv_header_rpc_h" "$ac_includes_default"
- if test "x$ac_cv_header_rpc_h" = xyes; then :
-   :
- else
