diff options
author | Brad King <brad.king@kitware.com> | 2016-09-19 17:47:51 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-09-19 18:00:50 (GMT) |
commit | d0be1e15c383f17502d0f47a36d16ba3571b0b79 (patch) | |
tree | b4355818f7516e5cc63ceefda6108cd7c22c6e53 | |
parent | cbca65826c2bf49ba8c99efe8fa315d2942c4836 (diff) | |
download | CMake-d0be1e15c383f17502d0f47a36d16ba3571b0b79.zip CMake-d0be1e15c383f17502d0f47a36d16ba3571b0b79.tar.gz CMake-d0be1e15c383f17502d0f47a36d16ba3571b0b79.tar.bz2 |
Add directory properties to get source and binary directories
Add SOURCE_DIR and BINARY_DIR directory properties that return the
absolute paths to the corresponding directories. These correspond
to the target properties of the same names that we already have.
-rw-r--r-- | Help/manual/cmake-properties.7.rst | 2 | ||||
-rw-r--r-- | Help/prop_dir/BINARY_DIR.rst | 5 | ||||
-rw-r--r-- | Help/prop_dir/SOURCE_DIR.rst | 5 | ||||
-rw-r--r-- | Help/release/dev/directory-list-targets-and-subdirs.rst | 7 | ||||
-rw-r--r-- | Source/cmState.cxx | 10 | ||||
-rw-r--r-- | Tests/RunCMake/get_property/directory_properties-stderr.txt | 10 | ||||
-rw-r--r-- | Tests/RunCMake/get_property/directory_properties.cmake | 5 |
7 files changed, 43 insertions, 1 deletions
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index b15ca9a..2cb6a1a 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -54,6 +54,7 @@ Properties on Directories :maxdepth: 1 /prop_dir/ADDITIONAL_MAKE_CLEAN_FILES + /prop_dir/BINARY_DIR /prop_dir/BUILDSYSTEM_TARGETS /prop_dir/CACHE_VARIABLES /prop_dir/CLEAN_NO_CUSTOM @@ -74,6 +75,7 @@ Properties on Directories /prop_dir/RULE_LAUNCH_COMPILE /prop_dir/RULE_LAUNCH_CUSTOM /prop_dir/RULE_LAUNCH_LINK + /prop_dir/SOURCE_DIR /prop_dir/SUBDIRECTORIES /prop_dir/TEST_INCLUDE_FILE /prop_dir/VARIABLES diff --git a/Help/prop_dir/BINARY_DIR.rst b/Help/prop_dir/BINARY_DIR.rst new file mode 100644 index 0000000..597c79a --- /dev/null +++ b/Help/prop_dir/BINARY_DIR.rst @@ -0,0 +1,5 @@ +BINARY_DIR +---------- + +This read-only directory property reports absolute path to the binary +directory corresponding to the source on which it is read. diff --git a/Help/prop_dir/SOURCE_DIR.rst b/Help/prop_dir/SOURCE_DIR.rst new file mode 100644 index 0000000..ac98c3b --- /dev/null +++ b/Help/prop_dir/SOURCE_DIR.rst @@ -0,0 +1,5 @@ +SOURCE_DIR +---------- + +This read-only directory property reports absolute path to the source +directory on which it is read. diff --git a/Help/release/dev/directory-list-targets-and-subdirs.rst b/Help/release/dev/directory-list-targets-and-subdirs.rst index 5bab665..85f2c82 100644 --- a/Help/release/dev/directory-list-targets-and-subdirs.rst +++ b/Help/release/dev/directory-list-targets-and-subdirs.rst @@ -1,6 +1,13 @@ directory-list-targets-and-subdirs ---------------------------------- +* A :prop_dir:`SOURCE_DIR` directory property was added to get the + absolute path to the source directory associated with a directory. + +* A :prop_dir:`BINARY_DIR` directory property was added to get the + absolute path to the binary directory corresponding to the source + directory on which the property is read. + * A :prop_dir:`BUILDSYSTEM_TARGETS` directory property was added to get the list of logical buildsystem target names added by the project in a directory. diff --git a/Source/cmState.cxx b/Source/cmState.cxx index 37e41ad..6b37b92 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -29,7 +29,9 @@ #include <string.h> #include <utility> +static std::string const kBINARY_DIR = "BINARY_DIR"; static std::string const kBUILDSYSTEM_TARGETS = "BUILDSYSTEM_TARGETS"; +static std::string const kSOURCE_DIR = "SOURCE_DIR"; static std::string const kSUBDIRECTORIES = "SUBDIRECTORIES"; struct cmState::SnapshotDataType @@ -1673,6 +1675,14 @@ const char* cmState::Directory::GetProperty(const std::string& prop, } return ""; } + if (prop == kBINARY_DIR) { + output = this->GetCurrentBinary(); + return output.c_str(); + } + if (prop == kSOURCE_DIR) { + output = this->GetCurrentSource(); + return output.c_str(); + } if (prop == kSUBDIRECTORIES) { std::vector<std::string> child_dirs; std::vector<cmState::Snapshot> const& children = diff --git a/Tests/RunCMake/get_property/directory_properties-stderr.txt b/Tests/RunCMake/get_property/directory_properties-stderr.txt index 5fb79e1..6d5bcdb 100644 --- a/Tests/RunCMake/get_property/directory_properties-stderr.txt +++ b/Tests/RunCMake/get_property/directory_properties-stderr.txt @@ -11,4 +11,12 @@ get_property: -->[^<;]*Tests/RunCMake/get_property/directory_properties/sub1;[^< get_directory_property: -->CustomTop;InterfaceTop<-- get_property: -->CustomTop;InterfaceTop<-- get_directory_property: -->CustomSub;InterfaceSub<-- -get_property: -->CustomSub;InterfaceSub<--$ +get_property: -->CustomSub;InterfaceSub<-- +get_directory_property: -->[^<;]*/Tests/RunCMake/get_property/directory_properties-build<-- +get_property: -->[^<;]*/Tests/RunCMake/get_property/directory_properties-build<-- +get_directory_property: -->[^<;]*/RunCMake/get_property<-- +get_property: -->[^<;]*/Tests/RunCMake/get_property<-- +get_directory_property: -->[^<;]*/Tests/RunCMake/get_property/directory_properties-build/directory_properties<-- +get_property: -->[^<;]*/Tests/RunCMake/get_property/directory_properties-build/directory_properties<-- +get_directory_property: -->[^<;]*/Tests/RunCMake/get_property/directory_properties<-- +get_property: -->[^<;]*/Tests/RunCMake/get_property/directory_properties<--$ diff --git a/Tests/RunCMake/get_property/directory_properties.cmake b/Tests/RunCMake/get_property/directory_properties.cmake index ae57282..4e68738 100644 --- a/Tests/RunCMake/get_property/directory_properties.cmake +++ b/Tests/RunCMake/get_property/directory_properties.cmake @@ -23,3 +23,8 @@ check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}" SUBDIRECTORIES) check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}/directory_properties" SUBDIRECTORIES) check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}" BUILDSYSTEM_TARGETS) check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}/directory_properties" BUILDSYSTEM_TARGETS) + +check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}" BINARY_DIR) +check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}" SOURCE_DIR) +check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}/directory_properties" BINARY_DIR) +check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}/directory_properties" SOURCE_DIR) |