diff options
author | Brad King <brad.king@kitware.com> | 2018-03-12 15:43:35 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2018-03-12 17:30:14 (GMT) |
commit | 1b5e52fd651ab17b3f9efb8f3e2e069550bf7a66 (patch) | |
tree | 2d02b554d043337f57a2f34976ce7403b947c877 /Source | |
parent | 2deb9b7f3495a9083b8d5341f867fed615da1470 (diff) | |
download | CMake-1b5e52fd651ab17b3f9efb8f3e2e069550bf7a66.zip CMake-1b5e52fd651ab17b3f9efb8f3e2e069550bf7a66.tar.gz CMake-1b5e52fd651ab17b3f9efb8f3e2e069550bf7a66.tar.bz2 |
Genex: Fix COMPILE_LANGUAGE propagation through try_compile
When evaluating include directories during export to a `try_compile`
test project, thread the compile language through to the generator
expression evaluator so it can support `$<COMPILE_LANGUAGE:...>`.
Issue: #17811
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmCoreTryCompile.cxx | 3 | ||||
-rw-r--r-- | Source/cmExportTryCompileFileGenerator.cxx | 19 | ||||
-rw-r--r-- | Source/cmExportTryCompileFileGenerator.h | 5 |
3 files changed, 18 insertions, 9 deletions
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 34c6175..26e0db9 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -580,7 +580,8 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv, if (!targets.empty()) { std::string fname = "/" + std::string(targetName) + "Targets.cmake"; - cmExportTryCompileFileGenerator tcfg(gg, targets, this->Makefile); + cmExportTryCompileFileGenerator tcfg(gg, targets, this->Makefile, + testLangs); tcfg.SetExportFile((this->BinaryDirectory + fname).c_str()); tcfg.SetConfig(tcConfig); diff --git a/Source/cmExportTryCompileFileGenerator.cxx b/Source/cmExportTryCompileFileGenerator.cxx index 1fb9cf8..ae8cd37 100644 --- a/Source/cmExportTryCompileFileGenerator.cxx +++ b/Source/cmExportTryCompileFileGenerator.cxx @@ -18,7 +18,8 @@ cmExportTryCompileFileGenerator::cmExportTryCompileFileGenerator( cmGlobalGenerator* gg, const std::vector<std::string>& targets, - cmMakefile* mf) + cmMakefile* mf, std::set<std::string> const& langs) + : Languages(langs.begin(), langs.end()) { gg->CreateImportedGenerationObjects(mf, targets, this->Exports); } @@ -36,12 +37,14 @@ bool cmExportTryCompileFileGenerator::GenerateMainFile(std::ostream& os) ImportPropertyMap properties; + for (std::string const& lang : this->Languages) { #define FIND_TARGETS(PROPERTY) \ - this->FindTargets("INTERFACE_" #PROPERTY, te, emittedDeps); + this->FindTargets("INTERFACE_" #PROPERTY, te, lang, emittedDeps); - CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(FIND_TARGETS) + CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(FIND_TARGETS) #undef FIND_TARGETS + } this->PopulateProperties(te, properties, emittedDeps); @@ -53,7 +56,7 @@ bool cmExportTryCompileFileGenerator::GenerateMainFile(std::ostream& os) std::string cmExportTryCompileFileGenerator::FindTargets( const std::string& propName, cmGeneratorTarget const* tgt, - std::set<cmGeneratorTarget const*>& emitted) + std::string const& language, std::set<cmGeneratorTarget const*>& emitted) { const char* prop = tgt->GetProperty(propName); if (!prop) { @@ -72,8 +75,9 @@ std::string cmExportTryCompileFileGenerator::FindTargets( cmGeneratorTarget gDummyHead(&dummyHead, tgt->GetLocalGenerator()); - std::string result = cge->Evaluate(tgt->GetLocalGenerator(), this->Config, - false, &gDummyHead, tgt, &dagChecker); + std::string result = + cge->Evaluate(tgt->GetLocalGenerator(), this->Config, false, &gDummyHead, + tgt, &dagChecker, language); const std::set<cmGeneratorTarget const*>& allTargets = cge->GetAllTargetsSeen(); @@ -97,7 +101,8 @@ void cmExportTryCompileFileGenerator::PopulateProperties( if (p.find("IMPORTED_LINK_INTERFACE_LIBRARIES") == 0 || p.find("IMPORTED_LINK_DEPENDENT_LIBRARIES") == 0 || p.find("INTERFACE_LINK_LIBRARIES") == 0) { - std::string evalResult = this->FindTargets(p, target, emitted); + std::string evalResult = + this->FindTargets(p, target, std::string(), emitted); std::vector<std::string> depends; cmSystemTools::ExpandListArgument(evalResult, depends); diff --git a/Source/cmExportTryCompileFileGenerator.h b/Source/cmExportTryCompileFileGenerator.h index 70c3857..ca2987c 100644 --- a/Source/cmExportTryCompileFileGenerator.h +++ b/Source/cmExportTryCompileFileGenerator.h @@ -21,7 +21,8 @@ class cmExportTryCompileFileGenerator : public cmExportFileGenerator public: cmExportTryCompileFileGenerator(cmGlobalGenerator* gg, std::vector<std::string> const& targets, - cmMakefile* mf); + cmMakefile* mf, + std::set<std::string> const& langs); /** Set the list of targets to export. */ void SetConfig(const std::string& config) { this->Config = config; } @@ -49,10 +50,12 @@ protected: private: std::string FindTargets(const std::string& prop, const cmGeneratorTarget* tgt, + std::string const& language, std::set<const cmGeneratorTarget*>& emitted); std::vector<cmGeneratorTarget const*> Exports; std::string Config; + std::vector<std::string> Languages; }; #endif |