11cmake_minimum_required (VERSION 3.8 )
2+
23project (argparse VERSION 1.0.0 LANGUAGES CXX )
4+ set ("PROJECT_DESCRIPTION" "A single header argument parser for C++17" )
5+ set ("PROJECT_HOMEPAGE_URL" "https://github.com/p-ranav/argparse" )
6+
37option (ARGPARSE_BUILD_TESTS OFF )
48option (ARGPARSE_LONG_VERSION_ARG_ONLY OFF )
59
610include (GNUInstallDirs )
11+ include (CMakePackageConfigHelpers )
12+ string (REPLACE "/${CMAKE_LIBRARY_ARCHITECTURE } " "" CMAKE_INSTALL_LIBDIR_ARCHIND "${CMAKE_INSTALL_LIBDIR} " )
13+
714
815add_library (argparse INTERFACE )
916add_library (argparse::argparse ALIAS argparse )
1017
18+
1119if (ARGPARSE_LONG_VERSION_ARG_ONLY)
1220 target_compile_definitions (argparse INTERFACE ARGPARSE_LONG_VERSION_ARG_ONLY=true )
1321endif ()
@@ -17,16 +25,72 @@ target_include_directories(argparse INTERFACE
1725 $<INSTALL_INTERFACE :${CMAKE_INSTALL_INCLUDEDIR} >
1826 $<BUILD_INTERFACE :${CMAKE_CURRENT_LIST_DIR } /include >)
1927
28+
2029if (ARGPARSE_BUILD_TESTS)
2130 add_subdirectory (test )
2231endif ()
2332
33+ if (${CMAKE_VERSION } VERSION_GREATER "3.14" )
34+ set (OPTIONAL_ARCH_INDEPENDENT "ARCH_INDEPENDENT" )
35+ endif ()
36+
2437install (TARGETS argparse EXPORT argparseConfig)
2538install (EXPORT argparseConfig
2639 NAMESPACE argparse::
27- DESTINATION ${CMAKE_INSTALL_LIBDIR } /cmake/argparse )
40+ DESTINATION ${CMAKE_INSTALL_LIBDIR_ARCHIND } /cmake/${ PROJECT_NAME } )
2841install (FILES ${CMAKE_CURRENT_LIST_DIR } /include/argparse/argparse.hpp
2942 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /argparse)
3043
44+
45+ set (CONFIG_FILE_NAME_WITHOUT_EXT "${PROJECT_NAME } Config" )
46+ set (CMAKE_CONFIG_FILE_BASENAME "${CMAKE_CURRENT_BINARY_DIR } /${CONFIG_FILE_NAME_WITHOUT_EXT} " )
47+ set (CMAKE_CONFIG_VERSION_FILE_NAME "${CMAKE_CONFIG_FILE_BASENAME} -version.cmake" )
48+ set (CMAKE_CONFIG_FILE_NAME "${CMAKE_CONFIG_FILE_BASENAME} .cmake" )
49+
50+ if (${CMAKE_VERSION } VERSION_GREATER "3.14" )
51+ set (OPTIONAL_ARCH_INDEPENDENT "ARCH_INDEPENDENT" )
52+ endif ()
53+
54+ write_basic_package_version_file ("${CMAKE_CONFIG_VERSION_FILE_NAME} "
55+ COMPATIBILITY ExactVersion
56+ ${OPTIONAL_ARCH_INDEPENDENT}
57+ )
58+
3159export (EXPORT argparseConfig
3260 NAMESPACE argparse:: )
61+
62+ install (FILES "${CMAKE_CONFIG_VERSION_FILE_NAME} "
63+ DESTINATION "${CMAKE_INSTALL_LIBDIR_ARCHIND} /cmake/${PROJECT_NAME } " )
64+
65+ set (PackagingTemplatesDir "${CMAKE_CURRENT_SOURCE_DIR } /packaging" )
66+
67+ set (CPACK_PACKAGE_NAME "${PROJECT_NAME } " )
68+ set (CPACK_PACKAGE_VENDOR "argparse (C++) developers" )
69+ set (CPACK_PACKAGE_DESCRIPTION "${PROJECT_DESCRIPTION } " )
70+ set (CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME} " )
71+ set (CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME} " )
72+ set (CPACK_PACKAGE_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL } " )
73+ set (CPACK_PACKAGE_MAINTAINER "Pranav Srinivas Kumar" )
74+ set (CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_MAINTAINER} " )
75+ set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR } /LICENSE" )
76+ set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR } /README.md" )
77+
78+ set (CPACK_DEBIAN_PACKAGE_NAME "lib${PROJECT_NAME } -dev" )
79+ set (CPACK_DEBIAN_PACKAGE_DEPENDS "libc6-dev" )
80+ set (CPACK_DEBIAN_PACKAGE_SUGGESTS "cmake, pkg-config, pkg-conf" )
81+
82+ set (CPACK_RPM_PACKAGE_NAME "lib${PROJECT_NAME } -devel" )
83+ set (CPACK_RPM_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS} " )
84+
85+ set (CPACK_DEB_COMPONENT_INSTALL ON )
86+ set (CPACK_RPM_COMPONENT_INSTALL ON )
87+ set (CPACK_NSIS_COMPONENT_INSTALL ON )
88+ set (CPACK_DEBIAN_COMPRESSION_TYPE "xz" )
89+
90+ set (PKG_CONFIG_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR } /${PROJECT_NAME } .pc" )
91+ configure_file ("${PackagingTemplatesDir} /pkgconfig.pc.in" "${PKG_CONFIG_FILE_NAME} " @ONLY )
92+ install (FILES "${PKG_CONFIG_FILE_NAME} "
93+ DESTINATION "${CMAKE_INSTALL_LIBDIR_ARCHIND} /pkgconfig"
94+ )
95+
96+ include (CPack )
0 commit comments