Skip to content

Commit

Permalink
Merge topic 'cxxmodules-non-compiled-source' into release-3.27
Browse files Browse the repository at this point in the history
458e397 cxxmodules: detect and message about non-compiled sources

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !8773
  • Loading branch information
bradking authored and kwrobot committed Sep 14, 2023
2 parents 1608b0b + 458e397 commit 01f97f9
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 4 deletions.
7 changes: 4 additions & 3 deletions Source/cmDyndepCollation.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,11 @@ Json::Value CollationInformationCxxModules(
auto lookup = sf_map.find(file);
if (lookup == sf_map.end()) {
gt->Makefile->IssueMessage(
MessageType::INTERNAL_ERROR,
cmStrCat("Target \"", tgt->GetName(), "\" has source file \"",
MessageType::FATAL_ERROR,
cmStrCat("Target \"", tgt->GetName(), "\" has source file\n ",
file,
R"(" which is not in any of its "FILE_SET BASE_DIRS".)"));
"\nin a \"FILE_SET TYPE CXX_MODULES\" but it is not "
"scheduled for compilation."));
continue;
}

Expand Down
20 changes: 20 additions & 0 deletions Source/cmVisualStudio10TargetGenerator.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -2540,6 +2540,12 @@ void cmVisualStudio10TargetGenerator::WriteAllSources(Elem& e0)
break;
}

std::string config;
if (!this->Configurations.empty()) {
config = this->Configurations[si.Configs[0]];
}
auto const* fs =
this->GeneratorTarget->GetFileSetForSource(config, si.Source);
if (tool) {
// Compute set of configurations to exclude, if any.
std::vector<size_t> const& include_configs = si.Configs;
Expand Down Expand Up @@ -2604,6 +2610,13 @@ void cmVisualStudio10TargetGenerator::WriteAllSources(Elem& e0)
if (si.Kind == cmGeneratorTarget::SourceKindObjectSource ||
si.Kind == cmGeneratorTarget::SourceKindUnityBatched) {
this->OutputSourceSpecificFlags(e2, si.Source);
} else if (fs && fs->GetType() == "CXX_MODULES"_s) {
this->GeneratorTarget->Makefile->IssueMessage(
MessageType::FATAL_ERROR,
cmStrCat("Target \"", this->GeneratorTarget->GetName(),
"\" has source file\n ", si.Source->GetFullPath(),
"\nin a \"FILE_SET TYPE CXX_MODULES\" but it is not "
"scheduled for compilation."));
}
if (si.Source->GetPropertyAsBool("SKIP_PRECOMPILE_HEADERS")) {
e2.Element("PrecompiledHeader", "NotUsing");
Expand All @@ -2613,6 +2626,13 @@ void cmVisualStudio10TargetGenerator::WriteAllSources(Elem& e0)
}

this->FinishWritingSource(e2, toolSettings);
} else if (fs && fs->GetType() == "CXX_MODULES"_s) {
this->GeneratorTarget->Makefile->IssueMessage(
MessageType::FATAL_ERROR,
cmStrCat("Target \"", this->GeneratorTarget->GetName(),
"\" has source file\n ", si.Source->GetFullPath(),
"\nin a \"FILE_SET TYPE CXX_MODULES\" but it is not "
"scheduled for compilation."));
}
}

Expand Down
5 changes: 5 additions & 0 deletions Tests/RunCMake/CXXModules/NoCXX-stderr.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ CMake Error in CMakeLists.txt:
been enabled
| The "nocxx" target contains C\+\+ module sources which are not supported by
the generator
| Target "nocxx" has source file

.*/Tests/RunCMake/CXXModules/sources/module.cxx

in a "FILE_SET TYPE CXX_MODULES" but it is not scheduled for compilation.
)
)*
CMake Generate step failed. Build files cannot be regenerated correctly.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
16 changes: 16 additions & 0 deletions Tests/RunCMake/CXXModules/NotCompiledSourceModules-stderr.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
CMake Warning \(dev\) at NotCompiledSourceModules.cmake:5 \(target_sources\):
CMake's C\+\+ module support is experimental. It is meant only for
experimentation and feedback to CMake developers.
Call Stack \(most recent call first\):
CMakeLists.txt:6 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.

(CMake Error in CMakeLists.txt:
Target "not-cxx-source" has source file

.*/Tests/RunCMake/CXXModules/sources/not-compiled.txt

in a "FILE_SET TYPE CXX_MODULES" but it is not scheduled for compilation.

)+
CMake Generate step failed. Build files cannot be regenerated correctly.
13 changes: 13 additions & 0 deletions Tests/RunCMake/CXXModules/NotCompiledSourceModules.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
enable_language(CXX)
set(CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE "")

add_library(not-cxx-source)
target_sources(not-cxx-source
PRIVATE
sources/cxx-anchor.cxx
PUBLIC
FILE_SET fs TYPE CXX_MODULES FILES
sources/not-compiled.txt)
target_compile_features(not-cxx-source
PRIVATE
cxx_std_20)
3 changes: 2 additions & 1 deletion Tests/RunCMake/CXXModules/RunCMakeTest.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,9 @@ foreach (fileset_type IN LISTS fileset_types)
endforeach ()
run_cmake("FileSet${fileset_type}InterfaceImported")

# Test the error message when a non-C++ source file is found in the source
# Test the error messages when a non-C++ source file is found in the source
# list.
run_cmake("NotCompiledSource${fileset_type}")
run_cmake("NotCXXSource${fileset_type}")
endforeach ()

Expand Down
Empty file.

0 comments on commit 01f97f9

Please sign in to comment.