mirror of
https://github.com/reactos/CMake.git
synced 2024-11-29 06:20:23 +00:00
Merge topic 'directory-list-targets-and-subdirs'
d0be1e15
Add directory properties to get source and binary directoriescbca6582
Add directory property to list buildsystem targets7a4b8d0d
Add a directory property to list subdirectories089868a2
cmState: Record buildsystem target names in each directory
This commit is contained in:
commit
6b8812c27e
@ -54,6 +54,8 @@ 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
|
||||
/prop_dir/CMAKE_CONFIGURE_DEPENDS
|
||||
@ -73,6 +75,8 @@ 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
|
||||
/prop_dir/VS_GLOBAL_SECTION_POST_section
|
||||
|
5
Help/prop_dir/BINARY_DIR.rst
Normal file
5
Help/prop_dir/BINARY_DIR.rst
Normal file
@ -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.
|
11
Help/prop_dir/BUILDSYSTEM_TARGETS.rst
Normal file
11
Help/prop_dir/BUILDSYSTEM_TARGETS.rst
Normal file
@ -0,0 +1,11 @@
|
||||
BUILDSYSTEM_TARGETS
|
||||
-------------------
|
||||
|
||||
This read-only directory property contains a
|
||||
:ref:`;-list <CMake Language Lists>` of buildsystem targets added in the
|
||||
directory by calls to the :command:`add_library`, :command:`add_executable`,
|
||||
and :command:`add_custom_target` commands. The list does not include any
|
||||
:ref:`Imported Targets` or :ref:`Alias Targets`, but does include
|
||||
:ref:`Interface Libraries`. Each entry in the list is the logical name
|
||||
of a target, suitable to pass to the :command:`get_property` command
|
||||
``TARGET`` option.
|
5
Help/prop_dir/SOURCE_DIR.rst
Normal file
5
Help/prop_dir/SOURCE_DIR.rst
Normal file
@ -0,0 +1,5 @@
|
||||
SOURCE_DIR
|
||||
----------
|
||||
|
||||
This read-only directory property reports absolute path to the source
|
||||
directory on which it is read.
|
15
Help/prop_dir/SUBDIRECTORIES.rst
Normal file
15
Help/prop_dir/SUBDIRECTORIES.rst
Normal file
@ -0,0 +1,15 @@
|
||||
SUBDIRECTORIES
|
||||
--------------
|
||||
|
||||
This read-only directory property contains a
|
||||
:ref:`;-list <CMake Language Lists>` of subdirectories processed so far by
|
||||
the :command:`add_subdirectory` or :command:`subdirs` commands. Each entry is
|
||||
the absolute path to the source directory (containing the ``CMakeLists.txt``
|
||||
file). This is suitable to pass to the :command:`get_property` command
|
||||
``DIRECTORY`` option.
|
||||
|
||||
.. note::
|
||||
|
||||
The :command:`subdirs` command does not process its arguments until
|
||||
after the calling directory is fully processed. Therefore looking
|
||||
up this property in the current directory will not see them.
|
16
Help/release/dev/directory-list-targets-and-subdirs.rst
Normal file
16
Help/release/dev/directory-list-targets-and-subdirs.rst
Normal file
@ -0,0 +1,16 @@
|
||||
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.
|
||||
|
||||
* A :prop_dir:`SUBDIRECTORIES` directory property was added to
|
||||
get the list of subdirectories added by a project in a directory.
|
@ -1930,6 +1930,7 @@ cmTarget* cmMakefile::AddNewTarget(cmState::TargetType type,
|
||||
name, cmTarget(name, type, cmTarget::VisibilityNormal, this)))
|
||||
.first;
|
||||
this->GetGlobalGenerator()->IndexTarget(&it->second);
|
||||
this->GetStateSnapshot().GetDirectory().AddNormalTargetName(name);
|
||||
return &it->second;
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,11 @@
|
||||
#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
|
||||
{
|
||||
cmState::PositionType ScopeParent;
|
||||
@ -94,6 +99,8 @@ struct cmState::BuildsystemDirectoryStateType
|
||||
std::vector<std::string> CompileOptions;
|
||||
std::vector<cmListFileBacktrace> CompileOptionsBacktraces;
|
||||
|
||||
std::vector<std::string> NormalTargetNames;
|
||||
|
||||
std::string ProjectName;
|
||||
|
||||
cmPropertyMap Properties;
|
||||
@ -324,6 +331,7 @@ cmState::Snapshot cmState::Reset()
|
||||
it->CompileOptions.clear();
|
||||
it->CompileOptionsBacktraces.clear();
|
||||
it->DirectoryEnd = pos;
|
||||
it->NormalTargetNames.clear();
|
||||
it->Properties.clear();
|
||||
it->Children.clear();
|
||||
}
|
||||
@ -1667,6 +1675,30 @@ 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 =
|
||||
this->DirectoryState->Children;
|
||||
for (std::vector<cmState::Snapshot>::const_iterator ci = children.begin();
|
||||
ci != children.end(); ++ci) {
|
||||
child_dirs.push_back(ci->GetDirectory().GetCurrentSource());
|
||||
}
|
||||
output = cmJoin(child_dirs, ";");
|
||||
return output.c_str();
|
||||
}
|
||||
if (prop == kBUILDSYSTEM_TARGETS) {
|
||||
output = cmJoin(this->DirectoryState->NormalTargetNames, ";");
|
||||
return output.c_str();
|
||||
}
|
||||
|
||||
if (prop == "LISTFILE_STACK") {
|
||||
std::vector<std::string> listFiles;
|
||||
cmState::Snapshot snp = this->Snapshot_;
|
||||
@ -1733,6 +1765,11 @@ std::vector<std::string> cmState::Directory::GetPropertyKeys() const
|
||||
return keys;
|
||||
}
|
||||
|
||||
void cmState::Directory::AddNormalTargetName(std::string const& name)
|
||||
{
|
||||
this->DirectoryState->NormalTargetNames.push_back(name);
|
||||
}
|
||||
|
||||
bool operator==(const cmState::Snapshot& lhs, const cmState::Snapshot& rhs)
|
||||
{
|
||||
return lhs.Position == rhs.Position;
|
||||
|
@ -175,6 +175,8 @@ public:
|
||||
bool GetPropertyAsBool(const std::string& prop) const;
|
||||
std::vector<std::string> GetPropertyKeys() const;
|
||||
|
||||
void AddNormalTargetName(std::string const& name);
|
||||
|
||||
private:
|
||||
void ComputeRelativePathTopSource();
|
||||
void ComputeRelativePathTopBinary();
|
||||
|
@ -3,4 +3,20 @@ get_property: --><--
|
||||
get_directory_property: -->value<--
|
||||
get_property: -->value<--
|
||||
get_directory_property: --><--
|
||||
get_property: --><--$
|
||||
get_property: --><--
|
||||
get_directory_property: -->[^<;]*Tests/RunCMake/get_property/directory_properties<--
|
||||
get_property: -->[^<;]*Tests/RunCMake/get_property/directory_properties<--
|
||||
get_directory_property: -->[^<;]*Tests/RunCMake/get_property/directory_properties/sub1;[^<;]*Tests/RunCMake/get_property/directory_properties/sub2<--
|
||||
get_property: -->[^<;]*Tests/RunCMake/get_property/directory_properties/sub1;[^<;]*Tests/RunCMake/get_property/directory_properties/sub2<--
|
||||
get_directory_property: -->CustomTop;InterfaceTop<--
|
||||
get_property: -->CustomTop;InterfaceTop<--
|
||||
get_directory_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<--$
|
||||
|
@ -13,3 +13,18 @@ set_directory_properties(PROPERTIES empty "" custom value)
|
||||
check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}" empty)
|
||||
check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}" custom)
|
||||
check_directory_property("${CMAKE_CURRENT_SOURCE_DIR}" noexist)
|
||||
|
||||
add_custom_target(CustomTop)
|
||||
add_library(InterfaceTop INTERFACE)
|
||||
add_library(my::InterfaceTop ALIAS InterfaceTop)
|
||||
|
||||
add_subdirectory(directory_properties)
|
||||
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)
|
||||
|
@ -0,0 +1,6 @@
|
||||
add_subdirectory(sub1)
|
||||
subdirs(sub2)
|
||||
|
||||
add_custom_target(CustomSub)
|
||||
add_library(InterfaceSub INTERFACE)
|
||||
add_library(my::InterfaceSub ALIAS InterfaceSub)
|
Loading…
Reference in New Issue
Block a user