From bea8498f379538862e4e32335f5e56f050a90b4b Mon Sep 17 00:00:00 2001 From: Richard Hodges Date: Fri, 17 May 2019 17:07:48 -0400 Subject: [PATCH] Add cmake and pkg-config support --- CMakeLists.txt | 77 +++++++++++++++++++++++++++++++++++++++++++ cmake/Config.cmake.in | 1 + cmake/WiseEnum.pc.in | 6 ++++ 3 files changed, 84 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/Config.cmake.in create mode 100644 cmake/WiseEnum.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..acb7f7b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,77 @@ +cmake_minimum_required(VERSION 3.10.2) + +project(WiseEnum VERSION 3.0.0) + +option(BUILD_EXAMPLES "Build the examples" OFF) +option(BUILD_TESTS "Build the tests" OFF) + + +file(GLOB interface_hdrs RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*.h") +set_property(SOURCE ${interface_hdrs} PROPERTY HEADER_FILE_ONLY ON) + +add_library(wise_enum INTERFACE) +target_include_directories(wise_enum INTERFACE $) + +# +# installation +# + +set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") + +set(config_install_dir "lib/cmake/${PROJECT_NAME}") +set(include_install_dir "include/wise_enum") +set(lib_install_dir "lib") +set(pkgconfig_install_dir "lib/pkgconfig") + +set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") +set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") +set(pkg_config "${generated_dir}/${PROJECT_NAME}.pc") +set(targets_export_name "${PROJECT_NAME}Targets") +set(namespace "WiseEnum::") + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${version_config}" COMPATIBILITY SameMajorVersion +) + +configure_file("cmake/WiseEnum.pc.in" "${pkg_config}" @ONLY) + +configure_package_config_file( + "cmake/Config.cmake.in" + "${project_config}" + INSTALL_DESTINATION "${config_install_dir}" +) + +INSTALL(TARGETS wise_enum + EXPORT "${targets_export_name}" + INCLUDES DESTINATION "${include_install_dir}" + ARCHIVE DESTINATION "${lib_install_dir}") + +install(FILES ${interface_hdrs} DESTINATION "${include_install_dir}") + +install( + FILES "${project_config}" "${version_config}" + DESTINATION "${config_install_dir}" +) + +install( + FILES "${pkg_config}" + DESTINATION "${pkgconfig_install_dir}" +) + +install( + EXPORT "${targets_export_name}" + NAMESPACE "${namespace}" + DESTINATION "${config_install_dir}" +) + +# +# Build examples +# + +if (BUILD_EXAMPLES) + add_executable(example11 example11.x.cpp) + set_property(TARGET example11 PROPERTY CXX_STANDARD 11) + + add_executable(example example.x.cpp) +endif () diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in new file mode 100644 index 0000000..6e9256e --- /dev/null +++ b/cmake/Config.cmake.in @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") diff --git a/cmake/WiseEnum.pc.in b/cmake/WiseEnum.pc.in new file mode 100644 index 0000000..9eedd59 --- /dev/null +++ b/cmake/WiseEnum.pc.in @@ -0,0 +1,6 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +includedir=${prefix}/include + +Name: @PROJECT_NAME@ +Description: wise_enum by quicknir +Version: @PROJECT_VERSION@