Fix regressions with Fortran

Closes: #1041853
ci/unstable
Timo Röhling 1 year ago
parent f02b6ed046
commit 98e9760213

@ -1 +1,3 @@
0001-Prefer-default-Python-version.patch 0001-Prefer-default-Python-version.patch
upstream/0002-fix-typo-in-Fortran_PREPROCESS-property-initializati.patch
upstream/0003-cmComputeLinkInformation-track-OBJECT-library-depend.patch

@ -0,0 +1,24 @@
From: =?utf-8?q?Timo_R=C3=B6hling?= <roehling@debian.org>
Date: Tue, 25 Jul 2023 16:38:44 +0200
Subject: fix typo in Fortran_PREPROCESS property initialization
Origin: https://gitlab.kitware.com/cmake/cmake/-/merge_requests/8654
Bug: https://gitlab.kitware.com/cmake/cmake/-/issues/25123
Bug-Debian: https://bugs.debian.org/1041853
---
Source/cmTarget.cxx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 81497f5..b53adf8 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -420,7 +420,7 @@ TargetProperty const StaticTargetProperties[] = {
{ "Fortran_FORMAT"_s, IC::CanCompileSources },
{ "Fortran_MODULE_DIRECTORY"_s, IC::CanCompileSources },
{ "Fortran_COMPILER_LAUNCHER"_s, IC::CanCompileSources },
- { "Fortran_PREPRPOCESS"_s, IC::CanCompileSources },
+ { "Fortran_PREPROCESS"_s, IC::CanCompileSources },
{ "Fortran_VISIBILITY_PRESET"_s, IC::CanCompileSources },
// ---- HIP
COMMON_LANGUAGE_PROPERTIES(HIP),

@ -0,0 +1,107 @@
From: Ben Boeckel <ben.boeckel@kitware.com>
Date: Sat, 22 Jul 2023 06:46:31 -0400
Subject: cmComputeLinkInformation: track OBJECT library dependencies
In commit b6a5382217 (Ninja: depend on language module information files
directly, 2023-02-10), introduced via !8197, language-specific module
information files (`CMakeFiles/<target>.dir/<lang>Modules.json`) files
were added as real dependencies to the dyndep collation steps.
Previously, the behavior was to inform the collator of all possible
targets and search for the files manually ignoring those which did not
exist with ordering enforced by depending on the linker output of all
dependent targets. This behavior could lead to stale information being
used (e.g., if a target stops providing any targets) and also did not
reliably build everything needed on rebuilds. Afterwards, the internal
computation changed the dependency from all possible targets to an exact
set of "these targets might have modules" query, however one that did
not include `OBJECT` libraries since do not have `LinkEntry` items
internally (their objects are instead treated as source files). As a
stopgap measure, track `OBJECT` libraries in a separate list and query
them explicitly when gathering targets which may have interesting
information. Future work can add `LinkEntry` items to represent these
targets once all `LinkEntry` consumers have been audited to make sure
they are not surprised by any `OBJECT` library entries.
Bug: https://gitlab.kitware.com/cmake/cmake/-/issues/25112
---
Source/cmCommonTargetGenerator.cxx | 12 +++++++++---
Source/cmComputeLinkInformation.cxx | 14 ++++++++++++--
Source/cmComputeLinkInformation.h | 3 +++
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx
index e635dd9..1924235 100644
--- a/Source/cmCommonTargetGenerator.cxx
+++ b/Source/cmCommonTargetGenerator.cxx
@@ -170,9 +170,15 @@ std::vector<std::string> cmCommonTargetGenerator::GetLinkedTargetDirectories(
cmGlobalCommonGenerator* const gg = this->GlobalCommonGenerator;
if (cmComputeLinkInformation* cli =
this->GeneratorTarget->GetLinkInformation(config)) {
- cmComputeLinkInformation::ItemVector const& items = cli->GetItems();
- for (auto const& item : items) {
- cmGeneratorTarget const* linkee = item.Target;
+ std::vector<cmGeneratorTarget const*> targets;
+ for (auto const& item : cli->GetItems()) {
+ targets.push_back(item.Target);
+ }
+ for (auto const* target : cli->GetObjectLibrariesLinked()) {
+ targets.push_back(target);
+ }
+
+ for (auto const* linkee : targets) {
if (linkee &&
!linkee->IsImported()
// Skip targets that build after this one in a static lib cycle.
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index b80b3cb..ebbb88f 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -525,6 +525,12 @@ cmComputeLinkInformation::GetSharedLibrariesLinked() const
return this->SharedLibrariesLinked;
}
+const std::vector<const cmGeneratorTarget*>&
+cmComputeLinkInformation::GetObjectLibrariesLinked() const
+{
+ return this->ObjectLibrariesLinked;
+}
+
bool cmComputeLinkInformation::Compute()
{
// Skip targets that do not link.
@@ -1147,8 +1153,12 @@ void cmComputeLinkInformation::AddItem(LinkEntry const& entry)
this->AddItem(BT<std::string>(libName, item.Backtrace));
}
} else if (tgt->GetType() == cmStateEnums::OBJECT_LIBRARY) {
- // Ignore object library!
- // Its object-files should already have been extracted for linking.
+ if (!tgt->HaveCxx20ModuleSources() && !tgt->HaveFortranSources(config)) {
+ // Ignore object library!
+ // Its object-files should already have been extracted for linking.
+ } else {
+ this->ObjectLibrariesLinked.push_back(entry.Target);
+ }
} else {
// Decide whether to use an import library.
cmStateEnums::ArtifactType artifact = tgt->HasImportLibrary(config)
diff --git a/Source/cmComputeLinkInformation.h b/Source/cmComputeLinkInformation.h
index a4ada1f..8393a29 100644
--- a/Source/cmComputeLinkInformation.h
+++ b/Source/cmComputeLinkInformation.h
@@ -96,6 +96,8 @@ public:
std::string GetRPathString(bool for_install) const;
std::string GetChrpathString() const;
std::set<cmGeneratorTarget const*> const& GetSharedLibrariesLinked() const;
+ std::vector<cmGeneratorTarget const*> const& GetObjectLibrariesLinked()
+ const;
std::vector<cmGeneratorTarget const*> const& GetRuntimeDLLs() const
{
return this->RuntimeDLLs;
@@ -132,6 +134,7 @@ private:
std::vector<std::string> FrameworkPaths;
std::vector<std::string> RuntimeSearchPath;
std::set<cmGeneratorTarget const*> SharedLibrariesLinked;
+ std::vector<cmGeneratorTarget const*> ObjectLibrariesLinked;
std::vector<cmGeneratorTarget const*> RuntimeDLLs;
// Context information.
Loading…
Cancel
Save