diff options
author | Brad King <brad.king@kitware.com> | 2024-01-05 18:29:53 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2024-01-05 18:30:15 (GMT) |
commit | 7058d715b424162e493c154381300d8e47331605 (patch) | |
tree | 6158dcb55124a653f2fd7e795924ab470a4c71b6 /Tests | |
parent | 601e16c7c5146fa6bbd92ec28ed792782cdf1033 (diff) | |
parent | 44f29a4291c9de6f8a1ff9097cd36576d987da14 (diff) | |
download | CMake-7058d715b424162e493c154381300d8e47331605.zip CMake-7058d715b424162e493c154381300d8e47331605.tar.gz CMake-7058d715b424162e493c154381300d8e47331605.tar.bz2 |
Merge topic 'swift-compile-commands'
44f29a4291 Swift/Ninja: Fix multifile module compile commands
Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !9095
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/RunCMake/Swift/CompileCommands-check.cmake | 30 | ||||
-rw-r--r-- | Tests/RunCMake/Swift/CompileCommands.cmake | 9 | ||||
-rw-r--r-- | Tests/RunCMake/Swift/RunCMakeTest.cmake | 5 |
3 files changed, 44 insertions, 0 deletions
diff --git a/Tests/RunCMake/Swift/CompileCommands-check.cmake b/Tests/RunCMake/Swift/CompileCommands-check.cmake new file mode 100644 index 0000000..6450745 --- /dev/null +++ b/Tests/RunCMake/Swift/CompileCommands-check.cmake @@ -0,0 +1,30 @@ +if(NOT EXISTS "${RunCMake_TEST_BINARY_DIR}/compile_commands.json") + set(RunCMake_TEST_FAILED "compile_commands.json not generated") + return() +endif() + +# The compile command for both files should contain all Swift source files in +# the module +set(expected_compile_commands +[==[^\[ +{ + "directory": ".*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", + "command": ".*swiftc .* (\\")?.*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?.*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", + "file": ".*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)", + "output": "CMakeFiles/CompileCommandLib.dir/E.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\E.swift.obj" +}, +{ + "directory": ".*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", + "command": ".*swiftc .* (\\")?.*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?.*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", + "file": ".*/Tests/RunCMake/Swift/L.swift", + "output": "CMakeFiles/CompileCommandLib.dir/L.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\L.swift.obj" +} +]$]==] +) + +file(READ "${RunCMake_TEST_BINARY_DIR}/compile_commands.json" compile_commands) +if(NOT compile_commands MATCHES "${expected_compile_commands}") + string(REPLACE "\n" "\n " expected_compile_commands_formatted "${expected_compile_commands}") + string(REPLACE "\n" "\n " compile_commands_formatted "${compile_commands}") + string(APPEND RunCMake_TEST_FAILED "Expected compile_commands.json to match:\n ${expected_compile_commands_formatted}\nActual compile_commands.json:\n ${compile_commands_formatted}\n") +endif() diff --git a/Tests/RunCMake/Swift/CompileCommands.cmake b/Tests/RunCMake/Swift/CompileCommands.cmake new file mode 100644 index 0000000..f859693 --- /dev/null +++ b/Tests/RunCMake/Swift/CompileCommands.cmake @@ -0,0 +1,9 @@ +if(POLICY CMP0157) + cmake_policy(SET CMP0157 NEW) +endif() +set(CMAKE_Swift_COMPILATION_MODE "singlefile") + +enable_language(Swift) + +add_library(CompileCommandLib STATIC E.swift L.swift) +set_target_properties(CompileCommandLib PROPERTIES EXPORT_COMPILE_COMMANDS YES) diff --git a/Tests/RunCMake/Swift/RunCMakeTest.cmake b/Tests/RunCMake/Swift/RunCMakeTest.cmake index 184b461..500bf76 100644 --- a/Tests/RunCMake/Swift/RunCMakeTest.cmake +++ b/Tests/RunCMake/Swift/RunCMakeTest.cmake @@ -61,6 +61,11 @@ elseif(RunCMake_GENERATOR STREQUAL Ninja) run_cmake(CMP0157-WARN) endblock() + block() + set(CompileCommands_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CompileCommands-build) + run_cmake(CompileCommands) + run_cmake_command(CompileCommands-check ${CMAKE_COMMAND} --build ${CompileCommands_TEST_BINARY_DIR}) + endblock() endif() elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config") if(CMake_TEST_Swift) |