Commit d0be1e15 authored by Brad King's avatar Brad King
Browse files

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.
parent cbca6582
......@@ -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
......
BINARY_DIR
----------
This read-only directory property reports absolute path to the binary
directory corresponding to the source on which it is read.
SOURCE_DIR
----------
This read-only directory property reports absolute path to the source
directory on which it is read.
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.
......
......@@ -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 =
......
......@@ -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<--$
......@@ -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)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment