Commit 5eca8a30012b69b76316b71fa391a89fe09256cb

Authored by KOLANICH
Committed by GitHub
1 parent df229cff

Added CPack packaging, pkg-config and CMake version files. (#298)

CMakeLists.txt
... ... @@ -21,6 +21,8 @@ cmake_minimum_required(VERSION 3.1...3.19)
21 21  
22 22 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
23 23 include(cxxopts)
  24 +set("PROJECT_DESCRIPTION" "A header-only lightweight C++ command line option parser")
  25 +set("PROJECT_HOMEPAGE_URL" "https://github.com/jarro2783/cxxopts")
24 26  
25 27 # Get the version of the library
26 28 cxxopts_getversion(VERSION)
... ...
cmake/cxxopts.cmake
... ... @@ -87,18 +87,27 @@ endfunction()
87 87  
88 88 # Helper function to ecapsulate install logic
89 89 function(cxxopts_install_logic)
90   - set(CXXOPTS_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/cxxopts" CACHE STRING "Installation directory for cmake files, relative to ${CMAKE_INSTALL_PREFIX}.")
  90 + string(REPLACE "/${CMAKE_LIBRARY_ARCHITECTURE}" "" CMAKE_INSTALL_LIBDIR_ARCHIND "${CMAKE_INSTALL_LIBDIR}")
  91 + set(CXXOPTS_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR_ARCHIND}/cmake/cxxopts" CACHE STRING "Installation directory for cmake files, relative to ${CMAKE_INSTALL_PREFIX}.")
91 92 set(version_config "${PROJECT_BINARY_DIR}/cxxopts-config-version.cmake")
92 93 set(project_config "${PROJECT_BINARY_DIR}/cxxopts-config.cmake")
93 94 set(targets_export_name cxxopts-targets)
  95 + set(PackagingTemplatesDir "${PROJECT_SOURCE_DIR}/packaging")
  96 +
  97 +
  98 + if(${CMAKE_VERSION} VERSION_GREATER "3.14")
  99 + set(OPTIONAL_ARCH_INDEPENDENT "ARCH_INDEPENDENT")
  100 + endif()
94 101  
95 102 # Generate the version, config and target files into the build directory.
96 103 write_basic_package_version_file(
97 104 ${version_config}
98 105 VERSION ${VERSION}
99   - COMPATIBILITY AnyNewerVersion)
  106 + COMPATIBILITY AnyNewerVersion
  107 + ${OPTIONAL_ARCH_INDEPENDENT}
  108 + )
100 109 configure_package_config_file(
101   - ${PROJECT_SOURCE_DIR}/cxxopts-config.cmake.in
  110 + ${PackagingTemplatesDir}/cxxopts-config.cmake.in
102 111 ${project_config}
103 112 INSTALL_DESTINATION ${CXXOPTS_CMAKE_DIR})
104 113 export(TARGETS cxxopts NAMESPACE cxxopts::
... ... @@ -114,4 +123,36 @@ function(cxxopts_install_logic)
114 123 # Install the header file and export the target
115 124 install(TARGETS cxxopts EXPORT ${targets_export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR})
116 125 install(FILES ${PROJECT_SOURCE_DIR}/include/cxxopts.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
  126 +
  127 +
  128 + set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
  129 + set(CPACK_PACKAGE_VENDOR "cxxopt developers")
  130 + set(CPACK_PACKAGE_DESCRIPTION "${PROJECT_DESCRIPTION}")
  131 + set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
  132 + set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
  133 + set(CPACK_PACKAGE_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL}")
  134 + set(CPACK_PACKAGE_MAINTAINER "${CPACK_PACKAGE_VENDOR}")
  135 + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_MAINTAINER}")
  136 + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
  137 + set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
  138 +
  139 + set(CPACK_DEBIAN_PACKAGE_NAME "lib${PROJECT_NAME}-dev")
  140 + set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6-dev")
  141 + set(CPACK_DEBIAN_PACKAGE_SUGGESTS "cmake, pkg-config, pkg-conf")
  142 +
  143 + set(CPACK_RPM_PACKAGE_NAME "lib${PROJECT_NAME}-devel")
  144 + set(CPACK_RPM_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS}")
  145 +
  146 + set(CPACK_DEB_COMPONENT_INSTALL ON)
  147 + set(CPACK_RPM_COMPONENT_INSTALL ON)
  148 + set(CPACK_NSIS_COMPONENT_INSTALL ON)
  149 + set(CPACK_DEBIAN_COMPRESSION_TYPE "xz")
  150 +
  151 + set(PKG_CONFIG_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc")
  152 + configure_file("${PackagingTemplatesDir}/pkgconfig.pc.in" "${PKG_CONFIG_FILE_NAME}" @ONLY)
  153 + install(FILES "${PKG_CONFIG_FILE_NAME}"
  154 + DESTINATION "${CMAKE_INSTALL_LIBDIR_ARCHIND}/pkgconfig"
  155 + )
  156 +
  157 + include(CPack)
117 158 endfunction()
... ...
cxxopts-config.cmake.in renamed to packaging/cxxopts-config.cmake.in
packaging/pkgconfig.pc.in 0 → 100644
  1 +prefix=@CMAKE_INSTALL_PREFIX@
  2 +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
  3 +
  4 +Name: @PROJECT_NAME@
  5 +Description: @PROJECT_DESCRIPTION@
  6 +Version: @PROJECT_VERSION@
  7 +Cflags: -I${includedir}
... ...