summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllen Byrne <50328838+byrnHDF@users.noreply.github.com>2022-07-26 16:02:40 (GMT)
committerGitHub <noreply@github.com>2022-07-26 16:02:40 (GMT)
commit06363958513ad26b2c21cd99858183c97e6d223a (patch)
tree941a6beb2c1372f1955562c6712fd91c22be834b
parentb0240030f5dd1c3da65fd66b76fcdfe13604489c (diff)
downloadhdf5-06363958513ad26b2c21cd99858183c97e6d223a.zip
hdf5-06363958513ad26b2c21cd99858183c97e6d223a.tar.gz
hdf5-06363958513ad26b2c21cd99858183c97e6d223a.tar.bz2
Implement improved CMake fortran module folder from GH#1411 (#1922)
* Implement improved CMake fortran module folder from GH#1411 * Update docs * Fix whitespace * Fix name case
-rw-r--r--config/cmake_ext_mod/HDFMacros.cmake5
-rw-r--r--config/libhdf5.fpc.in16
-rw-r--r--configure.ac7
-rw-r--r--fortran/src/CMakeLists.txt11
-rw-r--r--fortran/src/Makefile.am8
-rw-r--r--fortran/src/h5fc.in3
-rw-r--r--hl/fortran/src/CMakeLists.txt11
-rw-r--r--hl/fortran/src/Makefile.am8
-rw-r--r--release_docs/INSTALL_CMake.txt12
-rw-r--r--release_docs/RELEASE.txt16
10 files changed, 77 insertions, 20 deletions
diff --git a/config/cmake_ext_mod/HDFMacros.cmake b/config/cmake_ext_mod/HDFMacros.cmake
index 260fd55..6f517bd 100644
--- a/config/cmake_ext_mod/HDFMacros.cmake
+++ b/config/cmake_ext_mod/HDFMacros.cmake
@@ -344,6 +344,9 @@ macro (HDF_DIR_PATHS package_prefix)
if (NOT ${package_prefix}_INSTALL_INCLUDE_DIR)
set (${package_prefix}_INSTALL_INCLUDE_DIR include)
endif ()
+ if (NOT ${package_prefix}_INSTALL_MODULE_DIR)
+ set (${package_prefix}_INSTALL_MODULE_DIR mod)
+ endif ()
if (NOT ${package_prefix}_INSTALL_DATA_DIR)
if (NOT MSVC)
if (APPLE)
@@ -412,7 +415,7 @@ macro (HDF_DIR_PATHS package_prefix)
${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all static libraries."
)
set (CMAKE_Fortran_MODULE_DIRECTORY
- ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all fortran modules."
+ ${PROJECT_BINARY_DIR}/mod CACHE PATH "Single Directory for all fortran modules."
)
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(_isMultiConfig)
diff --git a/config/libhdf5.fpc.in b/config/libhdf5.fpc.in
new file mode 100644
index 0000000..c28c2f9
--- /dev/null
+++ b/config/libhdf5.fpc.in
@@ -0,0 +1,16 @@
+prefix=@_PKG_CONFIG_PREFIX@
+exec_prefix=@_PKG_CONFIG_EXEC_PREFIX@
+libdir=@_PKG_CONFIG_LIBDIR@
+includedir=@_PKG_CONFIG_INCLUDEDIR@
+moddir=@_PKG_CONFIG_MODULEDIR@
+
+Name: @_PKG_CONFIG_LIBNAME@
+Description: HDF5 (Hierarchical Data Format 5) Software Library
+Version: @_PKG_CONFIG_VERSION@
+
+Cflags: -I${includedir}
+Fflags: -I${moddir}
+Libs: -L${libdir} @_PKG_CONFIG_SH_LIBS@
+Requires: @_PKG_CONFIG_REQUIRES@
+Libs.private: @_PKG_CONFIG_LIBS_PRIVATE@ @_PKG_CONFIG_LIBS@
+Requires.private: @_PKG_CONFIG_REQUIRES_PRIVATE@
diff --git a/configure.ac b/configure.ac
index 7afdc53..5b1ecb5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -618,6 +618,13 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
AC_PROG_FC([PAC_FC_SEARCH_LIST],)
AC_F9X_MODS
+ ## Allow setting the fortran module install dir
+ AC_ARG_WITH([fmoddir],
+ [AS_HELP_STRING([--with-fmoddir=DIR], [Fortran module install directory])],
+ [fmoddir=$withval],
+ [fmoddir="\${includedir}"])
+ AC_SUBST([fmoddir], [$fmoddir])
+
## Change to the Fortran 90 language
AC_LANG_PUSH(Fortran)
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index 639391e..9f35fa5 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -320,7 +320,7 @@ if (NOT ONLY_SHARED_LIBS)
add_library (${HDF5_F90_LIB_TARGET} STATIC ${f90_F_SOURCES})
target_include_directories (${HDF5_F90_LIB_TARGET}
PRIVATE "${HDF5_F90_SRC_SOURCE_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/static;${HDF5_F90_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_Fortran_INCLUDE_DIRS}>"
- INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/static>"
+ INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${HDF5_INSTALL_MODULE_DIR}/static>"
)
target_compile_options(${HDF5_F90_LIB_TARGET} PRIVATE "${HDF5_CMAKE_Fortran_FLAGS}")
target_compile_definitions(${HDF5_F90_LIB_TARGET}
@@ -354,7 +354,7 @@ if (BUILD_SHARED_LIBS)
add_library (${HDF5_F90_LIBSH_TARGET} SHARED ${f90_F_SOURCES_SHARED})
target_include_directories (${HDF5_F90_LIBSH_TARGET}
PRIVATE "${HDF5_F90_SRC_SOURCE_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/shared;${HDF5_F90_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_Fortran_INCLUDE_DIRS}>"
- INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/shared>"
+ INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${HDF5_INSTALL_MODULE_DIR}/shared>"
)
target_compile_options(${HDF5_F90_LIBSH_TARGET} PRIVATE "${HDF5_CMAKE_Fortran_FLAGS}")
target_compile_definitions(${HDF5_F90_LIBSH_TARGET}
@@ -447,7 +447,7 @@ if (NOT ONLY_SHARED_LIBS)
FILES
${mod_files}
DESTINATION
- ${HDF5_INSTALL_INCLUDE_DIR}/static
+ ${HDF5_INSTALL_MODULE_DIR}/static
COMPONENT
fortheaders
)
@@ -490,7 +490,7 @@ if (BUILD_SHARED_LIBS)
FILES
${modsh_files}
DESTINATION
- ${HDF5_INSTALL_INCLUDE_DIR}/shared
+ ${HDF5_INSTALL_MODULE_DIR}/shared
COMPONENT
fortheaders
)
@@ -539,6 +539,7 @@ set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib)
set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include)
+set (_PKG_CONFIG_MODULEDIR \${prefix}/mod)
set (_PKG_CONFIG_LIBNAME "${HDF5_F90_LIB_CORENAME}")
set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
@@ -555,7 +556,7 @@ set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}")
set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}")
configure_file (
- ${HDF_CONFIG_DIR}/libhdf5.pc.in
+ ${HDF_CONFIG_DIR}/libhdf5.fpc.in
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_F90_LIB_CORENAME}.pc
@ONLY
)
diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am
index 65ffa0c..94fcb5a 100644
--- a/fortran/src/Makefile.am
+++ b/fortran/src/Makefile.am
@@ -22,7 +22,7 @@ include $(top_srcdir)/config/lt_vers.am
# Include src directory in both Fortran and C flags (C compiler is used
# for linking).
AM_CPPFLAGS+=-I$(top_srcdir)/src
-AM_FCFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/fortran/src
+AM_FCFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/fortran/src $(F9XMODFLAG)$(fmoddir)
AM_FCLIBS=$(LIBHDF5)
@@ -72,15 +72,15 @@ clean-local:
install-data-local:
@if test -n "$(F9XMODEXT)" && test "X$(F9XMODEXT)" != "Xo"; then \
- $(CP) $(top_builddir)/$(subdir)/*.$(F9XMODEXT) $(DESTDIR)$(includedir)/. ; \
+ $(CP) $(top_builddir)/$(subdir)/*.$(F9XMODEXT) $(DESTDIR)$(fmoddir)/. ; \
fi
$(CP) $(top_builddir)/$(subdir)/H5f90i_gen.h $(DESTDIR)$(includedir)/.
$(CP) $(top_srcdir)/fortran/src/H5f90i.h $(DESTDIR)$(includedir)/.
uninstall-local:
@if test -n "$(F9XMODEXT)" -a "X$(F9XMODEXT)" != "Xo"; then \
- if test -f "$(includedir)/hdf5.$(F9XMODEXT)" -o -f "$(includedir)/HDF5.$(F9XMODEXT)"; then \
- set -x; $(RM) $(DESTDIR)$(includedir)/*.$(F9XMODEXT); \
+ if test -f "$(fmoddir)/hdf5.$(F9XMODEXT)" -o -f "$(fmoddir)/HDF5.$(F9XMODEXT)"; then \
+ set -x; $(RM) $(DESTDIR)$(fmoddir)/*.$(F9XMODEXT); \
fi; \
fi; \
$(RM) $(DESTDIR)$(bindir)/$(H5FC_NAME)
diff --git a/fortran/src/h5fc.in b/fortran/src/h5fc.in
index 79401f8..d9fc1f5 100644
--- a/fortran/src/h5fc.in
+++ b/fortran/src/h5fc.in
@@ -26,6 +26,7 @@ prefix="@prefix@"
exec_prefix="@exec_prefix@"
libdir="@libdir@"
includedir="@includedir@"
+fmoddir="@fmoddir@"
HL="@HL@"
############################################################################
@@ -278,7 +279,7 @@ done
# It's possible that there isn't a modules flag...
fmodules=""
if test -n "$F9XMODFLAG"; then
- fmodules="${F9XMODFLAG}${includedir}"
+ fmodules="${F9XMODFLAG}${fmoddir}"
fi
if test "x$do_compile" = "xyes"; then
diff --git a/hl/fortran/src/CMakeLists.txt b/hl/fortran/src/CMakeLists.txt
index 3525e51..1063015 100644
--- a/hl/fortran/src/CMakeLists.txt
+++ b/hl/fortran/src/CMakeLists.txt
@@ -173,7 +173,7 @@ if (NOT ONLY_SHARED_LIBS)
add_library (${HDF5_HL_F90_LIB_TARGET} STATIC ${HDF5_HL_F90_F_SOURCES})
target_include_directories (${HDF5_HL_F90_LIB_TARGET}
PRIVATE "${HDF5_F90_BINARY_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/static;$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_Fortran_INCLUDE_DIRS}>"
- INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/static>"
+ INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${HDF5_INSTALL_MODULE_DIR}/static>"
)
target_compile_options(${HDF5_HL_F90_LIB_TARGET} PRIVATE "${HDF5_CMAKE_Fortran_FLAGS}")
target_compile_definitions(${HDF5_HL_F90_LIB_TARGET}
@@ -200,7 +200,7 @@ if (BUILD_SHARED_LIBS)
add_library (${HDF5_HL_F90_LIBSH_TARGET} SHARED ${HDF5_HL_F90_F_SOURCES_SHARED})
target_include_directories (${HDF5_HL_F90_LIBSH_TARGET}
PRIVATE "${HDF5_F90_BINARY_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/shared;$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_Fortran_INCLUDE_DIRS}>"
- INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/shared>"
+ INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${HDF5_INSTALL_MODULE_DIR}/shared>"
)
target_compile_options(${HDF5_HL_F90_LIBSH_TARGET} PRIVATE "${HDF5_CMAKE_Fortran_FLAGS}")
target_compile_definitions(${HDF5_HL_F90_LIBSH_TARGET}
@@ -249,7 +249,7 @@ if (NOT ONLY_SHARED_LIBS)
FILES
${mod_files}
DESTINATION
- ${HDF5_INSTALL_INCLUDE_DIR}/static
+ ${HDF5_INSTALL_MODULE_DIR}/static
COMPONENT
fortheaders
)
@@ -277,7 +277,7 @@ if (BUILD_SHARED_LIBS)
FILES
${modsh_files}
DESTINATION
- ${HDF5_INSTALL_INCLUDE_DIR}/shared
+ ${HDF5_INSTALL_MODULE_DIR}/shared
COMPONENT
fortheaders
)
@@ -326,6 +326,7 @@ set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib)
set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include)
+set (_PKG_CONFIG_MODULEDIR \${prefix}/mod)
set (_PKG_CONFIG_LIBNAME "${HDF5_HL_F90_LIB_CORENAME}")
set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
@@ -342,7 +343,7 @@ set (_PKG_CONFIG_REQUIRES "${HDF5_F90_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}")
set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_F90_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}")
configure_file (
- ${HDF_CONFIG_DIR}/libhdf5.pc.in
+ ${HDF_CONFIG_DIR}/libhdf5.fpc.in
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_HL_F90_LIB_CORENAME}.pc
@ONLY
)
diff --git a/hl/fortran/src/Makefile.am b/hl/fortran/src/Makefile.am
index d1ca804..ca4ea64 100644
--- a/hl/fortran/src/Makefile.am
+++ b/hl/fortran/src/Makefile.am
@@ -22,7 +22,7 @@ include $(top_srcdir)/config/lt_vers.am
AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/hl/src -I$(top_builddir)/hl/src \
-I$(top_srcdir)/fortran/src -I$(top_builddir)/fortran/src
-AM_FCFLAGS+=-I$(top_builddir)/fortran/src $(F9XMODFLAG)$(top_builddir)/fortran/src
+AM_FCFLAGS+=-I$(top_builddir)/fortran/src $(F9XMODFLAG)$(top_builddir)/fortran/src $(F9XMODFLAG)$(fmoddir)
# Our main target, the high-level fortran library
lib_LTLIBRARIES=libhdf5hl_fortran.la
@@ -78,13 +78,13 @@ clean-local:
install-data-local:
@if test -n "$(F9XMODEXT)" && test "X$(F9XMODEXT)" != "Xo"; then \
- $(CP) $(top_builddir)/$(subdir)/*.$(F9XMODEXT) $(DESTDIR)$(includedir)/. ; \
+ $(CP) $(top_builddir)/$(subdir)/*.$(F9XMODEXT) $(DESTDIR)$(fmoddir)/. ; \
fi
uninstall-local:
@if test -n "$(F9XMODEXT)" -a "X$(F9XMODEXT)" != "Xo"; then \
- if test -f "$(includedir)/hdf5.$(F9XMODEXT)" -o -f "$(DESTDIR)$(includedir)/HDF5.$(F9XMODEXT)"; then \
- set -x; $(RM) $(includedir)/*.$(F9XMODEXT); \
+ if test -f "$(fmoddir)/hdf5.$(F9XMODEXT)" -o -f "$(DESTDIR)$(fmoddir)/HDF5.$(F9XMODEXT)"; then \
+ set -x; $(RM) $(fmoddir)/*.$(F9XMODEXT); \
fi; \
fi
$(RM) $(DESTDIR)$(libdir)/libhdf5_hl_fortran*
diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt
index c977617..e1ae010 100644
--- a/release_docs/INSTALL_CMake.txt
+++ b/release_docs/INSTALL_CMake.txt
@@ -742,6 +742,18 @@ HDF5_BUILD_HL_LIB "Build HIGH Level HDF5 Library" ON
HDF5_BUILD_TOOLS "Build HDF5 Tools" ON
HDF5_BUILD_HL_TOOLS "Build HIGH Level HDF5 Tools" ON
+---------------- HDF5 Folder Build Options ---------------------
+Defaults relative to $<INSTALL_PREFIX>
+HDF5_INSTALL_BIN_DIR "bin"
+HDF5_INSTALL_LIB_DIR "lib"
+HDF5_INSTALL_INCLUDE_DIR "include"
+HDF5_INSTALL_MODULE_DIR "mod"
+HDF5_INSTALL_CMAKE_DIR "cmake"
+if (MSVC)
+ HDF5_INSTALL_DATA_DIR "."
+else ()
+ HDF5_INSTALL_DATA_DIR "share"
+
---------------- HDF5 Advanced Options ---------------------
ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF
ALLOW_UNSUPPORTED "Allow unsupported combinations of configure options" OFF
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 67d90fe..7f2468d 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -47,6 +47,22 @@ New Features
Configuration:
-------------
+ - Correct the usage of CMAKE_Fortran_MODULE_DIRECTORY and where to
+ install Fortran mod files.
+
+ The Fortran modules files, ending in .mod are files describing a
+ Fortran 90 (and above) module API and ABI. These are not like C
+ header files describing an API, they are compiler dependent and
+ arch dependent, and not easily readable by a human being. They are
+ nevertheless searched for in the includes directories by gfortran
+ (in directories specified with -I).
+
+ Autotools configure uses the -fmoddir option to specify the folder.
+ CMake will use "mod" folder by default unless overridden by the CMake
+ variable; HDF5_INSTALL_MODULE_DIR.
+
+ (ADB - 2022/07/21)
+
- HDF5 memory allocation sanity checking is now off by default for
Autotools debug builds