diff options
author | Brad King <brad.king@kitware.com> | 2023-05-22 16:35:17 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-05-22 16:35:28 (GMT) |
commit | dc4a53f49edbd8695c2d7638c90e53d7385f08a4 (patch) | |
tree | 4d2718d541e972ef9241ac70cbee864f5a0aff97 /Source | |
parent | dabba15172012f4497c96eadbf69684fc2f597ee (diff) | |
parent | b3a6a11e95f805ab7411d395bd426561cfb4d4d0 (diff) | |
download | CMake-dc4a53f49edbd8695c2d7638c90e53d7385f08a4.zip CMake-dc4a53f49edbd8695c2d7638c90e53d7385f08a4.tar.gz CMake-dc4a53f49edbd8695c2d7638c90e53d7385f08a4.tar.bz2 |
Merge topic 'FileAPI-framework'
b3a6a11e95 fileapi: Extend codemodel targets/compileGroups with Apple frameworks
Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !8489
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmFileAPI.cxx | 2 | ||||
-rw-r--r-- | Source/cmFileAPICodemodel.cxx | 48 |
2 files changed, 44 insertions, 6 deletions
diff --git a/Source/cmFileAPI.cxx b/Source/cmFileAPI.cxx index d1d3d25..8b98916 100644 --- a/Source/cmFileAPI.cxx +++ b/Source/cmFileAPI.cxx @@ -728,7 +728,7 @@ std::string cmFileAPI::NoSupportedVersion( // The "codemodel" object kind. // Update Help/manual/cmake-file-api.7.rst when updating this constant. -static unsigned int const CodeModelV2Minor = 5; +static unsigned int const CodeModelV2Minor = 6; void cmFileAPI::BuildClientRequestCodeModel( ClientRequest& r, std::vector<RequestVersion> const& versions) diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx index 4a8716f..280ebb0 100644 --- a/Source/cmFileAPICodemodel.cxx +++ b/Source/cmFileAPICodemodel.cxx @@ -328,6 +328,7 @@ struct CompileData std::vector<JBT<std::string>> Defines; std::vector<JBT<std::string>> PrecompileHeaders; std::vector<IncludeEntry> Includes; + std::vector<IncludeEntry> Frameworks; friend bool operator==(CompileData const& l, CompileData const& r) { @@ -335,7 +336,7 @@ struct CompileData l.Flags == r.Flags && l.Defines == r.Defines && l.PrecompileHeaders == r.PrecompileHeaders && l.LanguageStandard == r.LanguageStandard && - l.Includes == r.Includes); + l.Includes == r.Includes && l.Frameworks == r.Frameworks); } }; } @@ -356,6 +357,12 @@ struct hash<CompileData> hash<Json::ArrayIndex>()(i.Path.Backtrace.Index) ^ (i.IsSystem ? std::numeric_limits<size_t>::max() : 0)); } + for (auto const& i : in.Frameworks) { + result = result ^ + (hash<std::string>()(i.Path.Value) ^ + hash<Json::ArrayIndex>()(i.Path.Backtrace.Index) ^ + (i.IsSystem ? std::numeric_limits<size_t>::max() : 0)); + } for (auto const& i : in.Flags) { result = result ^ hash<std::string>()(i.Value) ^ hash<Json::ArrayIndex>()(i.Backtrace.Index); @@ -468,6 +475,7 @@ class Target Json::Value DumpPaths(); Json::Value DumpCompileData(CompileData const& cd); Json::Value DumpInclude(CompileData::IncludeEntry const& inc); + Json::Value DumpFramework(CompileData::IncludeEntry const& fw); Json::Value DumpPrecompileHeader(JBT<std::string> const& header); Json::Value DumpLanguageStandard(JBTs<std::string> const& standard); Json::Value DumpDefine(JBT<std::string> const& def); @@ -1294,9 +1302,15 @@ void Target::ProcessLanguage(std::string const& lang) std::vector<BT<std::string>> includePathList = lg->GetIncludeDirectories(this->GT, lang, this->Config); for (BT<std::string> const& i : includePathList) { - cd.Includes.emplace_back( - this->ToJBT(i), - this->GT->IsSystemIncludeDirectory(i.Value, this->Config, lang)); + if (this->GT->IsApple() && cmSystemTools::IsPathToFramework(i.Value)) { + cd.Frameworks.emplace_back( + this->ToJBT(i), + this->GT->IsSystemIncludeDirectory(i.Value, this->Config, lang)); + } else { + cd.Includes.emplace_back( + this->ToJBT(i), + this->GT->IsSystemIncludeDirectory(i.Value, this->Config, lang)); + } } std::vector<BT<std::string>> precompileHeaders = this->GT->GetPrecompileHeaders(this->Config, lang); @@ -1408,7 +1422,11 @@ CompileData Target::BuildCompileData(cmSourceFile* sf) bool const isSystemInclude = this->GT->IsSystemIncludeDirectory(i, this->Config, fd.Language); BT<std::string> include(i, tmpInclude.Backtrace); - fd.Includes.emplace_back(this->ToJBT(include), isSystemInclude); + if (this->GT->IsApple() && cmSystemTools::IsPathToFramework(i)) { + fd.Frameworks.emplace_back(this->ToJBT(include), isSystemInclude); + } else { + fd.Includes.emplace_back(this->ToJBT(include), isSystemInclude); + } } } } @@ -1481,6 +1499,13 @@ CompileData Target::MergeCompileData(CompileData const& fd) cd.Includes.insert(cd.Includes.end(), td.Includes.begin(), td.Includes.end()); + // Use source-specific frameworks followed by target-wide frameworks. + cd.Frameworks.reserve(fd.Frameworks.size() + td.Frameworks.size()); + cd.Frameworks.insert(cd.Frameworks.end(), fd.Frameworks.begin(), + fd.Frameworks.end()); + cd.Frameworks.insert(cd.Frameworks.end(), td.Frameworks.begin(), + td.Frameworks.end()); + // Use target-wide defines followed by source-specific defines. cd.Defines.reserve(td.Defines.size() + fd.Defines.size()); cd.Defines.insert(cd.Defines.end(), td.Defines.begin(), td.Defines.end()); @@ -1696,6 +1721,13 @@ Json::Value Target::DumpCompileData(CompileData const& cd) } result["includes"] = includes; } + if (!cd.Frameworks.empty()) { + Json::Value frameworks = Json::arrayValue; + for (auto const& i : cd.Frameworks) { + frameworks.append(this->DumpFramework(i)); + } + result["frameworks"] = frameworks; + } if (!cd.Defines.empty()) { Json::Value defines = Json::arrayValue; for (JBT<std::string> const& d : cd.Defines) { @@ -1729,6 +1761,12 @@ Json::Value Target::DumpInclude(CompileData::IncludeEntry const& inc) return include; } +Json::Value Target::DumpFramework(CompileData::IncludeEntry const& fw) +{ + // for now, idem as include + return this->DumpInclude(fw); +} + Json::Value Target::DumpPrecompileHeader(JBT<std::string> const& header) { Json::Value precompileHeader = Json::objectValue; |