Skip to content

Commit f6ad07e

Browse files
committed
Prepare use of CMAKE_CXX_MODULE_STD
We need at least cmake v3.28! We need to set CMAKE_CXX_SCAN_FOR_MODULES too! Fix compiler program name for apple-clang Prevent unintended define of HAS_STDLIB_MODULES Make it more readable The final cleanup Prepare run-clang-tidy too
1 parent 6a6ee76 commit f6ad07e

File tree

4 files changed

+44
-20
lines changed

4 files changed

+44
-20
lines changed

CMakeLists.txt

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
22

3-
cmake_minimum_required(VERSION 3.28)
3+
if(CMAKE_CXX_STANDARD STREQUAL 26)
4+
if(CMAKE_CXX_MODULE_STD)
5+
set(CMAKE_CXX_SCAN_FOR_MODULES 1)
6+
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD
7+
"d0edc3af-4c50-42ea-a356-e2862fe7a444"
8+
)
9+
add_definitions(-DHAS_STDLIB_MODULES)
10+
endif()
11+
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
12+
endif()
13+
14+
cmake_minimum_required(VERSION 3.28...4.0)
415

516
project(
617
beman.scope
@@ -14,13 +25,27 @@ project(
1425
# Modules opt in only on compilers that support g++-15 and clang-19+
1526
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19)
1627
set(CMAKE_CXX_SCAN_FOR_MODULES 1)
17-
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15)
28+
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15)
1829
set(CMAKE_CXX_SCAN_FOR_MODULES 1)
19-
elseif()
30+
else()
2031
set(CMAKE_CXX_SCAN_FOR_MODULES 0)
2132
endif()
2233

34+
if(CMAKE_CXX_SCAN_FOR_MODULES)
35+
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
36+
endif()
37+
2338
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
39+
if(CMAKE_EXPORT_COMPILE_COMMANDS)
40+
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
41+
endif()
42+
43+
include(CMakePrintHelpers)
44+
cmake_print_variables(
45+
CMAKE_CXX_SCAN_FOR_MODULES
46+
CMAKE_CXX_MODULE_STD
47+
CMAKE_CXX_COMPILER_IMPORT_STD
48+
)
2449

2550
# [CMAKE.SKIP_TESTS]
2651
option(
@@ -42,12 +67,8 @@ option(
4267
${PROJECT_IS_TOP_LEVEL}
4368
)
4469

45-
message(
46-
"Compiler is: ${CMAKE_CXX_COMPILER_ID} version: ${CMAKE_CXX_COMPILER_VERSION}"
47-
)
48-
message(
49-
"cmake is: ${CMAKE_VERSION} modules scan : ${CMAKE_CXX_SCAN_FOR_MODULES}"
50-
)
70+
message(STATUS "Compiler is: ${CMAKE_CXX_COMPILER_ID} version: ${CMAKE_CXX_COMPILER_VERSION}")
71+
message(STATUS "CMake is: ${CMAKE_VERSION} modules scan: ${CMAKE_CXX_SCAN_FOR_MODULES}")
5172

5273
if(CMAKE_CXX_SCAN_FOR_MODULES)
5374
add_library(beman.scope)
@@ -90,7 +111,7 @@ install(
90111
EXPORT beman.scope-targets
91112

92113
FILE_SET CXX_MODULES
93-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
114+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
94115
FILE_SET HEADERS
95116
)
96117

@@ -116,7 +137,8 @@ if(BEMAN_SCOPE_INSTALL_CONFIG_FILE_PACKAGE)
116137
EXPORT beman.scope-targets
117138
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/beman.scope
118139
NAMESPACE beman::
119-
CXX_MODULES_DIRECTORY cxx-modules
140+
CXX_MODULES_DIRECTORY
141+
cxx-modules
120142
COMPONENT beman.scope
121143
)
122144
endif()

cmake/appleclang-toolchain.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
include_guard(GLOBAL)
1818

19-
set(CMAKE_C_COMPILER clang)
20-
set(CMAKE_CXX_COMPILER clang++)
19+
set(CMAKE_C_COMPILER cc)
20+
set(CMAKE_CXX_COMPILER c++)
2121

2222
if(BEMAN_BUILDSYS_SANITIZER STREQUAL "MaxSan")
2323
set(SANITIZER_FLAGS

tests/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ include(FetchContent)
55
FetchContent_Declare(
66
Catch2
77
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
8-
GIT_TAG v3.8.0
8+
GIT_TAG v3.8.1
9+
SYSTEM
10+
# FIXME: FIND_PACKAGE_ARGS 3.8.1
911
)
1012
FetchContent_MakeAvailable(Catch2)
1113

12-
# module tests will only compile with gcc15 or clang20 and above
14+
set(ALL_TESTNAMES scope_success scope_exit scope_fail unique_resource)
1315
if(CMAKE_CXX_SCAN_FOR_MODULES)
14-
set(ALL_TESTNAMES scope_success scope_exit scope_fail unique_resource module)
15-
else()
16-
set(ALL_TESTNAMES scope_success scope_exit scope_fail unique_resource)
16+
list(APPEND ALL_TESTNAMES module)
1717
endif()
1818

19-
message("Tests to be built: ${ALL_TESTNAMES}")
19+
message(DEBUG "Tests to be built: ${ALL_TESTNAMES}")
2020

2121
include(Catch)
2222

tests/module.test.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
#include <catch2/catch_all.hpp>
55

66
// for g++-15 the order is important -- import after includes
7+
#ifdef HAS_STDLIB_MODULES
8+
import std;
9+
#endif
710
import beman.scope;
811

912
struct DummyResource {
@@ -33,5 +36,4 @@ TEST_CASE("module-test", "[scope_module_test]") {
3336
REQUIRE(success_ran == true);
3437
REQUIRE(fail_ran == false);
3538
REQUIRE(cleaned == true);
36-
3739
}

0 commit comments

Comments
 (0)