Merge topic 'fix-OBJECT_DEPENDS-after-path-normalization'

9259d778 Normalize OBJECT_DEPENDS paths to match custom commands (#15366)
This commit is contained in:
Brad King 2015-01-29 09:13:53 -05:00 committed by CMake Topic Stage
commit abec4213d6
5 changed files with 35 additions and 0 deletions

View File

@ -663,6 +663,14 @@ void cmTargetTraceDependencies::Trace()
{
std::vector<std::string> objDeps;
cmSystemTools::ExpandListArgument(additionalDeps, objDeps);
for(std::vector<std::string>::iterator odi = objDeps.begin();
odi != objDeps.end(); ++odi)
{
if (cmSystemTools::FileIsFullPath(*odi))
{
*odi = cmSystemTools::CollapseFullPath(*odi);
}
}
this->FollowNames(objDeps);
}

View File

@ -605,6 +605,14 @@ cmNinjaTargetGenerator
if(const char* objectDeps = source->GetProperty("OBJECT_DEPENDS")) {
std::vector<std::string> depList;
cmSystemTools::ExpandListArgument(objectDeps, depList);
for(std::vector<std::string>::iterator odi = depList.begin();
odi != depList.end(); ++odi)
{
if (cmSystemTools::FileIsFullPath(*odi))
{
*odi = cmSystemTools::CollapseFullPath(*odi);
}
}
std::transform(depList.begin(), depList.end(),
std::back_inserter(implicitDeps), MapToNinjaPath());
}

View File

@ -154,6 +154,19 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
${PROJECT_BINARY_DIR}/foo.c
)
# Test using OBJECT_DEPENDS to bring in a custom command.
# Use a path that can be simplified to make sure paths
# are consistently normalized.
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/subdir/../subdir/subdir.h
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/subdir.h.in
${CMAKE_CURRENT_BINARY_DIR}/subdir/subdir.h
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/subdir.h.in
)
set_property(SOURCE ${PROJECT_BINARY_DIR}/foo.c PROPERTY
OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/subdir/../subdir/subdir.h)
# Add custom command to generate not_included.h, which is a header
# file that is not included by any source in this project. This will
# test whether all custom command outputs explicitly listed as sources

View File

@ -6,6 +6,11 @@
int generated();
int wrapped();
#include "subdir/subdir.h"
#ifndef SUBDIR_DEF
# error SUBDIR_DEF not defined
#endif
int main ()
{
if (generated()*wrapped()*doc() == 3*5*7)

View File

@ -0,0 +1 @@
#define SUBDIR_DEF