1- # Get the macros and functions we'll need
2- include ("${PROJECT_SOURCE_DIR} /cmake/helper.cmake" )
3-
41# Set a default build type if none was specified
52if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
63 message (STATUS "Setting build type to 'Release' as none was specified." )
@@ -13,11 +10,67 @@ endif()
1310option (BUILD_SHARED_LIBS "Build shared libraries" OFF )
1411
1512# Export all symbols on Windows when building libraries
16- set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
13+ SET (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
1714
1815# Utilize the GNU installation structure
1916include (GNUInstallDirs)
2017
2118# Locate the local include directory
2219set (PROJECT_INCLUDE_DIR ${PROJECT_BINARY_DIR} /include )
23- set (PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} PARENT_SCOPE)
20+ set (PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} PARENT_SCOPE)
21+
22+ if (NOT DEFINED CMAKE_INSTALL_MODULEDIR)
23+ set (
24+ CMAKE_INSTALL_MODULEDIR
25+ "${CMAKE_INSTALL_INCLUDEDIR} /${PROJECT_NAME} /${CMAKE_Fortran_COMPILER_ID} -${CMAKE_Fortran_COMPILER_VERSION} "
26+ CACHE
27+ STRING
28+ "Directory in prefix to install generated module files"
29+ )
30+ endif ()
31+
32+ list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
33+ set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} " PARENT_SCOPE)
34+
35+ # Export a pkg-config file
36+ configure_file (
37+ "${CMAKE_CURRENT_SOURCE_DIR} /template.pc"
38+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc"
39+ @ONLY
40+ )
41+
42+ install (
43+ FILES
44+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc"
45+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig"
46+ )
47+
48+ # Export CMake package file
49+ include (CMakePackageConfigHelpers)
50+ configure_package_config_file(
51+ "${CMAKE_CURRENT_SOURCE_DIR} /template.cmake"
52+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config.cmake"
53+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
54+ )
55+
56+ if (BUILD_SHARED_LIBS OR PROJECT_VERSION_MAJOR EQUAL 0)
57+ # Due to the uncertain ABI compatibility of Fortran shared libraries
58+ # limit compatibility for dynamic linking to same minor version.
59+ set (COMPATIBILITY SameMinorVersion)
60+ else ()
61+ # Require API compatibility via semantic versioning for static linking.
62+ set (COMPATIBILITY SameMajorVersion)
63+ endif ()
64+
65+ write_basic_package_version_file(
66+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake"
67+ VERSION "${PROJECT_VERSION} "
68+ COMPATIBILITY ${COMPATIBILITY}
69+ )
70+
71+ install (
72+ FILES
73+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config.cmake"
74+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake"
75+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
76+ )
0 commit comments