From e454cba292f2acf29b4a7a39897f14b1dc1f2ad6 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 00:21:50 +0200 Subject: [PATCH 01/12] Docs: Document file(GENERATE) CONDITION as optional. --- Source/cmFileCommand.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h index 586fee2ad..aa755d1f5 100644 --- a/Source/cmFileCommand.h +++ b/Source/cmFileCommand.h @@ -90,7 +90,7 @@ public: " file(TIMESTAMP filename variable [] [UTC])\n" " file(GENERATE OUTPUT output_file\n" " \n" - " CONDITION expression)\n" + " [CONDITION expression])\n" "WRITE will write a message into a file called 'filename'. It " "overwrites the file if it already exists, and creates the file " "if it does not exist. (If the file is a build input, use " From b60a29eaa1b111393e925eeea9bfa2877430a202 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 09:24:22 +0200 Subject: [PATCH 02/12] Qt4Macros: Remove unneeded generate CONDITION. --- Modules/Qt4Macros.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake index 5e13b59a2..a6f2e9ccd 100644 --- a/Modules/Qt4Macros.cmake +++ b/Modules/Qt4Macros.cmake @@ -125,7 +125,6 @@ macro (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target) file (GENERATE OUTPUT ${_moc_parameters_file} CONTENT "${targetdefines}${targetincludes}${targetoptions}${_moc_parameters}\n" - CONDITION 1 ) set(targetincludes) From a413a408734c61d8dff400c25912ef43ccb1e657 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 09:34:05 +0200 Subject: [PATCH 03/12] Qt4Macros: Remove undefined varible use. This may have been added in anticipation of processing COMPILE_OPTIONS, but as moc does not accept them, there is no need for it. --- Modules/Qt4Macros.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake index a6f2e9ccd..d71ef2aa3 100644 --- a/Modules/Qt4Macros.cmake +++ b/Modules/Qt4Macros.cmake @@ -124,7 +124,7 @@ macro (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target) file (GENERATE OUTPUT ${_moc_parameters_file} - CONTENT "${targetdefines}${targetincludes}${targetoptions}${_moc_parameters}\n" + CONTENT "${targetdefines}${targetincludes}${_moc_parameters}\n" ) set(targetincludes) From 4f4d69fcc26ac1c528c70ef150ca6f3bb951d5e4 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 09:35:57 +0200 Subject: [PATCH 04/12] Qt4Macros: Simplify some variable population. --- Modules/Qt4Macros.cmake | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake index d71ef2aa3..f1aedd743 100644 --- a/Modules/Qt4Macros.cmake +++ b/Modules/Qt4Macros.cmake @@ -113,11 +113,9 @@ macro (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target) set (_moc_parameters ${moc_flags} ${moc_options} -o "${outfile}" "${infile}") string (REPLACE ";" "\n" _moc_parameters "${_moc_parameters}") - set(targetincludes) - set(targetdefines) if(moc_target) - list(APPEND targetincludes "$") - list(APPEND targetdefines "$") + set(targetincludes "$") + set(targetdefines "$") set(targetincludes "$<$:-I$\n>") set(targetdefines "$<$:-D$\n>") From f10e64804e13c7e5505ee2a2da5b4384f8616d7a Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 09:26:59 +0200 Subject: [PATCH 05/12] Docs: Document existing target property debugging options. --- Source/cmDocumentVariables.cxx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx index cfd5e76df..168d1c672 100644 --- a/Source/cmDocumentVariables.cxx +++ b/Source/cmDocumentVariables.cxx @@ -963,9 +963,11 @@ void cmDocumentVariables::DefineVariables(cmake* cm) "Enables tracing output for target properties.", "This variable can be populated with a list of properties to generate " "debug output for when evaluating target properties. Currently it can " - "only be used when evaluating the INCLUDE_DIRECTORIES target property. " - "In that case, it outputs a backtrace for each include directory in " - "the build. Default is unset.",false,"Variables That Change Behavior"); + "only be used when evaluating the INCLUDE_DIRECTORIES, " + "COMPILE_DEFINITIONS and COMPILE_OPTIONS target properties. " + "In that case, it outputs a backtrace for each entry in the target " + "propertythe build. Default is unset.", + false,"Variables That Change Behavior"); // Variables defined by CMake that describe the system From d8cb47f23c6da075e7e69dc055ca28b676682ad4 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 09:28:11 +0200 Subject: [PATCH 06/12] Docs: Trim trailing whitespace in generated doc. --- Source/cmMakefile.cxx | 2 +- Source/cmTarget.cxx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 2cd19cf2e..78012de7b 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -4081,7 +4081,7 @@ void cmMakefile::DefineProperties(cmake *cm) "List of options to pass to the compiler.", "This property specifies the list of directories given " "so far for this property. " - "This property exists on directories and targets. " + "This property exists on directories and targets." "\n" "The target property values are used by the generators to set " "the options for the compiler.\n" diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 0b3b7853e..189f763e8 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -304,7 +304,7 @@ void cmTarget::DefineProperties(cmake *cm) "List of options to pass to the compiler.", "This property specifies the list of options specified " "so far for this property. " - "This property exists on directories and targets. " + "This property exists on directories and targets." "\n" "The target property values are used by the generators to set " "the options for the compiler.\n" From 6f6391b771712fa25366763793e5331c77f6e96f Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 09:30:40 +0200 Subject: [PATCH 07/12] Docs: Generalize and de-duplicate VISIBILITY_PREFIX docs. --- Source/cmTarget.cxx | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 189f763e8..6dde5edd8 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1001,22 +1001,13 @@ void cmTarget::DefineProperties(cmake *cm) "(such as \"lib\") on a library name."); cm->DefineProperty - ("C_VISIBILITY_PRESET", cmProperty::TARGET, + ("_VISIBILITY_PRESET", cmProperty::TARGET, "Value for symbol visibility compile flags", - "The C_VISIBILITY_PRESET property determines the value passed used in " - "a visibility related compile option, such as -fvisibility=. This " - "property only has an affect for libraries and executables with " + "The _VISIBILITY_PRESET property determines the value passed in " + "a visibility related compile option, such as -fvisibility= for . " + "This property only has an affect for libraries and executables with " "exports. This property is initialized by the value of the variable " - "CMAKE_C_VISIBILITY_PRESET if it is set when a target is created."); - - cm->DefineProperty - ("CXX_VISIBILITY_PRESET", cmProperty::TARGET, - "Value for symbol visibility compile flags", - "The CXX_VISIBILITY_PRESET property determines the value passed used in " - "a visibility related compile option, such as -fvisibility=. This " - "property only has an affect for libraries and executables with " - "exports. This property is initialized by the value of the variable " - "CMAKE_CXX_VISIBILITY_PRESET if it is set when a target is created."); + "CMAKE__VISIBILITY_PRESET if it is set when a target is created."); cm->DefineProperty ("VISIBILITY_INLINES_HIDDEN", cmProperty::TARGET, From 79a7a81327d4e5b7cf9e16021ad4dc98888969eb Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 09:31:14 +0200 Subject: [PATCH 08/12] Docs: Document variables for default visibility values. --- Source/cmDocumentVariables.cxx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx index 168d1c672..58b71473a 100644 --- a/Source/cmDocumentVariables.cxx +++ b/Source/cmDocumentVariables.cxx @@ -1520,6 +1520,22 @@ void cmDocumentVariables::DefineVariables(cmake* cm) "See that target property for additional information.", false, "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE__VISIBILITY_PRESET", cmProperty::VARIABLE, + "Default value for _VISIBILITY_PRESET of targets.", + "This variable is used to initialize the " + "_VISIBILITY_PRESET property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_VISIBILITY_INLINES_HIDDEN", cmProperty::VARIABLE, + "Default value for VISIBILITY_INLINES_HIDDEN of targets.", + "This variable is used to initialize the " + "VISIBILITY_INLINES_HIDDEN property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); // Variables defined when the a language is enabled These variables will // also be defined whenever CMake has loaded its support for compiling (LANG) From ff3d5fae5d8549ff1966acc1f883cc1ddb061d61 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 12:12:13 +0200 Subject: [PATCH 09/12] Export: Fix typo of LINK_INTERFACE_LIBRARIES. Refer correctly to the old property, not the new one. --- Source/cmExportFileGenerator.cxx | 2 +- Tests/RunCMake/CMP0022/CMP0022-export-stderr.txt | 2 +- Tests/RunCMake/CMP0022/CMP0022-install-export-stderr.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx index 4de1aaea7..ab9744b27 100644 --- a/Source/cmExportFileGenerator.cxx +++ b/Source/cmExportFileGenerator.cxx @@ -636,7 +636,7 @@ cmExportFileGenerator cmMakefile *mf = target->GetMakefile(); cmOStringStream e; e << "Target \"" << target->GetName() << "\" has policy CMP0022 enabled, " - "but also has old-style INTERFACE_LINK_LIBRARIES properties " + "but also has old-style LINK_INTERFACE_LIBRARIES properties " "populated, but it was exported without the " "EXPORT_LINK_INTERFACE_LIBRARIES to export the old-style properties"; mf->IssueMessage(cmake::FATAL_ERROR, e.str()); diff --git a/Tests/RunCMake/CMP0022/CMP0022-export-stderr.txt b/Tests/RunCMake/CMP0022/CMP0022-export-stderr.txt index 6c2905702..ae7627e1e 100644 --- a/Tests/RunCMake/CMP0022/CMP0022-export-stderr.txt +++ b/Tests/RunCMake/CMP0022/CMP0022-export-stderr.txt @@ -1,4 +1,4 @@ CMake Error at CMP0022-export.cmake:11 \(export\): Target "cmp0022NEW" has policy CMP0022 enabled, but also has old-style - INTERFACE_LINK_LIBRARIES properties populated, but it was exported without + LINK_INTERFACE_LIBRARIES properties populated, but it was exported without the EXPORT_LINK_INTERFACE_LIBRARIES to export the old-style properties diff --git a/Tests/RunCMake/CMP0022/CMP0022-install-export-stderr.txt b/Tests/RunCMake/CMP0022/CMP0022-install-export-stderr.txt index 3425e8e47..405dd8dc8 100644 --- a/Tests/RunCMake/CMP0022/CMP0022-install-export-stderr.txt +++ b/Tests/RunCMake/CMP0022/CMP0022-install-export-stderr.txt @@ -1,4 +1,4 @@ CMake Error in CMakeLists.txt: Target "cmp0022NEW" has policy CMP0022 enabled, but also has old-style - INTERFACE_LINK_LIBRARIES properties populated, but it was exported without + LINK_INTERFACE_LIBRARIES properties populated, but it was exported without the EXPORT_LINK_INTERFACE_LIBRARIES to export the old-style properties From f94bdb3deb70d0fa7ed5275609318be8ac79503b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 14:02:18 +0200 Subject: [PATCH 10/12] cmTarget: Remove duplicates when printing traces of tll signatures --- Source/cmTarget.cxx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 6dde5edd8..136c43cfe 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2521,6 +2521,7 @@ void cmTarget::GetTllSignatureTraces(cmOStringStream &s, = (sig == cmTarget::KeywordTLLSignature ? "keyword" : "plain"); s << "The uses of the " << sigString << " signature are here:\n"; + std::set emitted; for(std::vector::const_iterator it = sigs.begin(); it != sigs.end(); ++it) { @@ -2528,7 +2529,12 @@ void cmTarget::GetTllSignatureTraces(cmOStringStream &s, if(i != it->end()) { cmListFileContext const& lfc = *i; - s << " * " << (lfc.Line? "": " in ") << lfc << std::endl; + cmOStringStream line; + line << " * " << (lfc.Line? "": " in ") << lfc << std::endl; + if (emitted.insert(line.str()).second) + { + s << line.str(); + } ++i; } } From c8a10ba9ad8707cfb892ca812efa2f6899adf60b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 26 Jul 2013 14:03:44 +0200 Subject: [PATCH 11/12] cmTarget: Fix iface libraries and languages for static libraries. --- Source/cmTarget.cxx | 17 ++++++++++++++++- .../cmp0022/CMakeLists.txt | 9 +++++++++ .../cmp0022/staticlib1.cpp | 2 ++ .../target_link_libraries/cmp0022/staticlib1.h | 4 ++++ .../cmp0022/staticlib2.cpp | 2 ++ .../target_link_libraries/cmp0022/staticlib2.h | 4 ++++ .../cmp0022/staticlib_exe.cpp | 8 ++++++++ 7 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.cpp create mode 100644 Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.h create mode 100644 Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.cpp create mode 100644 Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.h create mode 100644 Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib_exe.cpp diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 136c43cfe..622e812c9 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -6467,6 +6467,15 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface, break; } } + else + { + iface.Libraries = impl->Libraries; + if(this->GetType() == cmTarget::STATIC_LIBRARY) + { + // Targets using this archive need its language runtime libraries. + iface.Languages = impl->Languages; + } + } } } @@ -6495,7 +6504,8 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface, headTarget, this, &dagChecker), iface.Libraries); - if(this->GetType() == cmTarget::SHARED_LIBRARY) + if(this->GetType() == cmTarget::SHARED_LIBRARY + || this->GetType() == cmTarget::STATIC_LIBRARY) { // Shared libraries may have runtime implementation dependencies // on other shared libraries that are not in the interface. @@ -6529,6 +6539,11 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface, } } } + if(this->GetType() == cmTarget::STATIC_LIBRARY) + { + // Targets using this archive need its language runtime libraries. + iface.Languages = impl->Languages; + } } } else if (this->GetPolicyStatusCMP0022() == cmPolicies::WARN diff --git a/Tests/CMakeCommands/target_link_libraries/cmp0022/CMakeLists.txt b/Tests/CMakeCommands/target_link_libraries/cmp0022/CMakeLists.txt index dd6ab416c..07d7c4392 100644 --- a/Tests/CMakeCommands/target_link_libraries/cmp0022/CMakeLists.txt +++ b/Tests/CMakeCommands/target_link_libraries/cmp0022/CMakeLists.txt @@ -16,3 +16,12 @@ assert_property(cmp0022ifacelib INTERFACE_LINK_LIBRARIES "") add_executable(cmp0022exe cmp0022exe.cpp) target_link_libraries(cmp0022exe cmp0022lib) + +add_library(staticlib1 STATIC staticlib1.cpp) +generate_export_header(staticlib1) +add_library(staticlib2 STATIC staticlib2.cpp) +generate_export_header(staticlib2) +target_link_libraries(staticlib1 LINK_PUBLIC staticlib2) + +add_executable(staticlib_exe staticlib_exe.cpp) +target_link_libraries(staticlib_exe staticlib1) diff --git a/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.cpp b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.cpp new file mode 100644 index 000000000..a253c46f6 --- /dev/null +++ b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.cpp @@ -0,0 +1,2 @@ + +int staticlib1() { return 0; } diff --git a/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.h b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.h new file mode 100644 index 000000000..4bbf23ffd --- /dev/null +++ b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib1.h @@ -0,0 +1,4 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int staticlib1(); diff --git a/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.cpp b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.cpp new file mode 100644 index 000000000..4e38063b5 --- /dev/null +++ b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.cpp @@ -0,0 +1,2 @@ + +int staticlib2() { return 0; } diff --git a/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.h b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.h new file mode 100644 index 000000000..a4e07b6c1 --- /dev/null +++ b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib2.h @@ -0,0 +1,4 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int staticlib2(); diff --git a/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib_exe.cpp b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib_exe.cpp new file mode 100644 index 000000000..97adc40db --- /dev/null +++ b/Tests/CMakeCommands/target_link_libraries/cmp0022/staticlib_exe.cpp @@ -0,0 +1,8 @@ + +#include "staticlib1.h" +#include "staticlib2.h" + +int main() +{ + return staticlib1() + staticlib2(); +} From b8dc7fad23a0b6867dae30e3cd6a23c82d6cfac9 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 25 Jul 2013 09:12:28 +0200 Subject: [PATCH 12/12] Genex: Disallow LINKER_LANGUAGE only when used on a static library. For shared libraries and executables, the linker_language is indepenedent of the linked libraries. --- Source/cmGeneratorExpressionEvaluator.cxx | 5 +++-- Source/cmTarget.cxx | 8 ++++---- Source/cmTarget.h | 3 +++ Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index b59298fee..d0b61909a 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -790,11 +790,12 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode if (propertyName == "LINKER_LANGUAGE") { - if (dagCheckerParent && dagCheckerParent->EvaluatingLinkLibraries()) + if (target->LinkLanguagePropagatesToDependents() && + dagCheckerParent && dagCheckerParent->EvaluatingLinkLibraries()) { reportError(context, content->GetOriginalExpression(), "LINKER_LANGUAGE target property can not be used while evaluating " - "link libraries"); + "link libraries for a static library"); return std::string(); } const char *lang = target->GetLinkerLanguage(context->Config); diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 622e812c9..ffd4008b3 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -6241,7 +6241,7 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config, } // Get the link languages. - if(this->GetType() == cmTarget::STATIC_LIBRARY) + if(this->LinkLanguagePropagatesToDependents()) { std::string linkProp = "IMPORTED_LINK_INTERFACE_LANGUAGES"; linkProp += suffix; @@ -6470,7 +6470,7 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface, else { iface.Libraries = impl->Libraries; - if(this->GetType() == cmTarget::STATIC_LIBRARY) + if(this->LinkLanguagePropagatesToDependents()) { // Targets using this archive need its language runtime libraries. iface.Languages = impl->Languages; @@ -6539,7 +6539,7 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface, } } } - if(this->GetType() == cmTarget::STATIC_LIBRARY) + if(this->LinkLanguagePropagatesToDependents()) { // Targets using this archive need its language runtime libraries. iface.Languages = impl->Languages; @@ -6558,7 +6558,7 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface, iface.ImplementationIsInterface = true; iface.Libraries = impl->Libraries; iface.WrongConfigLibraries = impl->WrongConfigLibraries; - if(this->GetType() == cmTarget::STATIC_LIBRARY) + if(this->LinkLanguagePropagatesToDependents()) { // Targets using this archive need its language runtime libraries. iface.Languages = impl->Languages; diff --git a/Source/cmTarget.h b/Source/cmTarget.h index 24a71ed63..27b74ca4b 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -549,6 +549,9 @@ public: void FinalizeSystemIncludeDirectories(); + bool LinkLanguagePropagatesToDependents() const + { return this->TargetTypeValue == STATIC_LIBRARY; } + private: // The set of include directories that are marked as system include // directories. diff --git a/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake b/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake index d4e31cde3..64f394c11 100644 --- a/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake +++ b/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake @@ -1,4 +1,4 @@ -add_library(foo SHARED empty.cpp) -add_library(bar SHARED empty.cpp) +add_library(foo STATIC empty.cpp) +add_library(bar STATIC empty.cpp) target_link_libraries(foo $<$,anything>:bar>)