|
@@ -54,6 +54,20 @@ const std::string kINTERFACE_LINK_LIBRARIES_DIRECT =
|
|
|
"INTERFACE_LINK_LIBRARIES_DIRECT";
|
|
|
const std::string kINTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE =
|
|
|
"INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE";
|
|
|
+
|
|
|
+unsigned int CheckLinkLibrariesSuppressionRAIICount;
|
|
|
+void MaybeEnableCheckLinkLibraries(cmOptionalLinkImplementation& impl)
|
|
|
+{
|
|
|
+ if (CheckLinkLibrariesSuppressionRAIICount == 0) {
|
|
|
+ impl.CheckLinkLibraries = true;
|
|
|
+ }
|
|
|
+}
|
|
|
+void MaybeEnableCheckLinkLibraries(cmOptionalLinkInterface& iface)
|
|
|
+{
|
|
|
+ if (CheckLinkLibrariesSuppressionRAIICount == 0) {
|
|
|
+ iface.CheckLinkLibraries = true;
|
|
|
+ }
|
|
|
+}
|
|
|
}
|
|
|
|
|
|
class cmTargetCollectLinkLanguages
|
|
@@ -372,7 +386,8 @@ void cmGeneratorTarget::CheckLinkLibraries() const
|
|
|
// There could be several entries used when computing the pre-CMP0022
|
|
|
// default link interface. Check only the entry for our own link impl.
|
|
|
auto const hmi = hm.find(this);
|
|
|
- if (hmi == hm.end() || !hmi->second.LibrariesDone) {
|
|
|
+ if (hmi == hm.end() || !hmi->second.LibrariesDone ||
|
|
|
+ !hmi->second.CheckLinkLibraries) {
|
|
|
continue;
|
|
|
}
|
|
|
for (cmLinkImplItem const& item : hmi->second.Libraries) {
|
|
@@ -392,7 +407,7 @@ void cmGeneratorTarget::CheckLinkLibraries() const
|
|
|
// should be a subset of LinkInterfaceMap (with LINK_ONLY left out).
|
|
|
for (auto const& hmp : this->LinkInterfaceMap) {
|
|
|
for (auto const& hmi : hmp.second) {
|
|
|
- if (!hmi.second.LibrariesDone || hmi.second.LinkOnlyEval) {
|
|
|
+ if (!hmi.second.LibrariesDone || !hmi.second.CheckLinkLibraries) {
|
|
|
continue;
|
|
|
}
|
|
|
for (cmLinkItem const& item : hmi.second.Libraries) {
|
|
@@ -408,6 +423,18 @@ void cmGeneratorTarget::CheckLinkLibraries() const
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+cmGeneratorTarget::CheckLinkLibrariesSuppressionRAII::
|
|
|
+ CheckLinkLibrariesSuppressionRAII()
|
|
|
+{
|
|
|
+ ++CheckLinkLibrariesSuppressionRAIICount;
|
|
|
+}
|
|
|
+
|
|
|
+cmGeneratorTarget::CheckLinkLibrariesSuppressionRAII::
|
|
|
+ ~CheckLinkLibrariesSuppressionRAII()
|
|
|
+{
|
|
|
+ --CheckLinkLibrariesSuppressionRAIICount;
|
|
|
+}
|
|
|
+
|
|
|
namespace {
|
|
|
cm::string_view missingTargetPossibleReasons =
|
|
|
"Possible reasons include:\n"
|
|
@@ -642,7 +669,7 @@ cmLinkInterface const* cmGeneratorTarget::GetLinkInterface(
|
|
|
if (secondPass) {
|
|
|
iface = cmOptionalLinkInterface();
|
|
|
}
|
|
|
- iface.LinkOnlyEval = false;
|
|
|
+ MaybeEnableCheckLinkLibraries(iface);
|
|
|
if (!iface.LibrariesDone) {
|
|
|
iface.LibrariesDone = true;
|
|
|
this->ComputeLinkInterfaceLibraries(config, iface, head, UseTo::Link);
|
|
@@ -766,7 +793,7 @@ const cmLinkInterfaceLibraries* cmGeneratorTarget::GetLinkInterfaceLibraries(
|
|
|
}
|
|
|
|
|
|
cmOptionalLinkInterface& iface = hm[head];
|
|
|
- iface.LinkOnlyEval = (usage == UseTo::LinkInterfaceEval);
|
|
|
+ MaybeEnableCheckLinkLibraries(iface);
|
|
|
if (!iface.LibrariesDone) {
|
|
|
iface.LibrariesDone = true;
|
|
|
this->ComputeLinkInterfaceLibraries(config, iface, head, usage);
|
|
@@ -1036,7 +1063,7 @@ const cmLinkInterface* cmGeneratorTarget::GetImportLinkInterface(
|
|
|
if (secondPass) {
|
|
|
iface = cmOptionalLinkInterface();
|
|
|
}
|
|
|
- iface.LinkOnlyEval = (usage == UseTo::LinkInterfaceEval);
|
|
|
+ MaybeEnableCheckLinkLibraries(iface);
|
|
|
if (!iface.AllDone) {
|
|
|
iface.AllDone = true;
|
|
|
iface.LibrariesDone = true;
|
|
@@ -1109,6 +1136,7 @@ const cmLinkImplementation* cmGeneratorTarget::GetLinkImplementation(
|
|
|
if (secondPass) {
|
|
|
impl = cmOptionalLinkImplementation();
|
|
|
}
|
|
|
+ MaybeEnableCheckLinkLibraries(impl);
|
|
|
if (!impl.LibrariesDone) {
|
|
|
impl.LibrariesDone = true;
|
|
|
this->ComputeLinkImplementationLibraries(config, impl, this, usage);
|
|
@@ -1165,6 +1193,7 @@ cmGeneratorTarget::GetLinkImplementationLibrariesInternal(
|
|
|
}
|
|
|
|
|
|
cmOptionalLinkImplementation& impl = hm[head];
|
|
|
+ MaybeEnableCheckLinkLibraries(impl);
|
|
|
if (!impl.LibrariesDone) {
|
|
|
impl.LibrariesDone = true;
|
|
|
this->ComputeLinkImplementationLibraries(config, impl, head, usage);
|