Skip to content

Commit b51d329

Browse files
committed
♻️ Refactor CMake for a more "modern" approach
📦 Add support for generating a .deb file
1 parent ae27085 commit b51d329

File tree

2 files changed

+90
-34
lines changed

2 files changed

+90
-34
lines changed

CMakeLists.txt

+82-22
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,95 @@
11
cmake_minimum_required(VERSION 3.8.0)
2-
project(compile-time-regular-expressions VERSION 2.6.4 LANGUAGES CXX)
2+
# When updating to a newer version of CMake, see if we can use the following
3+
project(ctre
4+
#HOMEPAGE_URL "https://compile-time.re"
5+
#DESCRIPTION "A Compile time PCRE compatible regular expression matcher"
6+
VERSION 2.6.4
7+
LANGUAGES CXX)
38

4-
add_library(ctre INTERFACE)
5-
add_library(ctre::ctre ALIAS ctre)
6-
target_include_directories(ctre INTERFACE
7-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
8-
$<INSTALL_INTERFACE:include>)
9+
include(CMakePackageConfigHelpers)
10+
include(CMakeDependentOption)
11+
include(GNUInstallDirs)
12+
include(CTest)
13+
14+
find_program(CTRE_DPKG_BUILDPACKAGE_FOUND dpkg-buildpackage)
15+
find_program(CTRE_RPMBUILD_FOUND rpmbuild)
16+
17+
cmake_dependent_option(CTRE_BUILD_TESTS "Build ctre Tests" ON
18+
"BUILD_TESTING;CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF)
19+
cmake_dependent_option(CTRE_BUILD_PACKAGE "Build ctre Packages" ON
20+
"CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF)
21+
cmake_dependent_option(CTRE_BUILD_PACKAGE_DEB
22+
"Create DEB Package (${PROJECT_NAME})" ON
23+
"CTRE_BUILD_PACKAGE;CTRE_DPKG_BUILDPACKAGE_FOUND" OFF)
24+
cmake_dependent_option(CTRE_BUILD_PACKAGE_RPM
25+
"Create RPM Package (${PROJECT_NAME})" ON
26+
"CTRE_BUILD_PACKAGE;CTRE_RPMBUILD_FOUND" OFF)
27+
28+
add_library(${PROJECT_NAME} INTERFACE)
29+
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
30+
31+
target_include_directories(${PROJECT_NAME} INTERFACE
32+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
33+
$<INSTALL_INTERFACE:include>)
934
target_compile_features(ctre INTERFACE cxx_std_17)
1035

11-
install(TARGETS ctre EXPORT ctre-targets)
36+
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}-targets)
37+
38+
if (NOT EXISTS "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake.in")
39+
file(WRITE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake.in [[
40+
@PACKAGE_INIT@
41+
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
42+
]])
43+
endif()
44+
45+
configure_package_config_file(
46+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake.in"
47+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
48+
INSTALL_DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}"
49+
NO_SET_AND_CHECK_MACRO
50+
NO_CHECK_REQUIRED_COMPONENTS_MACRO)
1251

13-
export(EXPORT ctre-targets NAMESPACE ctre::)
14-
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/ctre-config.cmake
15-
"include(\${CMAKE_CURRENT_LIST_DIR}/ctre-targets.cmake)")
16-
include(CMakePackageConfigHelpers)
1752
write_basic_package_version_file(ctre-config-version.cmake
18-
VERSION ${ctre_VERSION}
19-
COMPATIBILITY SameMajorVersion)
53+
VERSION ${PROJECT_VERSION}
54+
COMPATIBILITY SameMajorVersion)
2055

21-
install(EXPORT ctre-targets DESTINATION lib/cmake/ctre
22-
NAMESPACE ctre::)
56+
install(EXPORT ${PROJECT_NAME}-targets
57+
DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}"
58+
NAMESPACE ${PROJECT_NAME}::)
2359
install(
24-
FILES
25-
${CMAKE_CURRENT_BINARY_DIR}/ctre-config.cmake
26-
${CMAKE_CURRENT_BINARY_DIR}/ctre-config-version.cmake
27-
DESTINATION lib/cmake/ctre)
60+
FILES
61+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
62+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
63+
DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME})
2864
install(DIRECTORY include/ DESTINATION include
2965
FILES_MATCHING PATTERN *.hpp)
3066

31-
option(ENABLE_CTRE_SELF_TEST "build self tests" OFF)
67+
if(CTRE_BUILD_TESTS)
68+
add_subdirectory(tests)
69+
endif()
70+
71+
if (NOT CTRE_BUILD_PACKAGE)
72+
return()
73+
endif()
74+
75+
list(APPEND source-generators TBZ2 TGZ TXZ ZIP)
76+
77+
if (CTRE_BUILD_PACKAGE_DEB)
78+
list(APPEND binary-generators "DEB")
79+
endif()
3280

33-
if(ENABLE_CTRE_SELF_TEST)
34-
add_subdirectory(tests)
81+
if (CTRE_BUILD_PACKAGE_RPM)
82+
list(APPEND binary-generators "RPM")
3583
endif()
84+
85+
set(CPACK_SOURCE_GENERATOR ${source-generators})
86+
set(CPACK_GENERATOR ${binary-generators})
87+
88+
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
89+
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}")
90+
91+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Hanicka Dusíková")
92+
93+
list(APPEND CPACK_SOURCE_IGNORE_FILES /.git/ /build/ .gitignore .DS_Store)
94+
95+
include(CPack)

tests/CMakeLists.txt

+8-12
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
file(GLOB ctre_self_tests *.cpp)
1+
file(GLOB test-sources CONFIGURE_DEPENDS *.cpp)
22

3-
add_custom_target(ctre_self_test)
3+
add_custom_target(ctre-test)
44

5-
foreach(ctre_self_test_file ${ctre_self_tests})
6-
get_filename_component(ctre_self_test_name ${ctre_self_test_file} NAME)
7-
message(STATUS ${ctre_self_test_name})
8-
9-
add_library(ctre_self_test_${ctre_self_test_name} STATIC ${ctre_self_test_name})
10-
target_link_libraries(ctre_self_test_${ctre_self_test_name} ctre)
11-
target_compile_features(ctre_self_test_${ctre_self_test_name} PRIVATE cxx_std_17)
12-
13-
add_dependencies(ctre_self_test ctre_self_test_${ctre_self_test_name})
14-
endforeach()
5+
foreach (source IN LISTS test-sources)
6+
get_filename_component(test "${source}" NAME_WE)
7+
add_library(ctre-test-${test} STATIC EXCLUDE_FROM_ALL ${source})
8+
target_link_libraries(ctre-test-${test} PRIVATE ctre)
9+
add_dependencies(ctre-test ctre-test-${test})
10+
endforeach()

0 commit comments

Comments
 (0)