install(EXPORT): Fix crash on target in another directory
Refactoring merged by commit v3.5.0-rc1~299 (Merge topic 'use-generator-target', 2015-10-20) in and around commit v3.5.0-rc1~299^2~13 (cmExportSet: Store a cmGeneratorTarget, 2015-10-17) changed export sets to delay looking up actual targets and stores only their names. However, in InstallCommand::HandleExportMode we need to lookup targets immediately to check them for EXPORT_LINK_INTERFACE_LIBRARIES. The check was accidentally made local to the current directory, so if an export set contains a target from another directory the lookup fails and CMake crashes. Fix the check to look up the target name globally, and tolerate when no target is found just in case. Reported-by: Kelly Thompson <kgt@lanl.gov>
This commit is contained in:
parent
e86383e135
commit
47460f3e15
|
@ -1374,10 +1374,12 @@ bool cmInstallCommand::HandleExportMode(std::vector<std::string> const& args)
|
|||
tei != exportSet->GetTargetExports()->end(); ++tei)
|
||||
{
|
||||
cmTargetExport const* te = *tei;
|
||||
cmTarget* tgt = this->Makefile->FindTarget(te->TargetName);
|
||||
cmTarget* tgt =
|
||||
this->Makefile->GetGlobalGenerator()->FindTarget(te->TargetName);
|
||||
const bool newCMP0022Behavior =
|
||||
tgt->GetPolicyStatusCMP0022() != cmPolicies::WARN
|
||||
&& tgt->GetPolicyStatusCMP0022() != cmPolicies::OLD;
|
||||
(tgt &&
|
||||
tgt->GetPolicyStatusCMP0022() != cmPolicies::WARN &&
|
||||
tgt->GetPolicyStatusCMP0022() != cmPolicies::OLD);
|
||||
|
||||
if(!newCMP0022Behavior)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
enable_language(C)
|
||||
add_subdirectory(EXPORT-OldIFace)
|
||||
add_library(foo SHARED empty.c)
|
||||
target_link_libraries(foo bar)
|
||||
install(TARGETS foo DESTINATION lib EXPORT fooExport)
|
||||
install(EXPORT fooExport DESTINATION lib/cmake/foo EXPORT_LINK_INTERFACE_LIBRARIES)
|
|
@ -0,0 +1,2 @@
|
|||
add_library(bar SHARED ../empty.c)
|
||||
install(TARGETS bar DESTINATION lib EXPORT fooExport)
|
|
@ -10,6 +10,7 @@ run_cmake(DIRECTORY-DIRECTORY-bad)
|
|||
run_cmake(DIRECTORY-DESTINATION-bad)
|
||||
run_cmake(FILES-DESTINATION-bad)
|
||||
run_cmake(TARGETS-DESTINATION-bad)
|
||||
run_cmake(EXPORT-OldIFace)
|
||||
run_cmake(CMP0062-OLD)
|
||||
run_cmake(CMP0062-NEW)
|
||||
run_cmake(CMP0062-WARN)
|
||||
|
|
Loading…
Reference in New Issue