mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
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
This commit is contained in:
parent
b0240030f5
commit
0636395851
@ -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)
|
||||
|
16
config/libhdf5.fpc.in
Normal file
16
config/libhdf5.fpc.in
Normal file
@ -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@
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
)
|
||||
|
@ -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*
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user