Use template for CMake installation.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6353184..8b294ec 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.0)
-project(double-conversion VERSION 2.0.1)
+project(double-conversion VERSION 3.0.0)
set(headers
double-conversion/bignum.h
@@ -28,11 +28,7 @@
$<INSTALL_INTERFACE:include>)
# pick a version #
-set(double-conversion_SOVERSION_MAJOR 1)
-set(double-conversion_SOVERSION_MINOR 0)
-set(double-conversion_SOVERSION_PATCH 0)
-set(double-conversion_SOVERSION ${double-conversion_SOVERSION_MAJOR}.${double-conversion_SOVERSION_MINOR}.${double-conversion_SOVERSION_PATCH})
-set_property(TARGET double-conversion PROPERTY SOVERSION ${double-conversion_SOVERSION})
+set_property(TARGET double-conversion PROPERTY SOVERSION ${PROJECT_VERSION})
# set up testing if requested
option(BUILD_TESTING "Build test programs" OFF)
@@ -42,34 +38,75 @@
add_subdirectory(test)
endif()
-include(GNUInstallDirs)
-install(TARGETS double-conversion EXPORT double-conversionTargets
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-install(FILES ${headers}
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/double-conversion)
+####
+# Installation (https://github.com/forexample/package-example)
+# Layout. This works for all platforms:
+# * <prefix>/lib/cmake/<PROJECT-NAME>
+# * <prefix>/lib/
+# * <prefix>/include/
+set(config_install_dir "lib/cmake/${PROJECT_NAME}")
+set(include_install_dir "include")
+
+set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
+
+# Configuration
+set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
+set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
+set(targets_export_name "${PROJECT_NAME}Targets")
+set(namespace "${PROJECT_NAME}::")
+
+# Include module with function 'write_basic_package_version_file'
include(CMakePackageConfigHelpers)
-configure_package_config_file(
- cmake/double-conversionConfig.cmake.in
- "${CMAKE_CURRENT_BINARY_DIR}/double-conversion/double-conversionConfig.cmake"
- INSTALL_DESTINATION "${LIB_INSTALL_DIR}/double-conversion/cmake")
+
+# Configure '<PROJECT-NAME>ConfigVersion.cmake'
+# Note: PROJECT_VERSION is used as a VERSION
write_basic_package_version_file(
- "${PROJECT_BINARY_DIR}/double-conversion/double-conversionConfigVersion.cmake"
- VERSION ${PROJECT_VERSION}
- COMPATIBILITY SameMajorVersion)
+ "${version_config}" COMPATIBILITY SameMajorVersion
+)
-export(EXPORT double-conversionTargets
- FILE "${CMAKE_CURRENT_BINARY_DIR}/double-conversion/double-conversionTargets.cmake"
- NAMESPACE double-conversion::)
+# Configure '<PROJECT-NAME>Config.cmake'
+# Use variables:
+# * targets_export_name
+# * PROJECT_NAME
+configure_package_config_file(
+ "cmake/Config.cmake.in"
+ "${project_config}"
+ INSTALL_DESTINATION "${config_install_dir}"
+)
-set(ConfigPackageLocation lib/cmake/double-conversion)
-install(EXPORT double-conversionTargets
- FILE double-conversionTargets.cmake
- NAMESPACE double-conversion::
- DESTINATION ${ConfigPackageLocation})
-install(FILES "${CMAKE_CURRENT_BINARY_DIR}/double-conversion/double-conversionConfig.cmake"
- "${CMAKE_CURRENT_BINARY_DIR}/double-conversion/double-conversionConfigVersion.cmake"
- DESTINATION ${ConfigPackageLocation}
- COMPONENT Devel)
+# Targets:
+# * <prefix>/lib/libdouble-conversion.a
+# * header location after install: <prefix>/include/double-conversion/*.h
+# * headers can be included by C++ code `#include <double-conversion/*.h>`
+install(
+ TARGETS double-conversion
+ EXPORT "${targets_export_name}"
+ LIBRARY DESTINATION "lib"
+ ARCHIVE DESTINATION "lib"
+ RUNTIME DESTINATION "bin"
+ INCLUDES DESTINATION "${include_install_dir}"
+)
+
+# Headers:
+# * double-conversion/*.h -> <prefix>/include/double-conversion/*.h
+install(
+ FILES ${headers}
+ DESTINATION "${include_install_dir}/double-conversion"
+)
+
+# Config
+# * <prefix>/lib/cmake/double-conversion/double-conversionConfig.cmake
+# * <prefix>/lib/cmake/double-conversion/double-conversionConfigVersion.cmake
+install(
+ FILES "${project_config}" "${version_config}"
+ DESTINATION "${config_install_dir}"
+)
+
+# Config
+# * <prefix>/lib/cmake/double-conversion/double-conversionTargets.cmake
+install(
+ EXPORT "${targets_export_name}"
+ NAMESPACE "${namespace}"
+ DESTINATION "${config_install_dir}"
+)
diff --git a/cmake/double-conversionConfig.cmake.in b/cmake/Config.cmake.in
similarity index 100%
rename from cmake/double-conversionConfig.cmake.in
rename to cmake/Config.cmake.in