diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e9a82a2 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,130 @@ +cmake_minimum_required(VERSION 3.0) +project(double-conversion VERSION 3.2.0) + +option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" OFF) + +if(BUILD_SHARED_LIBS AND MSVC) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) +endif() + +set(headers + double-conversion/bignum.h + double-conversion/cached-powers.h + double-conversion/diy-fp.h + double-conversion/double-conversion.h + double-conversion/double-to-string.h + double-conversion/fast-dtoa.h + double-conversion/fixed-dtoa.h + double-conversion/ieee.h + double-conversion/string-to-double.h + double-conversion/strtod.h + double-conversion/utils.h) + +add_library(double-conversion + double-conversion/bignum.cc + double-conversion/bignum-dtoa.cc + double-conversion/cached-powers.cc + double-conversion/double-to-string.cc + double-conversion/fast-dtoa.cc + double-conversion/fixed-dtoa.cc + double-conversion/string-to-double.cc + double-conversion/strtod.cc + ${headers}) +target_include_directories( + double-conversion PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) + +# pick a version # +set_target_properties(double-conversion PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 3) + +# set up testing if requested +option(BUILD_TESTING "Build test programs" OFF) +if(BUILD_TESTING) + enable_testing() + include(CTest) + add_subdirectory(test) +endif() + +#### +# Installation (https://github.com/forexample/package-example) + +include(GNUInstallDirs) + +# Layout. This works for all platforms: +# * <prefix>/lib/cmake/<PROJECT-NAME> +# * <prefix>/lib/ +# * <prefix>/include/ +set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") + +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 '<PROJECT-NAME>ConfigVersion.cmake' +# Note: PROJECT_VERSION is used as a VERSION +write_basic_package_version_file( + "${version_config}" COMPATIBILITY SameMajorVersion +) + +# 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}" +) + +# 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 "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + +# Headers: +# * double-conversion/*.h -> <prefix>/include/double-conversion/*.h +install( + FILES ${headers} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/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}" +) + +if (MSVC AND BUILD_SHARED_LIBS) + # Install companion PDB for Visual Studio + install( + FILES $<TARGET_PDB_FILE:double-conversion> + TYPE BIN + OPTIONAL + ) +endif() + |