diff options
author | Brad King <brad.king@kitware.com> | 2020-05-25 14:40:47 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-05-25 14:40:56 (GMT) |
commit | 15b9b41d72d1de2299dbfd9e4f05c456b7a9124e (patch) | |
tree | 04a423ef2278228cd3cf31ac51b3a76e1d0ace64 /Tests | |
parent | 54baf639652a0590825fef4f600645919ef13913 (diff) | |
parent | 9f6d40ee23113f1317e54d662316752adb9f368e (diff) | |
download | CMake-15b9b41d72d1de2299dbfd9e4f05c456b7a9124e.zip CMake-15b9b41d72d1de2299dbfd9e4f05c456b7a9124e.tar.gz CMake-15b9b41d72d1de2299dbfd9e4f05c456b7a9124e.tar.bz2 |
Merge topic 'fileApiAddPrecompileHeadersBacktrace'
9f6d40ee23 fileapi: Extend codemodel targets with PRECOMPILE_HEADERS
b698764a31 Tests: Add a PCH example to RunCMake.FileAPI codemodel-v2
b3812c0e54 Tests: Fix indentation in RunCMake.FileAPI cxx_exe.json
9c48804b69 PCH: Fix source group of per-architecture PCH headers
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4684
Diffstat (limited to 'Tests')
10 files changed, 664 insertions, 6 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 0f94e4e..5f3f38b 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -203,7 +203,8 @@ endif() add_RunCMake_test(ExternalData) add_RunCMake_test(FeatureSummary) add_RunCMake_test(FPHSA) -add_RunCMake_test(FileAPI -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}) +add_RunCMake_test(FileAPI -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} + -DCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}) add_RunCMake_test(FindBoost) add_RunCMake_test(FindLua) add_RunCMake_test(FindOpenGL) diff --git a/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt b/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt index b4b170e..03286f1 100644 --- a/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt +++ b/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt @@ -1 +1 @@ -^{"fileApi":{"requests":\[{"kind":"codemodel","version":\[{"major":2,"minor":0}]},{"kind":"cache","version":\[{"major":2,"minor":0}]},{"kind":"cmakeFiles","version":\[{"major":1,"minor":0}]}]},"generators":\[.*\],"serverMode":true,"version":{.*}}$ +^{"fileApi":{"requests":\[{"kind":"codemodel","version":\[{"major":2,"minor":1}]},{"kind":"cache","version":\[{"major":2,"minor":0}]},{"kind":"cmakeFiles","version":\[{"major":1,"minor":0}]}]},"generators":\[.*\],"serverMode":true,"version":{.*}}$ diff --git a/Tests/RunCMake/FileAPI/RunCMakeTest.cmake b/Tests/RunCMake/FileAPI/RunCMakeTest.cmake index 8cdc00c..4449ff1 100644 --- a/Tests/RunCMake/FileAPI/RunCMakeTest.cmake +++ b/Tests/RunCMake/FileAPI/RunCMakeTest.cmake @@ -23,7 +23,7 @@ function(check_python case) endif() file(GLOB index ${RunCMake_TEST_BINARY_DIR}/.cmake/api/v1/reply/index-*.json) execute_process( - COMMAND ${PYTHON_EXECUTABLE} "${RunCMake_SOURCE_DIR}/${case}-check.py" "${index}" + COMMAND ${PYTHON_EXECUTABLE} "${RunCMake_SOURCE_DIR}/${case}-check.py" "${index}" "${CMAKE_CXX_COMPILER_ID}" RESULT_VARIABLE result OUTPUT_VARIABLE output ERROR_VARIABLE output diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-check.py b/Tests/RunCMake/FileAPI/codemodel-v2-check.py index 9ee0c20..a3dd9ff 100644 --- a/Tests/RunCMake/FileAPI/codemodel-v2-check.py +++ b/Tests/RunCMake/FileAPI/codemodel-v2-check.py @@ -12,7 +12,7 @@ def read_codemodel_json_data(filename): def check_objects(o, g): assert is_list(o) assert len(o) == 1 - check_index_object(o[0], "codemodel", 2, 0, check_object_codemodel(g)) + check_index_object(o[0], "codemodel", 2, 1, check_object_codemodel(g)) def check_backtrace(t, b, backtrace): btg = t["backtraceGraph"] @@ -404,6 +404,23 @@ def check_target(c): missing_exception=lambda e: "Include path: %s" % e["path"], extra_exception=lambda a: "Include path: %s" % a["path"]) + if "precompileHeaders" in expected: + expected_keys.append("precompileHeaders") + + def check_precompile_header(actual, expected): + assert is_dict(actual) + expected_keys = ["backtrace", "header"] + check_backtrace(obj, actual["backtrace"], expected["backtrace"]) + + assert sorted(actual.keys()) == sorted(expected_keys) + + check_list_match(lambda a, e: matches(a["header"], e["header"]), + actual["precompileHeaders"], expected["precompileHeaders"], + check=check_precompile_header, + check_exception=lambda a, e: "Precompile header: %s" % a["header"], + missing_exception=lambda e: "Precompile header: %s" % e["header"], + extra_exception=lambda a: "Precompile header: %s" % a["header"]) + if expected["defines"] is not None: expected_keys.append("defines") @@ -561,6 +578,20 @@ def gen_check_targets(c, g, inSource): read_codemodel_json_data("targets/generated_exe.json"), ] + if cxx_compiler_id in ['Clang', 'AppleClang', 'GNU', 'Intel', 'MSVC', 'Embarcadero'] and g["name"] != "Xcode": + for e in expected: + if e["name"] == "cxx_exe": + if matches(g["name"], "^(Visual Studio |Ninja Multi-Config)"): + precompile_header_data = read_codemodel_json_data("targets/cxx_exe_precompileheader_multigen.json") + else: + if ';' in os.environ.get("CMAKE_OSX_ARCHITECTURES", ""): + precompile_header_data = read_codemodel_json_data("targets/cxx_exe_precompileheader_2arch.json") + else: + precompile_header_data = read_codemodel_json_data("targets/cxx_exe_precompileheader.json") + e["compileGroups"] = precompile_header_data["compileGroups"] + e["sources"] = precompile_header_data["sources"] + e["sourceGroups"] = precompile_header_data["sourceGroups"] + if not os.path.exists(os.path.join(reply_dir, "..", "..", "..", "..", "ipo_enabled.txt")): for e in expected: try: @@ -715,6 +746,7 @@ def check_object_codemodel(g): check_object_codemodel_configuration(c, g, inSource) return _check +cxx_compiler_id = sys.argv[2] assert is_dict(index) assert sorted(index.keys()) == ["cmake", "objects", "reply"] check_objects(index["objects"], index["cmake"]["generator"]) diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe.json index 7631837..e7ab55b 100644 --- a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe.json +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe.json @@ -43,17 +43,36 @@ ], "includes": null, "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], "compileCommandFragments": [ { "fragment" : "TargetCompileOptions", - "backtrace": [ + "backtrace": [ { "file": "^cxx/CMakeLists\\.txt$", "line": 17, "command": "target_compile_options", "hasParent": true }, - { + { "file" : "^cxx/CMakeLists\\.txt$", "line": null, "command": null, diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader.json new file mode 100644 index 0000000..5a0f770 --- /dev/null +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader.json @@ -0,0 +1,161 @@ +{ + "compileGroups": [ + { + "language": "CXX", + "sourcePaths": [ + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$" + ], + "includes": null, + "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "compileCommandFragments": [ + { + "fragment": "TargetCompileOptions", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 17, + "command": "target_compile_options", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ] + }, + { + "language": "CXX", + "sourcePaths": [ + "^empty\\.cxx$" + ], + "includes": null, + "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "compileCommandFragments": [ + { + "fragment": "TargetCompileOptions", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 17, + "command": "target_compile_options", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ] + } + ], + "sources": [ + { + "path": ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + "isGenerated": null, + "sourceGroupName": "Source Files", + "compileGroupLanguage": "CXX", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": "^empty\\.cxx$", + "isGenerated": null, + "sourceGroupName": "Source Files", + "compileGroupLanguage": "CXX", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 5, + "command": "add_executable", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*/cmake_pch(_[^.]+)?\\.hxx$", + "isGenerated": null, + "sourceGroupName": "Precompile Header File", + "compileGroupLanguage": null, + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "sourceGroups": [ + { + "name": "Source Files", + "sourcePaths": [ + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + "^empty\\.cxx$" + ] + }, + { + "name": "Precompile Header File", + "sourcePaths": [ + ".*/cmake_pch(_[^.]+)?\\.hxx$" + ] + } + ] +} diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_2arch.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_2arch.json new file mode 100644 index 0000000..9455748 --- /dev/null +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_2arch.json @@ -0,0 +1,237 @@ +{ + "compileGroups": [ + { + "language": "CXX", + "sourcePaths": [ + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$" + ], + "includes": null, + "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "compileCommandFragments": [ + { + "fragment": "TargetCompileOptions", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 17, + "command": "target_compile_options", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ] + }, + { + "language": "CXX", + "sourcePaths": [ + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$" + ], + "includes": null, + "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "compileCommandFragments": [ + { + "fragment": "TargetCompileOptions", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 17, + "command": "target_compile_options", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ] + }, + { + "language": "CXX", + "sourcePaths": [ + "^empty\\.cxx$" + ], + "includes": null, + "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "compileCommandFragments": [ + { + "fragment": "TargetCompileOptions", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 17, + "command": "target_compile_options", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ] + } + ], + "sources": [ + { + "path": ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + "isGenerated": null, + "sourceGroupName": "Source Files", + "compileGroupLanguage": "CXX", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + "isGenerated": null, + "sourceGroupName": "Source Files", + "compileGroupLanguage": "CXX", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": "^empty\\.cxx$", + "isGenerated": null, + "sourceGroupName": "Source Files", + "compileGroupLanguage": "CXX", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 5, + "command": "add_executable", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*/cmake_pch(_[^.]+)?\\.hxx$", + "isGenerated": null, + "sourceGroupName": "Precompile Header File", + "compileGroupLanguage": null, + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*/cmake_pch(_[^.]+)?\\.hxx$", + "isGenerated": null, + "sourceGroupName": "Precompile Header File", + "compileGroupLanguage": null, + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "sourceGroups": [ + { + "name": "Source Files", + "sourcePaths": [ + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + "^empty\\.cxx$" + ] + }, + { + "name": "Precompile Header File", + "sourcePaths": [ + ".*/cmake_pch(_[^.]+)?\\.hxx$", + ".*/cmake_pch(_[^.]+)?\\.hxx$" + ] + } + ] +} diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_multigen.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_multigen.json new file mode 100644 index 0000000..9f6ffcc --- /dev/null +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/cxx_exe_precompileheader_multigen.json @@ -0,0 +1,206 @@ +{ + "compileGroups": [ + { + "language": "CXX", + "sourcePaths": [ + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$" + ], + "includes": null, + "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "compileCommandFragments": [ + { + "fragment": "TargetCompileOptions", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 17, + "command": "target_compile_options", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ] + }, + { + "language": "CXX", + "sourcePaths": [ + "^empty\\.cxx$" + ], + "includes": null, + "defines": null, + "precompileHeaders": [ + { + "header": ".*empty\\.h$", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 21, + "command": "target_precompile_headers", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "compileCommandFragments": [ + { + "fragment": "TargetCompileOptions", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 17, + "command": "target_compile_options", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ] + } + ], + "sources": [ + { + "path": ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + "isGenerated": null, + "sourceGroupName": "Source Files", + "compileGroupLanguage": "CXX", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": "^empty\\.cxx$", + "isGenerated": null, + "sourceGroupName": "Source Files", + "compileGroupLanguage": "CXX", + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": 5, + "command": "add_executable", + "hasParent": true + }, + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*/Debug/cmake_pch(_[^.]+)?\\.hxx$", + "isGenerated": null, + "sourceGroupName": "Precompile Header File", + "compileGroupLanguage": null, + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*/Release/cmake_pch(_[^.]+)?\\.hxx$", + "isGenerated": null, + "sourceGroupName": "Precompile Header File", + "compileGroupLanguage": null, + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*/MinSizeRel/cmake_pch(_[^.]+)?\\.hxx$", + "isGenerated": null, + "sourceGroupName": "Precompile Header File", + "compileGroupLanguage": null, + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + }, + { + "path": ".*/RelWithDebInfo/cmake_pch(_[^.]+)?\\.hxx$", + "isGenerated": null, + "sourceGroupName": "Precompile Header File", + "compileGroupLanguage": null, + "backtrace": [ + { + "file": "^cxx/CMakeLists\\.txt$", + "line": null, + "command": null, + "hasParent": false + } + ] + } + ], + "sourceGroups": [ + { + "name": "Source Files", + "sourcePaths": [ + ".*cmake_pch(_[^.]+)?(\\.hxx)?\\.cxx$", + "^empty\\.cxx$" + ] + }, + { + "name": "Precompile Header File", + "sourcePaths": [ + ".*/Debug/cmake_pch(_[^.]+)?\\.hxx$", + ".*/Release/cmake_pch(_[^.]+)?\\.hxx$", + ".*/MinSizeRel/cmake_pch(_[^.]+)?\\.hxx$", + ".*/RelWithDebInfo/cmake_pch(_[^.]+)?\\.hxx$" + ] + } + ] +} diff --git a/Tests/RunCMake/FileAPI/cxx/CMakeLists.txt b/Tests/RunCMake/FileAPI/cxx/CMakeLists.txt index b0564f5..fa51195 100644 --- a/Tests/RunCMake/FileAPI/cxx/CMakeLists.txt +++ b/Tests/RunCMake/FileAPI/cxx/CMakeLists.txt @@ -17,3 +17,5 @@ target_link_libraries(cxx_static_exe PRIVATE cxx_static_lib) target_compile_options(cxx_exe PUBLIC TargetCompileOptions) target_link_options(cxx_exe PUBLIC TargetLinkOptions) target_link_directories(cxx_exe PUBLIC "${CMAKE_BINARY_DIR}/TargetLinkDir") + +target_precompile_headers(cxx_exe PUBLIC ../empty.h) diff --git a/Tests/RunCMake/FileAPI/empty.h b/Tests/RunCMake/FileAPI/empty.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/FileAPI/empty.h |