|
| 1 | +# Eggs.KeyedSet |
| 2 | +# |
1 | 3 | # Copyright Agustin K-ballo Berge, Fusion Fenix 2026 |
2 | 4 | # |
3 | 5 | # Distributed under the Boost Software License, Version 1.0. (See accompanying |
4 | 6 | # file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
5 | 7 |
|
6 | | -cmake_minimum_required(VERSION 3.24...3.31) |
| 8 | +cmake_minimum_required(VERSION 3.25...4.2.3) |
7 | 9 |
|
8 | | -project(Eggs.KeyedSet CXX) |
| 10 | +project(Eggs.KeyedSet DESCRIPTION "A C++23 keyed-set container" LANGUAGES CXX) |
9 | 11 |
|
10 | | -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) |
| 12 | +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") |
11 | 13 |
|
12 | | -set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
| 14 | +include(GNUInstallDirs) |
13 | 15 |
|
14 | 16 | # Options (two spellings: short when top-level, prefixed when a subdirectory) |
15 | 17 | if(PROJECT_IS_TOP_LEVEL) |
16 | | - include(CTest) # option(BUILD_TESTING ...) |
17 | | - option(BUILD_EXAMPLE "Build the example" ON) |
18 | | - option(ENABLE_INSTALL "Enable installing the library" ON) |
| 18 | + set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
| 19 | + set(CMAKE_CXX_SCAN_FOR_MODULES OFF) |
| 20 | + |
| 21 | + option(BUILD_EXAMPLES "Build the examples" ON) |
| 22 | + include(CTest) # option(BUILD_TESTING ...) |
| 23 | + option(ENABLE_INSTALL "Generate install rules" ON) |
| 24 | + set(SYSTEM OFF) |
19 | 25 | else() |
| 26 | + option(EGGS_KEYED_SET_BUILD_EXAMPLES "Build the examples" OFF) |
20 | 27 | option(EGGS_KEYED_SET_BUILD_TESTING "Build the testing tree" OFF) |
21 | | - option(EGGS_KEYED_SET_BUILD_EXAMPLE "Build the example" OFF) |
22 | | - option(EGGS_KEYED_SET_ENABLE_INSTALL "Enable installing the library" OFF) |
| 28 | + option(EGGS_KEYED_SET_ENABLE_INSTALL "Generate install rules" OFF) |
23 | 29 |
|
24 | 30 | # Map prefixed options back to the canonical names used below |
25 | | - if(EGGS_KEYED_SET_BUILD_TESTING) |
26 | | - set(BUILD_TESTING ON) |
27 | | - endif() |
28 | | - if(EGGS_KEYED_SET_BUILD_EXAMPLE) |
29 | | - set(BUILD_EXAMPLE ON) |
30 | | - endif() |
31 | | - if(EGGS_KEYED_SET_ENABLE_INSTALL) |
32 | | - set(ENABLE_INSTALL ON) |
33 | | - endif() |
| 31 | + set(BUILD_EXAMPLES ${EGGS_KEYED_SET_BUILD_EXAMPLES}) |
| 32 | + set(BUILD_TESTING ${EGGS_KEYED_SET_BUILD_TESTING}) |
| 33 | + set(ENABLE_INSTALL ${EGGS_KEYED_SET_ENABLE_INSTALL}) |
| 34 | + set(SYSTEM ON) |
34 | 35 | endif() |
35 | 36 |
|
36 | | -# Library target (header-only INTERFACE library) |
| 37 | +# |
| 38 | +# Library target — header-only INTERFACE library. |
| 39 | +# Internal name _eggs_keyed_set; downstream CMake code uses the alias Eggs::KeyedSet. |
| 40 | +# |
37 | 41 | add_library(_eggs_keyed_set INTERFACE) |
38 | | -target_include_directories(_eggs_keyed_set INTERFACE |
39 | | - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
40 | | - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) |
41 | | -target_compile_features(_eggs_keyed_set INTERFACE cxx_std_23) |
42 | | -target_sources(_eggs_keyed_set INTERFACE |
43 | | - FILE_SET HEADERS |
44 | | - BASE_DIRS include |
45 | | - FILES include/eggs/keyed_set.hpp) |
46 | | -set_target_properties(_eggs_keyed_set |
| 42 | +target_sources( |
| 43 | + _eggs_keyed_set |
| 44 | + INTERFACE |
| 45 | + FILE_SET HEADERS BASE_DIRS include FILES include/eggs/keyed_set.hpp |
| 46 | +) |
| 47 | +set_target_properties( |
| 48 | + _eggs_keyed_set |
47 | 49 | PROPERTIES |
48 | | - EXPORT_NAME Eggs::KeyedSet |
49 | | - VERIFY_INTERFACE_HEADER_SETS ${BUILD_TESTING}) |
| 50 | + EXPORT_NAME KeyedSet |
| 51 | + SYSTEM ${SYSTEM} |
| 52 | + VERIFY_INTERFACE_HEADER_SETS ${BUILD_TESTING} |
| 53 | +) |
| 54 | +target_compile_features(_eggs_keyed_set INTERFACE cxx_std_23) |
50 | 55 |
|
51 | 56 | add_library(Eggs::KeyedSet ALIAS _eggs_keyed_set) |
52 | 57 |
|
53 | | -# Example |
54 | | -if(BUILD_EXAMPLE) |
| 58 | +# |
| 59 | +# Examples |
| 60 | +# |
| 61 | +if(BUILD_EXAMPLES) |
55 | 62 | add_subdirectory(example) |
56 | 63 | endif() |
57 | 64 |
|
58 | | -# Test |
| 65 | +# |
| 66 | +# Test suite |
| 67 | +# |
59 | 68 | if(BUILD_TESTING) |
60 | 69 | enable_testing() |
61 | 70 | add_subdirectory(test) |
62 | 71 | endif() |
63 | 72 |
|
64 | | -# Install |
| 73 | +# |
| 74 | +# Install rules |
| 75 | +# |
65 | 76 | if(ENABLE_INSTALL) |
66 | | - include(GNUInstallDirs) |
67 | 77 | include(CMakePackageConfigHelpers) |
68 | 78 |
|
69 | | - install(TARGETS _eggs_keyed_set EXPORT _targets |
70 | | - FILE_SET HEADERS) |
71 | | - install(EXPORT _targets |
| 79 | + install( |
| 80 | + TARGETS _eggs_keyed_set |
| 81 | + EXPORT EggsKeyedSetTargets |
| 82 | + FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} |
| 83 | + ) |
| 84 | + |
| 85 | + install( |
| 86 | + EXPORT EggsKeyedSetTargets |
72 | 87 | NAMESPACE Eggs:: |
73 | | - FILE EggsKeyedSetTargets.cmake |
74 | | - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Eggs.KeyedSet) |
| 88 | + FILE eggs.keyedset-targets.cmake |
| 89 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.keyedset |
| 90 | + ) |
75 | 91 |
|
76 | 92 | configure_package_config_file( |
77 | | - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/EggsKeyedSetConfig.cmake.in |
78 | | - ${CMAKE_CURRENT_BINARY_DIR}/EggsKeyedSetConfig.cmake |
79 | | - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Eggs.KeyedSet) |
| 93 | + cmake/eggs.keyedset-config.cmake.in |
| 94 | + ${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config.cmake |
| 95 | + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.keyedset |
| 96 | + ) |
80 | 97 |
|
81 | 98 | write_basic_package_version_file( |
82 | | - ${CMAKE_CURRENT_BINARY_DIR}/EggsKeyedSetConfigVersion.cmake |
| 99 | + ${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config-version.cmake |
83 | 100 | VERSION 1.0.0 |
84 | | - COMPATIBILITY SameMajorVersion) |
| 101 | + COMPATIBILITY SameMajorVersion |
| 102 | + ) |
85 | 103 |
|
86 | | - install(FILES |
87 | | - ${CMAKE_CURRENT_BINARY_DIR}/EggsKeyedSetConfig.cmake |
88 | | - ${CMAKE_CURRENT_BINARY_DIR}/EggsKeyedSetConfigVersion.cmake |
89 | | - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Eggs.KeyedSet) |
| 104 | + install( |
| 105 | + FILES |
| 106 | + ${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config.cmake |
| 107 | + ${CMAKE_CURRENT_BINARY_DIR}/eggs.keyedset-config-version.cmake |
| 108 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eggs.keyedset |
| 109 | + ) |
90 | 110 | endif() |
0 commit comments