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; std::vector<std::string> objDeps;
cmSystemTools::ExpandListArgument(additionalDeps, 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); this->FollowNames(objDeps);
} }

View File

@ -605,6 +605,14 @@ cmNinjaTargetGenerator
if(const char* objectDeps = source->GetProperty("OBJECT_DEPENDS")) { if(const char* objectDeps = source->GetProperty("OBJECT_DEPENDS")) {
std::vector<std::string> depList; std::vector<std::string> depList;
cmSystemTools::ExpandListArgument(objectDeps, 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::transform(depList.begin(), depList.end(),
std::back_inserter(implicitDeps), MapToNinjaPath()); 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 ${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 # 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 # file that is not included by any source in this project. This will
# test whether all custom command outputs explicitly listed as sources # test whether all custom command outputs explicitly listed as sources

View File

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

View File

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