summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/nowide/cmake/InstallTargets.cmake
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/nowide/cmake/InstallTargets.cmake
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/nowide/cmake/InstallTargets.cmake')
-rw-r--r--src/boost/libs/nowide/cmake/InstallTargets.cmake73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/boost/libs/nowide/cmake/InstallTargets.cmake b/src/boost/libs/nowide/cmake/InstallTargets.cmake
new file mode 100644
index 000000000..9022b325d
--- /dev/null
+++ b/src/boost/libs/nowide/cmake/InstallTargets.cmake
@@ -0,0 +1,73 @@
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+# Install all passed libraries including <PROJECT_NAME>Config.cmake and <PROJECT_NAME>ConfigVersion.cmake
+# Assumes that your headers are in 'include/'
+# Uses GNUInstallDirs to determine install locations
+# Note: Use of BUILD_INTERFACE for headers is not required as it will be fixed up
+# Arguments:
+# - TARGETS: List of targets to install
+# - NAMESPACE: Namespace to use (Installed libraries will be available as "Namespace::Name")
+# - CONFIG_FILE: If passed, this will be used to configure the *Config.cmake,
+# else a reasonable default will be used which is enough if there are no dependencies
+# - VERSION_COMPATIBILITY: Compatibility with requested version. Defaults to SemVer semantics (SameMajorVersion)
+function(install_targets)
+ cmake_parse_arguments(PARSE_ARGV 0 ARG "" "NAMESPACE;CONFIG_FILE;VERSION_COMPATIBILITY" "TARGETS")
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Invalid argument(s): ${ARG_UNPARSED_ARGUMENTS}")
+ endif()
+ if(ARG_NAMESPACE)
+ string(APPEND ARG_NAMESPACE "::")
+ endif()
+ if(NOT ARG_CONFIG_FILE)
+ set(ARG_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake.in")
+ file(WRITE ${ARG_CONFIG_FILE}
+ "@PACKAGE_INIT@\n"
+ "include(\"\${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake\")\n"
+ "check_required_components(\"@PROJECT_NAME@\")\n"
+ )
+ endif()
+ if(NOT ARG_VERSION_COMPATIBILITY)
+ set(ARG_VERSION_COMPATIBILITY SameMajorVersion)
+ endif()
+
+ # Fixup INTERFACE_INCLUDE_DIRECTORIES:
+ # Wrap source includes into BUILD_INTERFACE
+ foreach(tgt IN LISTS ARG_TARGETS)
+ get_target_property(old_inc_dirs ${tgt} INTERFACE_INCLUDE_DIRECTORIES)
+ set(inc_dirs "")
+ foreach(dir IN LISTS old_inc_dirs)
+ string(FIND "${dir}" "${PROJECT_SOURCE_DIR}" pos)
+ string(FIND "${dir}" "${PROJECT_BINARY_DIR}" pos2)
+ if(pos EQUAL 0 OR pos2 EQUAL 0)
+ set(dir "$<BUILD_INTERFACE:${dir}>")
+ endif()
+ list(APPEND inc_dirs "${dir}")
+ endforeach()
+ set_target_properties(${tgt} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${inc_dirs}")
+ endforeach()
+
+ install(TARGETS ${ARG_TARGETS}
+ EXPORT ${PROJECT_NAME}Targets
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ )
+ install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+ set(configFile ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake)
+ set(versionFile ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake)
+ set(configInstallDestination lib/cmake/${PROJECT_NAME})
+
+ configure_package_config_file(${ARG_CONFIG_FILE} ${configFile} INSTALL_DESTINATION ${configInstallDestination})
+ write_basic_package_version_file(${versionFile} COMPATIBILITY ${ARG_VERSION_COMPATIBILITY})
+
+ install(FILES ${configFile} ${versionFile} DESTINATION ${configInstallDestination})
+
+ install(
+ EXPORT ${PROJECT_NAME}Targets
+ NAMESPACE ${ARG_NAMESPACE}
+ DESTINATION ${configInstallDestination}
+ )
+endfunction()