From e567d7eb639b43c2256340acdf4b0053dec0018a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 10 May 2018 09:54:23 -0400 Subject: 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 --- Help/release/3.11.rst | 9 +++++++++ Source/cmAddLibraryCommand.cxx | 8 ++++++++ Tests/RunCMake/alias_targets/imported-target-stderr.txt | 10 ++++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Help/release/3.11.rst b/Help/release/3.11.rst index dbaa8af..184497c 100644 --- a/Help/release/3.11.rst +++ b/Help/release/3.11.rst @@ -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. diff --git a/Source/cmAddLibraryCommand.cxx b/Source/cmAddLibraryCommand.cxx index 1278232..7792235 100644 --- a/Source/cmAddLibraryCommand.cxx +++ b/Source/cmAddLibraryCommand.cxx @@ -228,6 +228,14 @@ bool cmAddLibraryCommand::InitialPass(std::vector 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; } diff --git a/Tests/RunCMake/alias_targets/imported-target-stderr.txt b/Tests/RunCMake/alias_targets/imported-target-stderr.txt index 12ffbc2..465de03 100644 --- a/Tests/RunCMake/alias_targets/imported-target-stderr.txt +++ b/Tests/RunCMake/alias_targets/imported-target-stderr.txt @@ -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![?]$ -- cgit v0.12