Skip to content
Open
46 changes: 36 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,30 @@

# Only need the basic minimum of project, add_library, and
# target_include_directories commands.
cmake_minimum_required( VERSION 3.0 )
cmake_minimum_required( VERSION 3.12 )

# Don't set VERSION, as that's a pita to keep up to date with the version
# header. And don't set LANGUAGES as we are multi-language and header
# only, so it's irrelevant.
project( lyra )
project( lyra
VERSION "1.6"
DESCRIPTION "A simple to use, composing, header only, command line arguments parser for C++ 11 and beyond."
HOMEPAGE_URL "https://github.com/bfgroup/Lyra"
)
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_PACKAGE_VENDOR "${PROJECT_NAME} developers")
set(CPACK_PACKAGE_DESCRIPTION "${PROJECT_DESCRIPTION}")
set(CPACK_DEBIAN_PACKAGE_NAME "lib${CPACK_PACKAGE_NAME}-dev")
set(CPACK_RPM_PACKAGE_NAME "lib${CPACK_PACKAGE_NAME}-devel")
Copy link

@jbadwaik jbadwaik Jul 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you sure that the CPack command won't fail because it will try to generate packages for every single distribution listed here? May be make sure that the cpack won't fail on different platforms.

This is something you can write a test for on each platform in the CI. The CI should generate cpack packages and succeed in doing so.

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.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.adoc")

include(GNUInstallDirs)
string(REPLACE "/${CMAKE_LIBRARY_ARCHITECTURE}" "" INSTALL_LIBDIR_ARCHIND "${CMAKE_INSTALL_LIBDIR}")

# Simple INTERFACE, and header only, library target.
add_library( lyra INTERFACE )
Expand All @@ -35,20 +53,21 @@ target_include_directories(
lyra
INTERFACE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

# Add an alias to public name.
add_library( bfg::lyra ALIAS lyra )

## Installation Code
include(GNUInstallDirs)
set(LYRA_INSTALL_CONFIGDIR "${INSTALL_LIBDIR_ARCHIND}/cmake/lyra")
set(PkgConfigTemplatesDir "${CMAKE_CURRENT_SOURCE_DIR}/data/pkgconfig")

## Installation Code
include(CMakePackageConfigHelpers)
configure_package_config_file(
${PROJECT_SOURCE_DIR}/data/cmake/lyraConfig.cmake.in
${PROJECT_BINARY_DIR}/lyraConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/lyra
INSTALL_DESTINATION "${LYRA_INSTALL_CONFIGDIR}"
)

install(
Expand All @@ -60,19 +79,26 @@ install(
EXPORT lyraTarget
FILE lyraTarget.cmake
NAMESPACE bfg::
DESTINATION ${CMAKE_INSTALL_DATADIR}/lyra/cmake
DESTINATION "${LYRA_INSTALL_CONFIGDIR}"
)

install(
DIRECTORY ${PROJECT_SOURCE_DIR}/include
DESTINATION ${CMAKE_INSTALL_PREFIX}
DIRECTORY ${PROJECT_SOURCE_DIR}/include/lyra
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(
FILES
${PROJECT_BINARY_DIR}/lyraConfig.cmake
DESTINATION ${CMAKE_INSTALL_DATADIR}/lyra/cmake/
DESTINATION "${LYRA_INSTALL_CONFIGDIR}"
)

set(PKG_CONFIG_FILE_NAME "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.pc")
configure_file("${PkgConfigTemplatesDir}/pkgconfig.pc.in" "${PKG_CONFIG_FILE_NAME}" @ONLY)
install(FILES "${PKG_CONFIG_FILE_NAME}"
DESTINATION "${INSTALL_LIBDIR_ARCHIND}/pkgconfig"
)

include(CPack)


7 changes: 7 additions & 0 deletions data/pkgconfig/pkgconfig.pc.in
Original file line number Diff line number Diff line change
@@ -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}