Commit 7787fb6e authored by Brad King's avatar Brad King

Merge branch 'fix-csharp-target-type' into release-3.12

Merge-request: !2427
parents 518c5060 375b420f
......@@ -5227,10 +5227,14 @@ bool cmGeneratorTarget::HasLanguage(std::string const& language,
{
std::set<std::string> languages;
this->GetLanguages(languages, config);
// The "exclusive" check applies only to source files and not
// the linker language which may be affected by dependencies.
if (exclusive && languages.size() > 1) {
return false;
}
// add linker language (if it is different from compiler languages)
languages.insert(this->GetLinkerLanguage(config));
return (languages.size() == 1 || !exclusive) &&
languages.count(language) > 0;
return languages.count(language) > 0;
}
void cmGeneratorTarget::ComputeLinkImplementationLanguages(
......
......@@ -366,7 +366,7 @@ public:
// Evaluate if the target uses the given language for compilation
// and/or linking. If 'exclusive' is true, 'language' is expected
// to be the only language used for the target.
// to be the only language used in source files for the target.
bool HasLanguage(std::string const& language, std::string const& config,
bool exclusive = true) const;
......
......@@ -2413,10 +2413,12 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
}
// Choose a language whose flags to use for ClCompile.
static const char* clLangs[] = { "CXX", "C", "Fortran", "CSharp" };
static const char* clLangs[] = { "CXX", "C", "Fortran" };
std::string langForClCompile;
if (std::find(cm::cbegin(clLangs), cm::cend(clLangs), linkLanguage) !=
cm::cend(clLangs)) {
if (this->ProjectType == csproj) {
langForClCompile = "CSharp";
} else if (std::find(cm::cbegin(clLangs), cm::cend(clLangs), linkLanguage) !=
cm::cend(clLangs)) {
langForClCompile = linkLanguage;
} else {
std::set<std::string> languages;
......
......@@ -21,3 +21,9 @@ target_link_libraries(CSharpLinkToCxx CLIApp)
# because it is unmanaged
add_library(CppNativeApp SHARED cpp_native.hpp cpp_native.cpp)
target_link_libraries(CSharpLinkToCxx CppNativeApp)
# Link a static C++ library into the CSharp executable.
# We do not actually use any symbols but this helps cover
# link language selection.
add_library(CppStaticLib STATIC cpp_static.cpp)
target_link_libraries(CSharpLinkToCxx CppStaticLib)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment