On Mon, Jul 20, 2015 at 4:42 PM, Ben Boeckel <ben.boec...@kitware.com> wrote:
>> For testing these properties, what would you suggest? They're >> intended to report local configure-time absolute paths, which can't be >> hard coded... is it enough to check them to make sure they're not >> empty or is there something more robust that could be devised?" > > They should end with the path under the CMake source tree at least (I > assume they are absolute?). Try matching this regex: > > .*/Testing/RunCMake/get_property > > possibly? You can also put the test under an add_subdirectory() call as > well. The attached patch seems to work - Brad, should I submit this to the issue tracker? If it needs any more tweaking let me know. Looking at the target properties test, should there also be a test for the SOURCES property? The SOURCE_DIR property in particular is intended to work with the current behavior (relative path lists unless original target specifier is a full path) from SOURCES, so IMHO it might be a good idea to put a test in for that as well... Cheers, CY
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index 1d27a64..ac893c2 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -114,6 +114,7 @@ Properties on Targets /prop_tgt/AUTOUIC_OPTIONS /prop_tgt/AUTORCC /prop_tgt/AUTORCC_OPTIONS + /prop_tgt/BINARY_DIR /prop_tgt/BUILD_WITH_INSTALL_RPATH /prop_tgt/BUNDLE_EXTENSION /prop_tgt/BUNDLE @@ -244,6 +245,7 @@ Properties on Targets /prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG /prop_tgt/RUNTIME_OUTPUT_NAME /prop_tgt/SKIP_BUILD_RPATH + /prop_tgt/SOURCE_DIR /prop_tgt/SOURCES /prop_tgt/SOVERSION /prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG diff --git a/Help/prop_tgt/BINARY_DIR.rst b/Help/prop_tgt/BINARY_DIR.rst new file mode 100644 index 0000000..a6c1c12 --- /dev/null +++ b/Help/prop_tgt/BINARY_DIR.rst @@ -0,0 +1,4 @@ +BINARY_DIR +---------- + +Reports the value of CMAKE_CURRENT_BINARY_DIR in the directory in which the target was defined. diff --git a/Help/prop_tgt/SOURCE_DIR.rst b/Help/prop_tgt/SOURCE_DIR.rst new file mode 100644 index 0000000..de93f29 --- /dev/null +++ b/Help/prop_tgt/SOURCE_DIR.rst @@ -0,0 +1,4 @@ +SOURCE_DIR +---------- + +Reports the value of CMAKE_CURRENT_SOURCE_DIR in the directory in which the target was defined. diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 0303f1e..ff4f161 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2959,6 +2959,8 @@ const char *cmTarget::GetProperty(const std::string& prop, MAKE_STATIC_PROP(COMPILE_DEFINITIONS); MAKE_STATIC_PROP(IMPORTED); MAKE_STATIC_PROP(NAME); + MAKE_STATIC_PROP(BINARY_DIR); + MAKE_STATIC_PROP(SOURCE_DIR); MAKE_STATIC_PROP(SOURCES); #undef MAKE_STATIC_PROP if(specialProps.empty()) @@ -2971,6 +2973,8 @@ const char *cmTarget::GetProperty(const std::string& prop, specialProps.insert(propCOMPILE_DEFINITIONS); specialProps.insert(propIMPORTED); specialProps.insert(propNAME); + specialProps.insert(propBINARY_DIR); + specialProps.insert(propSOURCE_DIR); specialProps.insert(propSOURCES); } if(specialProps.count(prop)) @@ -3053,6 +3057,14 @@ const char *cmTarget::GetProperty(const std::string& prop, { return this->GetName().c_str(); } + else if (prop == propBINARY_DIR) + { + return this->GetMakefile()->GetCurrentBinaryDirectory(); + } + else if (prop == propSOURCE_DIR) + { + return this->GetMakefile()->GetCurrentSourceDirectory(); + } else if(prop == propSOURCES) { if (this->Internal->SourceEntries.empty()) diff --git a/Tests/RunCMake/get_property/target_properties-stderr.txt b/Tests/RunCMake/get_property/target_properties-stderr.txt index d0981ac..8a06b38 100644 --- a/Tests/RunCMake/get_property/target_properties-stderr.txt +++ b/Tests/RunCMake/get_property/target_properties-stderr.txt @@ -3,4 +3,9 @@ get_property: --><-- get_target_property: -->value<-- get_property: -->value<-- get_target_property: -->gtp_val-NOTFOUND<-- -get_property: --><--$ +get_property: --><-- +get_target_property: -->(.*)Tests/RunCMake/get_property<-- +get_property: -->(.*)Tests/RunCMake/get_property<-- +get_target_property: -->(.*)Tests/RunCMake/get_property/target_properties-build<-- +get_property: -->(.*)Tests/RunCMake/get_property/target_properties-build<--$ + diff --git a/Tests/RunCMake/get_property/target_properties.cmake b/Tests/RunCMake/get_property/target_properties.cmake index c5a141d..9ff833a 100644 --- a/Tests/RunCMake/get_property/target_properties.cmake +++ b/Tests/RunCMake/get_property/target_properties.cmake @@ -14,3 +14,5 @@ set_target_properties(tgt PROPERTIES empty "" custom value) check_target_property(tgt empty) check_target_property(tgt custom) check_target_property(tgt noexist) +check_target_property(tgt SOURCE_DIR) +check_target_property(tgt BINARY_DIR)
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers