From 08ce3f486e789275104a390d2d34f36a90c5fd2f Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 10 Sep 2015 22:58:04 +0200 Subject: [PATCH 1/4] cmTarget: Only append non-empty values to buildsystem properties. This is a change in behavior from CMake 3.3, but there is no semantic meaning to empty entries in buildsystem properties. This also restores behavior to that of CMake 2.8.10. --- Source/cmTarget.cxx | 10 +++++----- .../set_property/COMPILE_DEFINITIONS-stdout.txt | 2 +- .../RunCMake/set_property/COMPILE_FEATURES-stdout.txt | 2 +- Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt | 2 +- .../set_property/INCLUDE_DIRECTORIES-stdout.txt | 2 +- Tests/RunCMake/set_property/LINK_LIBRARIES-stdout.txt | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 3425f34ad..2dfa19c17 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1706,7 +1706,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, } else if(prop == "INCLUDE_DIRECTORIES") { - if (value) + if (value && *value) { this->Internal->IncludeDirectoriesEntries.push_back(value); cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); @@ -1715,7 +1715,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, } else if(prop == "COMPILE_OPTIONS") { - if (value) + if (value && *value) { this->Internal->CompileOptionsEntries.push_back(value); cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); @@ -1724,7 +1724,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, } else if(prop == "COMPILE_FEATURES") { - if (value) + if (value && *value) { this->Internal->CompileFeaturesEntries.push_back(value); cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); @@ -1733,7 +1733,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, } else if(prop == "COMPILE_DEFINITIONS") { - if (value) + if (value && *value) { this->Internal->CompileDefinitionsEntries.push_back(value); cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); @@ -1749,7 +1749,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, } else if (prop == "LINK_LIBRARIES") { - if (value) + if (value && *value) { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); cmValueWithOrigin entry(value, lfbt); diff --git a/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt b/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt index b85f41dbc..186fe9904 100644 --- a/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt +++ b/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt @@ -1 +1 @@ --- Target COMPILE_DEFINITIONS is 'a;;b;c;;d;;e' +-- Target COMPILE_DEFINITIONS is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/COMPILE_FEATURES-stdout.txt b/Tests/RunCMake/set_property/COMPILE_FEATURES-stdout.txt index 81ef170b0..bd5a99246 100644 --- a/Tests/RunCMake/set_property/COMPILE_FEATURES-stdout.txt +++ b/Tests/RunCMake/set_property/COMPILE_FEATURES-stdout.txt @@ -1 +1 @@ --- Target COMPILE_FEATURES is 'a;;b;c;;d;;e' +-- Target COMPILE_FEATURES is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt b/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt index f18451abf..65d6934e6 100644 --- a/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt +++ b/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt @@ -1 +1 @@ --- Target COMPILE_OPTIONS is 'a;;b;c;;d;;e' +-- Target COMPILE_OPTIONS is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt b/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt index f9970ce87..955bdf294 100644 --- a/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt +++ b/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt @@ -1 +1 @@ --- Target INCLUDE_DIRECTORIES is 'a;;b;c;;d;;e' +-- Target INCLUDE_DIRECTORIES is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/LINK_LIBRARIES-stdout.txt b/Tests/RunCMake/set_property/LINK_LIBRARIES-stdout.txt index 1f7663b7f..9a3988e25 100644 --- a/Tests/RunCMake/set_property/LINK_LIBRARIES-stdout.txt +++ b/Tests/RunCMake/set_property/LINK_LIBRARIES-stdout.txt @@ -1 +1 @@ --- Target LINK_LIBRARIES is 'a;;b;c;;d;;e' +-- Target LINK_LIBRARIES is 'a;b;c;d;;e' From 158f7e31dc685859f5a53d88e965382c6361efb1 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 10 Sep 2015 22:59:40 +0200 Subject: [PATCH 2/4] cmMakefile: Use appropriate parameter name. --- Source/cmState.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/cmState.cxx b/Source/cmState.cxx index b30c10b1a..b66f403bc 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -1376,11 +1376,11 @@ cmBacktraceRange GetPropertyBacktraces(T const& content, template void AppendEntry(T& content, U& backtraces, V& endContentPosition, - const std::string& vec, const cmListFileBacktrace& lfbt) + const std::string& value, const cmListFileBacktrace& lfbt) { assert(endContentPosition == content.size()); - content.push_back(vec); + content.push_back(value); backtraces.push_back(lfbt); endContentPosition = content.size(); From fb45c37160e4f8d839a2c29bce80cae7563cfd3a Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 10 Sep 2015 23:00:27 +0200 Subject: [PATCH 3/4] cmState: Only append non-empty values to buildsystem properties. This is a change in behavior from CMake 3.3, but there is no semantic meaning to empty entries in buildsystem properties. This also restores behavior to that of CMake 2.8.10. --- Source/cmState.cxx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/cmState.cxx b/Source/cmState.cxx index b66f403bc..f8971adff 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -1378,6 +1378,11 @@ template void AppendEntry(T& content, U& backtraces, V& endContentPosition, const std::string& value, const cmListFileBacktrace& lfbt) { + if (value.empty()) + { + return; + } + assert(endContentPosition == content.size()); content.push_back(value); From ed258d606b87dacc465dad73b04f1c3e270b627c Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 2 Sep 2015 16:38:19 -0400 Subject: [PATCH 4/4] Tests: Cover set_property for buildsystem directory properties Extend the RunCMake.set_property test with cases covering buildsystem directory properties: * COMPILE_DEFINITIONS * COMPILE_OPTIONS * INCLUDE_DIRECTORIES Also test a non-buildsystem property to document the equivalence in behavior. --- .../set_property/COMPILE_DEFINITIONS-stdout.txt | 1 + .../set_property/COMPILE_DEFINITIONS.cmake | 1 + .../set_property/COMPILE_OPTIONS-stdout.txt | 1 + Tests/RunCMake/set_property/COMPILE_OPTIONS.cmake | 1 + Tests/RunCMake/set_property/Common.cmake | 14 ++++++++++++++ .../set_property/INCLUDE_DIRECTORIES-stdout.txt | 1 + .../set_property/INCLUDE_DIRECTORIES.cmake | 1 + Tests/RunCMake/set_property/USER_PROP-stdout.txt | 1 + Tests/RunCMake/set_property/USER_PROP.cmake | 1 + 9 files changed, 22 insertions(+) diff --git a/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt b/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt index 186fe9904..dd5bae1e7 100644 --- a/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt +++ b/Tests/RunCMake/set_property/COMPILE_DEFINITIONS-stdout.txt @@ -1 +1,2 @@ -- Target COMPILE_DEFINITIONS is 'a;b;c;d;;e' +-- Directory COMPILE_DEFINITIONS is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/COMPILE_DEFINITIONS.cmake b/Tests/RunCMake/set_property/COMPILE_DEFINITIONS.cmake index ec07ce907..f0c63bf0f 100644 --- a/Tests/RunCMake/set_property/COMPILE_DEFINITIONS.cmake +++ b/Tests/RunCMake/set_property/COMPILE_DEFINITIONS.cmake @@ -1,2 +1,3 @@ include(Common.cmake) test_target_property(COMPILE_DEFINITIONS) +test_directory_property(COMPILE_DEFINITIONS) diff --git a/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt b/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt index 65d6934e6..1a2050134 100644 --- a/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt +++ b/Tests/RunCMake/set_property/COMPILE_OPTIONS-stdout.txt @@ -1 +1,2 @@ -- Target COMPILE_OPTIONS is 'a;b;c;d;;e' +-- Directory COMPILE_OPTIONS is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/COMPILE_OPTIONS.cmake b/Tests/RunCMake/set_property/COMPILE_OPTIONS.cmake index da20ec868..75f053541 100644 --- a/Tests/RunCMake/set_property/COMPILE_OPTIONS.cmake +++ b/Tests/RunCMake/set_property/COMPILE_OPTIONS.cmake @@ -1,2 +1,3 @@ include(Common.cmake) test_target_property(COMPILE_OPTIONS) +test_directory_property(COMPILE_OPTIONS) diff --git a/Tests/RunCMake/set_property/Common.cmake b/Tests/RunCMake/set_property/Common.cmake index b35948735..9d5e4f4e8 100644 --- a/Tests/RunCMake/set_property/Common.cmake +++ b/Tests/RunCMake/set_property/Common.cmake @@ -12,3 +12,17 @@ macro(test_target_property PROP) message(STATUS "Target ${PROP} is '${val}'") set_property(TARGET CustomTarget PROPERTY ${PROP}) endmacro() + +macro(test_directory_property PROP) + set_property(DIRECTORY PROPERTY ${PROP} x) + set_property(DIRECTORY PROPERTY ${PROP}) + set_property(DIRECTORY APPEND PROPERTY ${PROP}) + set_property(DIRECTORY PROPERTY ${PROP} a) + set_property(DIRECTORY APPEND PROPERTY ${PROP} "") + set_property(DIRECTORY APPEND PROPERTY ${PROP} b c) + set_property(DIRECTORY APPEND PROPERTY ${PROP}) + set_property(DIRECTORY APPEND PROPERTY ${PROP} "d;;e") + get_property(val DIRECTORY PROPERTY ${PROP}) + message(STATUS "Directory ${PROP} is '${val}'") + set_property(DIRECTORY PROPERTY ${PROP}) +endmacro() diff --git a/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt b/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt index 955bdf294..c957dd531 100644 --- a/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt +++ b/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES-stdout.txt @@ -1 +1,2 @@ -- Target INCLUDE_DIRECTORIES is 'a;b;c;d;;e' +-- Directory INCLUDE_DIRECTORIES is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES.cmake b/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES.cmake index 8f44aee58..c9a91516a 100644 --- a/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES.cmake +++ b/Tests/RunCMake/set_property/INCLUDE_DIRECTORIES.cmake @@ -1,2 +1,3 @@ include(Common.cmake) test_target_property(INCLUDE_DIRECTORIES) +test_directory_property(INCLUDE_DIRECTORIES) diff --git a/Tests/RunCMake/set_property/USER_PROP-stdout.txt b/Tests/RunCMake/set_property/USER_PROP-stdout.txt index eaf6e3762..107cc8742 100644 --- a/Tests/RunCMake/set_property/USER_PROP-stdout.txt +++ b/Tests/RunCMake/set_property/USER_PROP-stdout.txt @@ -1 +1,2 @@ -- Target USER_PROP is 'a;b;c;d;;e' +-- Directory USER_PROP is 'a;b;c;d;;e' diff --git a/Tests/RunCMake/set_property/USER_PROP.cmake b/Tests/RunCMake/set_property/USER_PROP.cmake index e1f88e168..aa0aa8370 100644 --- a/Tests/RunCMake/set_property/USER_PROP.cmake +++ b/Tests/RunCMake/set_property/USER_PROP.cmake @@ -1,2 +1,3 @@ include(Common.cmake) test_target_property(USER_PROP) +test_directory_property(USER_PROP)