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,64 @@ 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
21- # Locate the local include directory
22- set (PROJECT_INCLUDE_DIR ${PROJECT_BINARY_DIR} /include)
23- set (PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} PARENT_SCOPE )
18+ # Module directory
19+ if (NOT DEFINED CMAKE_INSTALL_MODULEDIR)
20+ set (
21+ CMAKE_INSTALL_MODULEDIR
22+ "${CMAKE_INSTALL_INCLUDEDIR} /${PROJECT_NAME} /${CMAKE_Fortran_COMPILER_ID} -${CMAKE_Fortran_COMPILER_VERSION} "
23+ CACHE
24+ STRING
25+ "Directory in prefix to install generated module files"
26+ )
27+ endif ()
28+
29+ list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
30+ set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} " PARENT_SCOPE )
31+
32+ # Export a pkg-config file
33+ configure_file (
34+ "${CMAKE_CURRENT_SOURCE_DIR} /template.pc"
35+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc"
36+ @ONLY
37+ )
38+
39+ install (
40+ FILES
41+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc"
42+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig"
43+ )
44+
45+ # Export CMake package file
46+ include (CMakePackageConfigHelpers )
47+ configure_package_config_file (
48+ "${CMAKE_CURRENT_SOURCE_DIR} /template.cmake"
49+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config.cmake"
50+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
51+ )
52+
53+ if (BUILD_SHARED_LIBS OR PROJECT_VERSION_MAJOR EQUAL 0)
54+ # Due to the uncertain ABI compatibility of Fortran shared libraries
55+ # limit compatibility for dynamic linking to same minor version.
56+ set (COMPATIBILITY SameMinorVersion)
57+ else ()
58+ # Require API compatibility via semantic versioning for static linking.
59+ set (COMPATIBILITY SameMajorVersion)
60+ endif ()
61+
62+ write_basic_package_version_file (
63+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake"
64+ VERSION "${PROJECT_VERSION} "
65+ COMPATIBILITY ${COMPATIBILITY}
66+ )
67+
68+ install (
69+ FILES
70+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config.cmake"
71+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake"
72+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
73+ )
0 commit comments