add_library: Restore error on alias of non-global imported target

In commit v3.11.0-rc1~433^2~1 (Add support for IMPORTED GLOBAL targets
to be aliased, 2017-09-14) we accidentally dropped the error on calling
`add_library` to alias an imported target that is not globally visible.
The `add_executable` command's equivalent check was properly updated.
Restore the check in `add_library` with the same update.  Also fix the
test case accordingly.

Fixes: #17982
This commit is contained in:
Brad King
2018-05-10 09:54:23 -04:00
parent fbe6cd1596
commit e567d7eb63
3 changed files with 25 additions and 2 deletions

View File

@@ -283,3 +283,12 @@ Changes made since CMake 3.11.0 include the following.
CMake 3.11.0. This has been reverted due to changing behavior of
checks for existing projects. It may be restored in the future
with a policy for compatibility.
3.11.2
------
* Calling :command:`add_library` to create an alias of an imported
target that is not globally visible now causes an error again as
it did prior to 3.11.0. This diagnostic was accidentally dropped
from CMake 3.11.0 and 3.11.1 by the change to allow globally visible
imported targets to be aliased.

View File

@@ -228,6 +228,14 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args,
this->SetError(e.str());
return false;
}
if (aliasedTarget->IsImported() &&
!aliasedTarget->IsImportedGloballyVisible()) {
std::ostringstream e;
e << "cannot create ALIAS target \"" << libName << "\" because target \""
<< aliasedName << "\" is imported but not globally visible.";
this->SetError(e.str());
return false;
}
this->Makefile->AddAlias(libName, aliasedName);
return true;
}

View File

@@ -3,7 +3,13 @@
\"test-exe\" is imported but not globally visible.
Call Stack \(most recent call first\):
CMakeLists.txt:[0-9]+ \(include\)
+
'alias-test-exe' does not exist![?]
*
CMake Error at imported-target.cmake:[0-9]+ \(add_library\):
add_library cannot create ALIAS target "alias-test-lib" because target
"test-lib" is imported but not globally visible.
Call Stack \(most recent call first\):
CMakeLists.txt:[0-9]+ \(include\)
+
'alias-test-lib' does not exist![?]$