Fortran: simplify H5config_f.inc.cmake to use #cmakedefine directly (#6423)

All #cmakedefine01 CMAKE_H5_* blocks used a five-line pattern:

  #cmakedefine01 CMAKE_H5_HAVE_FOO
  #if CMAKE_H5_HAVE_FOO == 0
  #undef H5_HAVE_FOO
  #else
  #define H5_HAVE_FOO
  #endif

This is exactly what #cmakedefine H5_HAVE_FOO does: it emits
#define H5_HAVE_FOO (no value) when the CMake variable is truthy and
/* #undef H5_HAVE_FOO */ when falsy.  The CMAKE_H5_* intermediate
variables in fortran/src/CMakeLists.txt were only needed to feed these
blocks and are no longer required.

Replace all such blocks with #cmakedefine H5_HAVE_FOO, using the H5_*
variable directly.  MPI_LOGICAL_KIND retains its value via
#cmakedefine H5_MPI_LOGICAL_KIND @H5_MPI_LOGICAL_KIND@.

This also fixes a real bug: H5_FORTRAN_C_BOOL_IS_UNIQUE was emitted as
#define H5_FORTRAN_C_BOOL_IS_UNIQUE 0 when C_BOOL and default LOGICAL
are the same kind (e.g. Apple PowerPC ABI).  #ifdef only tests whether
a macro is defined, not its value, so the guard in H5_test_buildiface.F90
was always true and verify_c_bool was written into tf_gen.F90 regardless,
causing an "Ambiguous interfaces" build failure on that platform.
This commit is contained in:
Scot Breitenfeld
2026-06-02 08:13:50 -05:00
committed by GitHub
parent 322d9366d8
commit e4c16e9fca
11 changed files with 49 additions and 166 deletions
+1 -63
View File
@@ -8,12 +8,6 @@ cmake_minimum_required (VERSION 3.26)
project (HDF5_F90_SRC C Fortran)
#-----------------------------------------------------------------------------
if (H5_NO_DEPRECATED_SYMBOLS)
set (CMAKE_NO_DEPRECATED_SYMBOLS 1)
else ()
set (CMAKE_NO_DEPRECATED_SYMBOLS 0)
endif ()
# configure def file for shared libs on windows
if (WIN32)
if (BUILD_SHARED_LIBS)
@@ -34,64 +28,8 @@ if (WIN32)
endif ()
endif ()
if (H5_HAVE_MPI_F08) # MPI-3 module mpi_f08 supported
set (CMAKE_H5_HAVE_MPI_F08 1)
else ()
if (NOT H5_HAVE_MPI_F08) # MPI-3 module mpi_f08 supported
set (H5_NOMPI_F08 ";")
set (CMAKE_H5_HAVE_MPI_F08 0)
endif ()
if (H5_HAVE_DARWIN) # Used in testing
set (CMAKE_H5_HAVE_DARWIN 1)
else ()
set (CMAKE_H5_HAVE_DARWIN 0)
endif ()
# configure for Fortran preprocessor
# Define Parallel variable for passing to H5config_f.inc.cmake
set (CMAKE_H5_HAVE_PARALLEL 0)
set (CMAKE_H5_HAVE_SUBFILING_VFD 0)
if (H5_HAVE_PARALLEL)
set (CMAKE_H5_HAVE_PARALLEL 1)
if (H5_HAVE_SUBFILING_VFD)
set (CMAKE_H5_HAVE_SUBFILING_VFD 1)
endif ()
endif ()
set (CMAKE_H5_HAVE_FLOAT128 0)
if (H5_HAVE_FLOAT128)
set (CMAKE_H5_HAVE_FLOAT128 1)
endif ()
set (CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE 0)
if (H5_FORTRAN_HAVE_STORAGE_SIZE)
set (CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE 1)
endif ()
set (CMAKE_H5_FORTRAN_HAVE_SIZEOF 0)
if (H5_FORTRAN_HAVE_SIZEOF)
set (CMAKE_H5_FORTRAN_HAVE_SIZEOF 1)
endif ()
set (CMAKE_H5_FORTRAN_HAVE_C_SIZEOF 0)
if (H5_FORTRAN_HAVE_C_SIZEOF)
set (CMAKE_H5_FORTRAN_HAVE_C_SIZEOF 1)
endif ()
set (CMAKE_H5_HAVE_ISO_FORTRAN_ENV 0)
if (H5_HAVE_ISO_FORTRAN_ENV)
set (CMAKE_H5_HAVE_ISO_FORTRAN_ENV 1)
endif ()
set (CMAKE_H5_FORTRAN_HAVE_CHAR_ALLOC 0)
if (H5_FORTRAN_HAVE_CHAR_ALLOC)
set (CMAKE_H5_FORTRAN_HAVE_CHAR_ALLOC 1)
endif ()
set (CMAKE_H5_MPI_LOGICAL_KIND 0)
if (H5_MPI_LOGICAL_KIND)
set (CMAKE_H5_MPI_LOGICAL_KIND 1)
endif ()
configure_file (${HDF5_F90_SRC_SOURCE_DIR}/H5config_f.inc.cmake ${HDF5_F90_BINARY_DIR}/H5config_f.inc @ONLY)
+3 -3
View File
@@ -95,7 +95,7 @@ MODULE H5D
PRIVATE h5dwrite_reference_obj, h5dwrite_reference_dsetreg, h5dwrite_char_scalar, h5dwrite_ptr
PRIVATE h5dread_reference_obj, h5dread_reference_dsetreg, h5dread_char_scalar, h5dread_ptr
PRIVATE h5dfill_integer, h5dfill_c_float, h5dfill_c_double, h5dfill_char, h5dfill_ptr
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
PRIVATE h5dfill_c_long_double
#endif
@@ -180,7 +180,7 @@ MODULE H5D
MODULE PROCEDURE h5dfill_integer
MODULE PROCEDURE h5dfill_c_float
MODULE PROCEDURE h5dfill_c_double
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
MODULE PROCEDURE h5dfill_c_long_double
#endif
MODULE PROCEDURE h5dfill_char
@@ -2308,7 +2308,7 @@ CONTAINS
END SUBROUTINE h5dfill_c_double
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
SUBROUTINE h5dfill_c_long_double(fill_value, space_id, buf, hdferr)
IMPLICIT NONE
REAL(KIND=C_LONG_DOUBLE), INTENT(IN), TARGET :: fill_value
+2 -2
View File
@@ -183,7 +183,7 @@ h5init_types_c(hid_t_f *types, hid_t_f *floatingtypes, hid_t_f *integertypes)
/*
* FIND H5T_NATIVE_REAL_C_LONG_DOUBLE
*/
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE != 0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
if (sizeof(real_C_LONG_DOUBLE_f) == sizeof(float)) {
if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0)
return ret_value;
@@ -192,7 +192,7 @@ h5init_types_c(hid_t_f *types, hid_t_f *floatingtypes, hid_t_f *integertypes)
if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0)
return ret_value;
} /*end if */
#if H5_FORTRAN_HAVE_C_LONG_DOUBLE != 0
#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
else if (sizeof(real_C_LONG_DOUBLE_f) == sizeof(long double)) {
if (H5_PAC_C_MAX_REAL_PRECISION >= H5_PAC_FC_MAX_REAL_PRECISION) {
if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0)
+2 -2
View File
@@ -997,7 +997,7 @@ CONTAINS
INTEGER, INTENT(IN) :: flag
INTEGER :: i
!#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
!#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
! ! (1) The array index assumes INTEGER*16 the last integer in the series, and
! ! (2) it should map to INTEGER*16 on most modern processors
! H5T_NATIVE_INTEGER_KIND(H5_FORTRAN_NUM_INTEGER_KINDS)=SELECTED_INT_KIND(36)
@@ -1016,7 +1016,7 @@ CONTAINS
h5_type = H5T_NATIVE_REAL_C_FLOAT
ELSE IF(ikind.EQ.KIND(1.0_C_DOUBLE))THEN
h5_type = H5T_NATIVE_REAL_C_DOUBLE
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
ELSE IF(ikind.EQ.KIND(1.0_C_LONG_DOUBLE))THEN
h5_type = H5T_NATIVE_REAL_C_LONG_DOUBLE
#endif
+16 -71
View File
@@ -12,88 +12,43 @@
! fortran/H5config_f.inc. Generated from fortran/src/H5config_f.inc.cmake by CMake
! Define if there is parallel support
#cmakedefine01 CMAKE_H5_HAVE_PARALLEL
#if CMAKE_H5_HAVE_PARALLEL == 0
#undef H5_HAVE_PARALLEL
#else
#define H5_HAVE_PARALLEL
#endif
#cmakedefine H5_HAVE_PARALLEL
! Define if MPI supports mpi_f08 module
#cmakedefine01 CMAKE_H5_HAVE_MPI_F08
#if CMAKE_H5_HAVE_MPI_F08 == 0
#undef H5_HAVE_MPI_F08
#else
#define H5_HAVE_MPI_F08
#endif
#cmakedefine H5_HAVE_MPI_F08
! Define if there is subfiling support
#cmakedefine01 CMAKE_H5_HAVE_SUBFILING_VFD
#if CMAKE_H5_HAVE_SUBFILING_VFD == 0
#undef H5_HAVE_SUBFILING_VFD
#else
#define H5_HAVE_SUBFILING_VFD
#endif
#cmakedefine H5_HAVE_SUBFILING_VFD
! Define if on APPLE
#cmakedefine01 CMAKE_H5_HAVE_DARWIN
#if CMAKE_H5_HAVE_DARWIN == 0
#undef H5_HAVE_DARWIN
#else
#define H5_HAVE_DARWIN
#endif
#cmakedefine H5_HAVE_DARWIN
! Define if the intrinsic function STORAGE_SIZE exists
#cmakedefine01 CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE
#if CMAKE_H5_FORTRAN_HAVE_STORAGE_SIZE == 0
#undef H5_FORTRAN_HAVE_STORAGE_SIZE
#else
#define H5_FORTRAN_HAVE_STORAGE_SIZE
#endif
#cmakedefine H5_FORTRAN_HAVE_STORAGE_SIZE
! Define if the intrinsic function SIZEOF exists
#cmakedefine01 CMAKE_H5_FORTRAN_HAVE_SIZEOF
#if CMAKE_H5_FORTRAN_HAVE_SIZEOF == 0
#undef H5_FORTRAN_HAVE_SIZEOF
#else
#define H5_FORTRAN_HAVE_SIZEOF
#endif
#cmakedefine H5_FORTRAN_HAVE_SIZEOF
! Define if the intrinsic function C_SIZEOF exists
#cmakedefine01 CMAKE_H5_FORTRAN_HAVE_C_SIZEOF
#if CMAKE_H5_FORTRAN_HAVE_C_SIZEOF == 0
#undef H5_FORTRAN_HAVE_C_SIZEOF
#else
#define H5_FORTRAN_HAVE_C_SIZEOF
#endif
#cmakedefine H5_FORTRAN_HAVE_C_SIZEOF
! Define if allocatable character is supported
#define H5_FORTRAN_HAVE_CHAR_ALLOC @H5_FORTRAN_HAVE_CHAR_ALLOC@
#cmakedefine H5_FORTRAN_HAVE_CHAR_ALLOC
! Define if the intrinsic function C_LONG_DOUBLE exists
#define H5_FORTRAN_HAVE_C_LONG_DOUBLE @H5_FORTRAN_HAVE_C_LONG_DOUBLE@
#cmakedefine H5_FORTRAN_HAVE_C_LONG_DOUBLE
! Define if Fortran C_LONG_DOUBLE is different from C_DOUBLE
#define H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE @H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
#cmakedefine H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
! Define if Fortran C_BOOL is different from default LOGICAL
#define H5_FORTRAN_C_BOOL_IS_UNIQUE @H5_FORTRAN_C_BOOL_IS_UNIQUE@
#cmakedefine H5_FORTRAN_C_BOOL_IS_UNIQUE
! Define MPI Fortran KIND of LOGICAL
#cmakedefine01 CMAKE_H5_MPI_LOGICAL_KIND
#if CMAKE_H5_MPI_LOGICAL_KIND == 0
#undef H5_MPI_LOGICAL_KIND
#else
#define H5_MPI_LOGICAL_KIND @H5_MPI_LOGICAL_KIND@
#endif
#cmakedefine H5_MPI_LOGICAL_KIND @H5_MPI_LOGICAL_KIND@
! Define if Fortran supports ISO_FORTRAN_ENV (F08)
#cmakedefine01 CMAKE_H5_HAVE_ISO_FORTRAN_ENV
#if CMAKE_H5_HAVE_ISO_FORTRAN_ENV == 0
#undef H5_HAVE_ISO_FORTRAN_ENV
#else
#define H5_HAVE_ISO_FORTRAN_ENV
#endif
#cmakedefine H5_HAVE_ISO_FORTRAN_ENV
! Define the size of C's double
#define H5_SIZEOF_DOUBLE @H5_SIZEOF_DOUBLE@
@@ -105,15 +60,10 @@
#define H5_PAC_FC_MAX_REAL_PRECISION @H5_PAC_FC_MAX_REAL_PRECISION@
! If C has quad precision
#cmakedefine01 CMAKE_H5_HAVE_FLOAT128
#if CMAKE_H5_HAVE_FLOAT128 == 0
#undef H5_HAVE_FLOAT128
#else
#define H5_HAVE_FLOAT128
#endif
#cmakedefine H5_HAVE_FLOAT128
! Define if INTEGER*16 is available
#define H5_HAVE_Fortran_INTEGER_SIZEOF_16 @H5_HAVE_Fortran_INTEGER_SIZEOF_16@
#cmakedefine H5_HAVE_Fortran_INTEGER_SIZEOF_16
! Maximum decimal precision for C
#define H5_PAC_C_MAX_REAL_PRECISION @H5_PAC_C_MAX_REAL_PRECISION@
@@ -137,12 +87,7 @@
#define H5_Fortran_COMPILER_ID @CMAKE_Fortran_COMPILER_ID@
! Define if deprecated public API symbols are disabled
#cmakedefine01 CMAKE_NO_DEPRECATED_SYMBOLS
#if CMAKE_NO_DEPRECATED_SYMBOLS == 0
#undef H5_NO_DEPRECATED_SYMBOLS
#else
#define H5_NO_DEPRECATED_SYMBOLS
#endif
#cmakedefine H5_NO_DEPRECATED_SYMBOLS
! For major interface/format changes
#define H5_VERS_MAJOR @H5_VERS_MAJOR@
+3 -3
View File
@@ -23,6 +23,6 @@
#define H5_FORTRAN_INTEGER_KINDS_SIZEOF @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
#define H5_FORTRAN_REAL_KINDS @PAC_FC_ALL_REAL_KINDS@
#define H5_FORTRAN_REAL_KINDS_SIZEOF @PAC_FC_ALL_REAL_KINDS_SIZEOF@
#define H5_HAVE_Fortran_INTEGER_SIZEOF_16 @H5_HAVE_Fortran_INTEGER_SIZEOF_16@
#define H5_FORTRAN_HAVE_C_LONG_DOUBLE @H5_FORTRAN_HAVE_C_LONG_DOUBLE@
#define H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE @H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
#cmakedefine H5_HAVE_Fortran_INTEGER_SIZEOF_16
#cmakedefine H5_FORTRAN_HAVE_C_LONG_DOUBLE
#cmakedefine H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
+4 -4
View File
@@ -156,7 +156,7 @@ main(void)
int FORTRAN_NUM_INTEGER_KINDS = H5_FORTRAN_NUM_INTEGER_KINDS;
int H5_FORTRAN_NUM_REAL_KINDS;
#if H5_FORTRAN_HAVE_C_LONG_DOUBLE != 0
#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
int found_long_double = 0;
#endif
@@ -213,7 +213,7 @@ main(void)
writeTypedef("float", "double", RealKinds[i]);
strcpy(Real_C_TYPES[i], "C_DOUBLE");
}
#if H5_FORTRAN_HAVE_C_LONG_DOUBLE != 0
#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
else if (sizeof(long double) == RealKinds_SizeOf[i] && found_long_double == 0) {
writeTypedef("float", "long double", RealKinds[i]);
strcpy(Real_C_TYPES[i], "C_LONG_DOUBLE");
@@ -376,7 +376,7 @@ main(void)
return -1;
}
/* real_f */
#if H5_FORTRAN_HAVE_C_LONG_DOUBLE != 0
#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
if (H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(long double)) {
writeToFilesChr("float", "Fortran_REAL", "real_f", H5_FORTRAN_NATIVE_REAL_KIND, "C_LONG_DOUBLE");
}
@@ -403,7 +403,7 @@ main(void)
}
/* double_f */
#if H5_FORTRAN_HAVE_C_LONG_DOUBLE != 0
#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
if (H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(long double)) {
writeToFilesChr("float", "Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND,
"C_LONG_DOUBLE");
+8 -8
View File
@@ -645,7 +645,7 @@ CONTAINS
INTEGER(KIND=int_kind_16), TARGET :: data0_i16 = 4
INTEGER, DIMENSION(1:DIM0) :: data_int
INTEGER, TARGET :: data0_int = 4
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
INTEGER, PARAMETER :: int_kind_32 = SELECTED_INT_KIND(36) !should map to INTEGER*16 on most modern processors
INTEGER(KIND=int_kind_32), DIMENSION(1:DIM0), TARGET :: data_i32
INTEGER(KIND=int_kind_32), TARGET :: data0_i32 = 4
@@ -656,7 +656,7 @@ CONTAINS
REAL(KIND=real_kind_8), DIMENSION(1:DIM0), TARGET :: data_r8
REAL(KIND=real_kind_4) , TARGET :: data0_r4 = 4.0
REAL(KIND=real_kind_8), TARGET :: data0_r8 = 4.0
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
INTEGER, PARAMETER :: real_kind_16 = C_LONG_DOUBLE
REAL(KIND=real_kind_16) , DIMENSION(1:DIM0), TARGET :: data_r16
REAL(KIND=real_kind_16) , TARGET :: data0_r16 = 4.0
@@ -679,12 +679,12 @@ CONTAINS
data_i4 = -2
data_i16 = -2
data_int = -2
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
data_i32 = -2
#endif
data_r4 = -2.0_real_kind_4
data_r8 = -2.0_real_kind_8
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
data_r16 = -2.0_real_kind_16
#endif
data_chr = "H"
@@ -767,7 +767,7 @@ CONTAINS
ENDIF
ENDDO
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
CALL h5dfill_f(data0_r16, space_id, data_r16, error)
CALL check("h5dfill_f", error, total_error)
DO i = 1, DIM0
@@ -792,7 +792,7 @@ CONTAINS
data_i1 = -2
data_i4 = -2
data_i16 = -2
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
data_i32 = -2
#endif
data_r4 = -2.0_real_kind_4
@@ -867,7 +867,7 @@ CONTAINS
ENDIF
ENDDO
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
f_ptr1 = C_LOC(data0_i32)
f_ptr2 = C_LOC(data_i32(1))
@@ -936,7 +936,7 @@ CONTAINS
ENDIF
ENDDO
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
#ifdef H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE
f_ptr1 = C_LOC(data0_r16)
f_ptr2 = C_LOC(data_r16(1))
+6 -6
View File
@@ -974,7 +974,7 @@ END SUBROUTINE test_array_compound_atomic
INTEGER, PARAMETER :: int_kind_4 = SELECTED_INT_KIND(4) !should map to INTEGER*2 on most modern processors
INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(9) !should map to INTEGER*4 on most modern processors
INTEGER, PARAMETER :: int_kind_16 = SELECTED_INT_KIND(18) !should map to INTEGER*8 on most modern processors
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
INTEGER, PARAMETER :: int_kind_32 = SELECTED_INT_KIND(36) !should map to INTEGER*16 on most modern processors
INTEGER(int_kind_32), DIMENSION(1:4), TARGET :: dset_data_i32, data_out_i32
INTEGER(HID_T) :: dset_id32 ! Dataset identifier
@@ -1052,7 +1052,7 @@ END SUBROUTINE test_array_compound_atomic
dset_data_i4(i) = HUGE(0_int_kind_4)-INT(i,int_kind_4)
dset_data_i8(i) = HUGE(0_int_kind_8)-INT(i,int_kind_8)
dset_data_i16(i) = HUGE(0_int_kind_16)-INT(i,int_kind_16)
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
dset_data_i32(i) = HUGE(0_int_kind_32)-INT(i,int_kind_32)
#endif
dset_data_r(i) = 4.0*ATAN(1.0)-REAL(i-1)
@@ -1080,7 +1080,7 @@ END SUBROUTINE test_array_compound_atomic
CALL check("H5Dcreate_f",error, total_error)
CALL H5Dcreate_f(file_id, dsetname8, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), dspace_id, dset_id16, error)
CALL check("H5Dcreate_f",error, total_error)
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
CALL H5Dcreate_f(file_id, dsetname16, h5kind_to_type(int_kind_32,H5_INTEGER_KIND), dspace_id, dset_id32, error)
CALL check("H5Dcreate_f",error, total_error)
#endif
@@ -1107,7 +1107,7 @@ END SUBROUTINE test_array_compound_atomic
f_ptr = C_LOC(dset_data_i16(1))
CALL h5dwrite_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr, error)
CALL check("H5Dwrite_f",error, total_error)
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
f_ptr = C_LOC(dset_data_i32(1))
CALL h5dwrite_f(dset_id32, h5kind_to_type(int_kind_32,H5_INTEGER_KIND), f_ptr, error)
CALL check("H5Dwrite_f",error, total_error)
@@ -1151,7 +1151,7 @@ END SUBROUTINE test_array_compound_atomic
f_ptr = C_LOC(data_out_i16(1))
CALL h5dread_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
f_ptr = C_LOC(data_out_i32(1))
CALL h5dread_f(dset_id32, h5kind_to_type(int_kind_32,H5_INTEGER_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
@@ -1175,7 +1175,7 @@ END SUBROUTINE test_array_compound_atomic
CALL verify("h5kind_to_type",dset_data_i8(i),data_out_i8(i),total_error)
CALL verify("h5kind_to_type",dset_data_i16(i),data_out_i16(i),total_error)
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
CALL verify("h5kind_to_type",dset_data_i32(i),data_out_i32(i),total_error)
#endif
CALL verify("h5kind_to_type",dset_data_r(i),data_out_r(i),total_error)
+3 -3
View File
@@ -430,7 +430,7 @@ CONTAINS
INTEGER :: type_class
INTEGER(SIZE_T) :: type_size
TYPE(C_PTR) :: f_ptr
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
INTEGER, PARAMETER :: int_kind_32 = SELECTED_INT_KIND(36) !should map to INTEGER*16 on most modern processors
INTEGER(int_kind_32), DIMENSION(DIM1,DIM2,DIM3), TARGET :: dset_data_i32, data_out_i32
CHARACTER(LEN=7), PARAMETER :: dsetname16a = "dset16a" ! Dataset name
@@ -458,7 +458,7 @@ CONTAINS
buf2(i,j,k) = INT(n)
buf3(i,j,k) = INT(n)
buf4(i,j,k) = INT(n)
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
dset_data_i32(i,j,k) = HUGE(1_int_kind_32)-INT(n,int_kind_32)
#endif
n = n + 1
@@ -612,7 +612,7 @@ CONTAINS
! CHECKING NON-NATIVE INTEGER TYPES
!-------------------------------------------------------------------------
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
#ifdef H5_HAVE_Fortran_INTEGER_SIZEOF_16
! (A) CHECKING INTEGER*16
!
! (i.a) write dataset using F2003 interface
+1 -1
View File
@@ -48,7 +48,7 @@
#define @H5_FC_FUNC_@
/* Define if Fortran C_BOOL is different from default LOGICAL */
#define H5_FORTRAN_C_BOOL_IS_UNIQUE @H5_FORTRAN_C_BOOL_IS_UNIQUE@
#cmakedefine H5_FORTRAN_C_BOOL_IS_UNIQUE
/* Define if we have Fortran intrinsic C_SIZEOF */
#cmakedefine H5_FORTRAN_HAVE_C_SIZEOF @H5_FORTRAN_HAVE_C_SIZEOF@