CMP0028: Report the target whose link interface has an offending item

Previously items linked via the link interface of a dependency were
reported in CMP0028 messages as if directly linked by a target.
Clarify the messages to indicate that an offending item is actually
in the link interface of a given target, regardless of its consumer.

Move the check to the end of generation and look through the final set
of link implementations and link interfaces that were used for
generation.  This avoids repeating messages on link interfaces that
have multiple consumers.
This commit is contained in:
Brad King
2021-12-16 12:42:29 -05:00
parent a97c92e46e
commit ea050286e7
11 changed files with 175 additions and 59 deletions
@@ -1,6 +1,12 @@
CMake Error at CMP0028-NEW-iface\.cmake:5 \(target_link_libraries\):
Target "foo" links to target "External::Library" but the target was not
found. Perhaps a find_package\(\) call is missing for an IMPORTED target, or
an ALIAS target is missing\?
The link interface of target "iface" contains:
External::Library
but the target was not found. Possible reasons include:
(
\*[^
]+)*
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)
@@ -1,6 +1,12 @@
CMake Error at CMP0028-NEW\.cmake:5 \(target_link_libraries\):
Target "foo" links to target "External::Library" but the target was not
found. Perhaps a find_package\(\) call is missing for an IMPORTED target, or
an ALIAS target is missing\?
Target "foo" links to:
External::Library
but the target was not found. Possible reasons include:
(
\*[^
]+)*
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)
@@ -3,9 +3,15 @@ CMake Warning \(dev\) at CMP0028-WARN-iface\.cmake:3 \(target_link_libraries\):
IMPORTED target. Run "cmake --help-policy CMP0028" for policy details.
Use the cmake_policy command to set the policy and suppress this warning.
Target "foo" links to target "External::Library" but the target was not
found. Perhaps a find_package\(\) call is missing for an IMPORTED target, or
an ALIAS target is missing\?
The link interface of target "iface" contains:
External::Library
but the target was not found. Possible reasons include:
(
\*[^
]+)*
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.
@@ -3,9 +3,15 @@ CMake Warning \(dev\) at CMP0028-WARN\.cmake:3 \(target_link_libraries\):
IMPORTED target. Run "cmake --help-policy CMP0028" for policy details.
Use the cmake_policy command to set the policy and suppress this warning.
Target "foo" links to target "External::Library" but the target was not
found. Perhaps a find_package\(\) call is missing for an IMPORTED target, or
an ALIAS target is missing\?
Target "foo" links to:
External::Library
but the target was not found. Possible reasons include:
(
\*[^
]+)*
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.
@@ -1,6 +1,12 @@
^CMake Error at CMP0079-link-NEW-bogus\.cmake:6 \(set_property\):
Target "top" links to target "::@\(0xdeadbeef\)" but the target was not
found. Perhaps a find_package\(\) call is missing for an IMPORTED target, or
an ALIAS target is missing\?
Target "top" links to:
::@\(0xdeadbeef\)
but the target was not found. Possible reasons include:
(
\*[^
]+)*
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)
@@ -1,13 +1,25 @@
^CMake Error at ConfigCase\.cmake:6 \(target_link_libraries\):
Target "impl" links to target "config::impl-Debug" but the target was not
found. Perhaps a find_package\(\) call is missing for an IMPORTED target, or
an ALIAS target is missing\?
^CMake Error at ConfigCase\.cmake:4 \(target_link_libraries\):
The link interface of target "iface" contains:
config::iface-Debug
but the target was not found. Possible reasons include:
(
\*[^
]+)*
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)
+
CMake Error at ConfigCase\.cmake:4 \(target_link_libraries\):
Target "impl" links to target "config::iface-Debug" but the target was not
found. Perhaps a find_package\(\) call is missing for an IMPORTED target, or
an ALIAS target is missing\?
CMake Error at ConfigCase\.cmake:6 \(target_link_libraries\):
Target "impl" links to:
config::impl-Debug
but the target was not found. Possible reasons include:
(
\*[^
]+)*
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)