diff options
author | KOLANICH <KOLANICH@users.noreply.github.com> | 2021-07-31 03:34:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-31 03:34:21 +0300 |
commit | 5eca8a30012b69b76316b71fa391a89fe09256cb (patch) | |
tree | c9869911e17ca19fdbf4a4b419584699ed026118 | |
parent | df229cff0d5b96e146f3f11441f714e8e240cad0 (diff) |
Added CPack packaging, pkg-config and CMake version files. (#298)
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | cmake/cxxopts.cmake | 47 | ||||
-rw-r--r-- | packaging/cxxopts-config.cmake.in (renamed from cxxopts-config.cmake.in) | 0 | ||||
-rw-r--r-- | packaging/pkgconfig.pc.in | 7 |
4 files changed, 53 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 7db33e6..4c1a686 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,8 @@ cmake_minimum_required(VERSION 3.1...3.19) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") include(cxxopts) +set("PROJECT_DESCRIPTION" "A header-only lightweight C++ command line option parser") +set("PROJECT_HOMEPAGE_URL" "https://github.com/jarro2783/cxxopts") # Get the version of the library cxxopts_getversion(VERSION) diff --git a/cmake/cxxopts.cmake b/cmake/cxxopts.cmake index e65c4b5..46e87ba 100644 --- a/cmake/cxxopts.cmake +++ b/cmake/cxxopts.cmake @@ -87,18 +87,27 @@ endfunction() # Helper function to ecapsulate install logic function(cxxopts_install_logic) - set(CXXOPTS_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/cxxopts" CACHE STRING "Installation directory for cmake files, relative to ${CMAKE_INSTALL_PREFIX}.") + string(REPLACE "/${CMAKE_LIBRARY_ARCHITECTURE}" "" CMAKE_INSTALL_LIBDIR_ARCHIND "${CMAKE_INSTALL_LIBDIR}") + set(CXXOPTS_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR_ARCHIND}/cmake/cxxopts" CACHE STRING "Installation directory for cmake files, relative to ${CMAKE_INSTALL_PREFIX}.") set(version_config "${PROJECT_BINARY_DIR}/cxxopts-config-version.cmake") set(project_config "${PROJECT_BINARY_DIR}/cxxopts-config.cmake") set(targets_export_name cxxopts-targets) + set(PackagingTemplatesDir "${PROJECT_SOURCE_DIR}/packaging") + + + if(${CMAKE_VERSION} VERSION_GREATER "3.14") + set(OPTIONAL_ARCH_INDEPENDENT "ARCH_INDEPENDENT") + endif() # Generate the version, config and target files into the build directory. write_basic_package_version_file( ${version_config} VERSION ${VERSION} - COMPATIBILITY AnyNewerVersion) + COMPATIBILITY AnyNewerVersion + ${OPTIONAL_ARCH_INDEPENDENT} + ) configure_package_config_file( - ${PROJECT_SOURCE_DIR}/cxxopts-config.cmake.in + ${PackagingTemplatesDir}/cxxopts-config.cmake.in ${project_config} INSTALL_DESTINATION ${CXXOPTS_CMAKE_DIR}) export(TARGETS cxxopts NAMESPACE cxxopts:: @@ -114,4 +123,36 @@ function(cxxopts_install_logic) # Install the header file and export the target install(TARGETS cxxopts EXPORT ${targets_export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES ${PROJECT_SOURCE_DIR}/include/cxxopts.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + + set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") + set(CPACK_PACKAGE_VENDOR "cxxopt developers") + set(CPACK_PACKAGE_DESCRIPTION "${PROJECT_DESCRIPTION}") + set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") + set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") + set(CPACK_PACKAGE_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL}") + set(CPACK_PACKAGE_MAINTAINER "${CPACK_PACKAGE_VENDOR}") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_MAINTAINER}") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") + set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + + set(CPACK_DEBIAN_PACKAGE_NAME "lib${PROJECT_NAME}-dev") + set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6-dev") + set(CPACK_DEBIAN_PACKAGE_SUGGESTS "cmake, pkg-config, pkg-conf") + + set(CPACK_RPM_PACKAGE_NAME "lib${PROJECT_NAME}-devel") + set(CPACK_RPM_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS}") + + set(CPACK_DEB_COMPONENT_INSTALL ON) + set(CPACK_RPM_COMPONENT_INSTALL ON) + set(CPACK_NSIS_COMPONENT_INSTALL ON) + set(CPACK_DEBIAN_COMPRESSION_TYPE "xz") + + set(PKG_CONFIG_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc") + configure_file("${PackagingTemplatesDir}/pkgconfig.pc.in" "${PKG_CONFIG_FILE_NAME}" @ONLY) + install(FILES "${PKG_CONFIG_FILE_NAME}" + DESTINATION "${CMAKE_INSTALL_LIBDIR_ARCHIND}/pkgconfig" + ) + + include(CPack) endfunction() diff --git a/cxxopts-config.cmake.in b/packaging/cxxopts-config.cmake.in index c9efaf1..c9efaf1 100644 --- a/cxxopts-config.cmake.in +++ b/packaging/cxxopts-config.cmake.in diff --git a/packaging/pkgconfig.pc.in b/packaging/pkgconfig.pc.in new file mode 100644 index 0000000..9b6a44c --- /dev/null +++ b/packaging/pkgconfig.pc.in @@ -0,0 +1,7 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: @PROJECT_NAME@ +Description: @PROJECT_DESCRIPTION@ +Version: @PROJECT_VERSION@ +Cflags: -I${includedir} |