medfile: 4.1.1 -> 5.0.0, fix darwin build and refactoring

This commit is contained in:
Alexis Hildebrandt 2024-05-23 21:32:22 +02:00
parent 3f284adcb5
commit 76810d1776
2 changed files with 30 additions and 96 deletions

View File

@ -1,19 +1,39 @@
{ lib, stdenv, fetchurl, cmake, hdf5 }:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "medfile";
version = "4.1.1";
version = "5.0.0";
src = fetchurl {
url = "http://files.salome-platform.org/Salome/other/med-${version}.tar.gz";
sha256 = "sha256-3CtdVOvwZm4/8ul0BB0qsNqQYGEyNTcCOrFl1XM4ndA=";
url = "https://files.salome-platform.org/Salome/medfile/med-${finalAttrs.version}.tar.bz2";
hash = "sha256-Jn520MZ+xRwQ4xmUhOwVCLqo1e2EXGKK32YFKdzno9Q=";
};
patches = [
./hdf5-1.14.patch
];
outputs = [ "out" "doc" "dev" ];
postPatch = ''
# Patch cmake and source files to work with hdf5
substituteInPlace config/cmake_files/medMacros.cmake --replace-fail \
"IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 12 OR NOT HDF_VERSION_RELEASE_REF GREATER 0)" \
"IF (HDF5_VERSION VERSION_LESS 1.12.0)"
substituteInPlace src/*/*.c --replace-warn \
"#if H5_VERS_MINOR > 12" \
"#if H5_VERS_MINOR > 14"
'' + lib.optionalString stdenv.isDarwin ''
# Some medfile test files #define _a, which
# breaks system header files that use _a as a function parameter
substituteInPlace tests/c/*.c \
--replace-warn "_a" "_A" \
--replace-warn "_b" "_B"
# Fix compiler errors in test files
substituteInPlace tests/c/*.c \
--replace-warn "med_Bool" "med_bool" \
--replace-warn "med_Axis_type" "med_axis_type" \
--replace-warn "med_Access_mode" "med_access_mode"
'';
nativeBuildInputs = [ cmake ];
buildInputs = [ hdf5 ];
checkPhase = "make test";
@ -22,8 +42,8 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "Library to read and write MED files";
homepage = "http://salome-platform.org/";
platforms = platforms.linux;
homepage = "https://salome-platform.org/";
platforms = platforms.linux ++ platforms.darwin;
license = licenses.lgpl3Plus;
};
}
})

View File

@ -1,86 +0,0 @@
--- a/config/cmake_files/medMacros.cmake
+++ b/config/cmake_files/medMacros.cmake
@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5)
##
## Requires 1.10.x version
##
- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1)
+ IF (HDF5_VERSION VERSION_LESS 1.10.2)
MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.")
ENDIF()
##
--- a/src/ci/MEDfileCompatibility.c
+++ b/src/ci/MEDfileCompatibility.c
@@ -71,7 +71,7 @@ MEDfileCompatibility(const char* const filename,
_hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease;
/* ISCRUTE(_hversionMMR); */
/* ISCRUTE(HDF_VERSION_NUM_REF); */
- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE;
+ if ( ((_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF)) || _hversionMMR > HDF_VERSION_NUM_REF ) *hdfok = MED_TRUE;
/* TODO : Vérifier si la version mineure HDF du fichier est supérieure
à la version mineure de la bibliothèque HDF utilisée :
@@ -113,7 +113,7 @@ MEDfileCompatibility(const char* const filename,
#if MED_NUM_MAJEUR != 4
#error "Don't forget to update the test version here when you change the major version of the library !"
#endif
-#if H5_VERS_MINOR > 10
+#if H5_VERS_MINOR > 14
#error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !"
#error "Cf. _MEDfileCreate ..."
#endif
--- a/src/hdfi/_MEDfileCreate.c
+++ b/src/hdfi/_MEDfileCreate.c
@@ -159,7 +159,7 @@ med_idt _MEDfileCreate(const char * const filename, const med_access_mode access
* En HDF5-1.10.0p1 cela n'a aucun effet !
* Un test autoconf permet de fixer un intervalle de version HDF à MED.
*/
-#if H5_VERS_MINOR > 10
+#if H5_VERS_MINOR > 14
#error "Don't forget to change the compatibility version of the library !"
#endif
--- a/src/hdfi/_MEDfileOpen.c
+++ b/src/hdfi/_MEDfileOpen.c
@@ -72,7 +72,7 @@ med_idt _MEDfileOpen(const char * const filename,const med_access_mode accessmod
• The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order).
*/
-#if H5_VERS_MINOR > 10
+#if H5_VERS_MINOR > 14
#error "Don't forget to change the compatibility version of the library !"
#endif
/* L'avantage de bloquer le modèle interne HDF5
--- a/src/hdfi/_MEDmemFileOpen.c
+++ b/src/hdfi/_MEDmemFileOpen.c
@@ -434,7 +434,7 @@ med_idt _MEDmemFileOpen(const char * const filename, med_memfile * const memfile
goto ERROR;
}
-#if H5_VERS_MINOR > 10
+#if H5_VERS_MINOR > 14
#error "Don't forget to change the compatibility version of the library !"
#endif
if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) {
--- a/src/hdfi/_MEDparFileCreate.c
+++ b/src/hdfi/_MEDparFileCreate.c
@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * const filename, const med_access_mode acc
* En HDF5-1.10.0p1 cela n'a aucun effet !
* Un test autoconf permet de fixer un intervalle de version HDF à MED.
*/
-#if H5_VERS_MINOR > 10
+#if H5_VERS_MINOR > 14
#error "Don't forget to change the compatibility version of the library !"
#endif
--- a/src/hdfi/_MEDparFileOpen.c
+++ b/src/hdfi/_MEDparFileOpen.c
@@ -55,7 +55,7 @@ med_idt _MEDparFileOpen(const char * const filename,const med_access_mode access
MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG);
goto ERROR;
}
-#if H5_VERS_MINOR > 10
+#if H5_VERS_MINOR > 14
#error "Don't forget to change the compatibility version of the library !"
#endif
if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) {