diff options
author | Brad King <brad.king@kitware.com> | 2020-02-12 14:05:20 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-02-12 14:05:31 (GMT) |
commit | 96ee8b7266134e6b215875d4ead7f9841a7459d7 (patch) | |
tree | 176f6db4208e6309b004229cf4129c9495a60324 | |
parent | 0db0b721564a584ff1783ac2cf14db6fd867d6b2 (diff) | |
parent | 9442ae5083d0b2db8d62bae70bdb7459c111d526 (diff) | |
download | CMake-96ee8b7266134e6b215875d4ead7f9841a7459d7.zip CMake-96ee8b7266134e6b215875d4ead7f9841a7459d7.tar.gz CMake-96ee8b7266134e6b215875d4ead7f9841a7459d7.tar.bz2 |
Merge topic 'install-default-fix' into release-3.17
9442ae5083 install: Fix regression when using default destinations
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4340
7 files changed, 50 insertions, 18 deletions
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx index c67358f..d669ed7 100644 --- a/Source/cmInstallCommand.cxx +++ b/Source/cmInstallCommand.cxx @@ -461,6 +461,10 @@ bool HandleTargetsMode(std::vector<std::string> const& args, std::unique_ptr<cmInstallFilesGenerator> publicHeaderGenerator; std::unique_ptr<cmInstallFilesGenerator> resourceGenerator; + // Avoid selecting default destinations for PUBLIC_HEADER and + // PRIVATE_HEADER if any artifacts are specified. + bool artifactsSpecified = false; + // Track whether this is a namelink-only rule. bool namelinkOnly = false; @@ -480,11 +484,13 @@ bool HandleTargetsMode(std::vector<std::string> const& args, // The import library uses the ARCHIVE properties. archiveGenerator = CreateInstallTargetGenerator( target, archiveArgs, true, helper.Makefile->GetBacktrace()); + artifactsSpecified = true; } if (!runtimeArgs.GetDestination().empty()) { // The DLL uses the RUNTIME properties. runtimeGenerator = CreateInstallTargetGenerator( target, runtimeArgs, false, helper.Makefile->GetBacktrace()); + artifactsSpecified = true; } if (!archiveGenerator && !runtimeGenerator) { archiveGenerator = CreateInstallTargetGenerator( @@ -517,6 +523,9 @@ bool HandleTargetsMode(std::vector<std::string> const& args, } } else { // The shared library uses the LIBRARY properties. + if (!libraryArgs.GetDestination().empty()) { + artifactsSpecified = true; + } if (namelinkMode != cmInstallTargetGenerator::NamelinkModeOnly) { libraryGenerator = CreateInstallTargetGenerator( target, libraryArgs, false, helper.Makefile->GetBacktrace(), @@ -558,6 +567,9 @@ bool HandleTargetsMode(std::vector<std::string> const& args, } } else { // Static libraries use ARCHIVE properties. + if (!archiveArgs.GetDestination().empty()) { + artifactsSpecified = true; + } archiveGenerator = CreateInstallTargetGenerator( target, archiveArgs, false, helper.Makefile->GetBacktrace(), helper.GetArchiveDestination(&archiveArgs)); @@ -625,6 +637,9 @@ bool HandleTargetsMode(std::vector<std::string> const& args, } } else { // Executables use the RUNTIME properties. + if (!runtimeArgs.GetDestination().empty()) { + artifactsSpecified = true; + } runtimeGenerator = CreateInstallTargetGenerator( target, runtimeArgs, false, helper.Makefile->GetBacktrace(), helper.GetRuntimeDestination(&runtimeArgs)); @@ -637,6 +652,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args, !archiveArgs.GetDestination().empty() && target.IsExecutableWithExports()) { // The import library uses the ARCHIVE properties. + artifactsSpecified = true; archiveGenerator = CreateInstallTargetGenerator( target, archiveArgs, true, helper.Makefile->GetBacktrace(), true); } @@ -673,9 +689,17 @@ bool HandleTargetsMode(std::vector<std::string> const& args, } // Create the files install generator. - privateHeaderGenerator = CreateInstallFilesGenerator( - helper.Makefile, absFiles, privateHeaderArgs, false, - helper.GetIncludeDestination(&privateHeaderArgs)); + if (!artifactsSpecified || + !privateHeaderArgs.GetDestination().empty()) { + privateHeaderGenerator = CreateInstallFilesGenerator( + helper.Makefile, absFiles, privateHeaderArgs, false, + helper.GetIncludeDestination(&privateHeaderArgs)); + } else { + std::ostringstream e; + e << "INSTALL TARGETS - target " << target.GetName() << " has " + << "PRIVATE_HEADER files but no PRIVATE_HEADER DESTINATION."; + cmSystemTools::Message(e.str(), "Warning"); + } } files = target.GetProperty("PUBLIC_HEADER"); @@ -687,9 +711,17 @@ bool HandleTargetsMode(std::vector<std::string> const& args, } // Create the files install generator. - publicHeaderGenerator = CreateInstallFilesGenerator( - helper.Makefile, absFiles, publicHeaderArgs, false, - helper.GetIncludeDestination(&publicHeaderArgs)); + if (!artifactsSpecified || + !publicHeaderArgs.GetDestination().empty()) { + publicHeaderGenerator = CreateInstallFilesGenerator( + helper.Makefile, absFiles, publicHeaderArgs, false, + helper.GetIncludeDestination(&publicHeaderArgs)); + } else { + std::ostringstream e; + e << "INSTALL TARGETS - target " << target.GetName() << " has " + << "PUBLIC_HEADER files but no PUBLIC_HEADER DESTINATION."; + cmSystemTools::Message(e.str(), "Warning"); + } } files = target.GetProperty("RESOURCE"); diff --git a/Tests/RunCMake/install/TARGETS-Defaults-Cache-all-check.cmake b/Tests/RunCMake/install/TARGETS-Defaults-Cache-all-check.cmake index 57ad6e1..4a55cd6 100644 --- a/Tests/RunCMake/install/TARGETS-Defaults-Cache-all-check.cmake +++ b/Tests/RunCMake/install/TARGETS-Defaults-Cache-all-check.cmake @@ -8,8 +8,7 @@ if(WIN32) [[mybin/exe\.exe]] [[mybin/(lib)?lib1\.dll]] [[myinclude]] - [[myinclude/obj4\.h]] - [[myinclude/obj5\.h]] + [[myinclude/obj3\.h]] [[mylib]] [[mylib/(lib)?lib1\.(dll\.a|lib)]] [[mylib/(lib)?lib2\.(a|lib)]] @@ -24,8 +23,7 @@ elseif(CYGWIN) [[mybin/cyglib1\.dll]] [[mybin/exe\.exe]] [[myinclude]] - [[myinclude/obj4\.h]] - [[myinclude/obj5\.h]] + [[myinclude/obj3\.h]] [[mylib]] [[mylib/liblib1\.dll\.a]] [[mylib/liblib2\.a]] @@ -39,8 +37,7 @@ else() [[mybin]] [[mybin/exe]] [[myinclude]] - [[myinclude/obj4\.h]] - [[myinclude/obj5\.h]] + [[myinclude/obj3\.h]] [[mylib]] [[mylib/liblib1\.(dylib|so)]] [[mylib/liblib2\.a]] diff --git a/Tests/RunCMake/install/TARGETS-Defaults-Cache-stderr.txt b/Tests/RunCMake/install/TARGETS-Defaults-Cache-stderr.txt new file mode 100644 index 0000000..1939097 --- /dev/null +++ b/Tests/RunCMake/install/TARGETS-Defaults-Cache-stderr.txt @@ -0,0 +1,2 @@ +^INSTALL TARGETS - target lib3 has PRIVATE_HEADER files but no PRIVATE_HEADER DESTINATION\. +INSTALL TARGETS - target lib4 has PUBLIC_HEADER files but no PUBLIC_HEADER DESTINATION\.$ diff --git a/Tests/RunCMake/install/TARGETS-Defaults-Cache.cmake b/Tests/RunCMake/install/TARGETS-Defaults-Cache.cmake index bfd8c2c..58c5273 100644 --- a/Tests/RunCMake/install/TARGETS-Defaults-Cache.cmake +++ b/Tests/RunCMake/install/TARGETS-Defaults-Cache.cmake @@ -2,6 +2,7 @@ enable_language(C) add_executable(exe main.c) add_library(lib1 SHARED obj1.c) +set_property(TARGET lib1 PROPERTY PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/obj3.h) add_library(lib2 STATIC obj3.c) add_library(lib3 SHARED obj4.c) set_property(TARGET lib3 PROPERTY PRIVATE_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/obj4.h) diff --git a/Tests/RunCMake/install/TARGETS-Defaults-all-check.cmake b/Tests/RunCMake/install/TARGETS-Defaults-all-check.cmake index 15335b2..30f2266 100644 --- a/Tests/RunCMake/install/TARGETS-Defaults-all-check.cmake +++ b/Tests/RunCMake/install/TARGETS-Defaults-all-check.cmake @@ -6,8 +6,7 @@ if(WIN32) [[include]] [[include/obj1\.h]] [[include/obj2\.h]] - [[include/obj4\.h]] - [[include/obj5\.h]] + [[include/obj3\.h]] [[lib]] [[lib/(lib)?lib1\.(dll\.a|lib)]] [[lib/(lib)?lib2\.(a|lib)]] @@ -24,8 +23,7 @@ elseif(CYGWIN) [[include]] [[include/obj1\.h]] [[include/obj2\.h]] - [[include/obj4\.h]] - [[include/obj5\.h]] + [[include/obj3\.h]] [[lib]] [[lib/liblib1\.dll\.a]] [[lib/liblib2\.a]] @@ -41,8 +39,7 @@ else() [[include]] [[include/obj1\.h]] [[include/obj2\.h]] - [[include/obj4\.h]] - [[include/obj5\.h]] + [[include/obj3\.h]] [[lib]] [[lib/liblib1\.(dylib|so)]] [[lib/liblib2\.a]] diff --git a/Tests/RunCMake/install/TARGETS-Defaults-stderr.txt b/Tests/RunCMake/install/TARGETS-Defaults-stderr.txt new file mode 100644 index 0000000..1939097 --- /dev/null +++ b/Tests/RunCMake/install/TARGETS-Defaults-stderr.txt @@ -0,0 +1,2 @@ +^INSTALL TARGETS - target lib3 has PRIVATE_HEADER files but no PRIVATE_HEADER DESTINATION\. +INSTALL TARGETS - target lib4 has PUBLIC_HEADER files but no PUBLIC_HEADER DESTINATION\.$ diff --git a/Tests/RunCMake/install/TARGETS-Defaults.cmake b/Tests/RunCMake/install/TARGETS-Defaults.cmake index 324aa11..a580657 100644 --- a/Tests/RunCMake/install/TARGETS-Defaults.cmake +++ b/Tests/RunCMake/install/TARGETS-Defaults.cmake @@ -2,6 +2,7 @@ enable_language(C) add_executable(exe main.c) add_library(lib1 SHARED obj1.c) +set_property(TARGET lib1 PROPERTY PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/obj3.h) add_library(lib2 STATIC obj3.c) add_library(lib3 SHARED obj4.c) set_property(TARGET lib3 PROPERTY PRIVATE_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/obj4.h) |