ENH: turn on spaces in path test

This commit is contained in:
Ken Martin 2007-02-19 13:20:27 -05:00
parent 314f5f60a0
commit 09699018cc
3 changed files with 65 additions and 2 deletions

View File

@ -991,6 +991,18 @@ IF(BUILD_TESTING)
)
ENDIF(NOT CMAKE_TEST_DIFFERENT_GENERATOR)
ADD_TEST(SubDirSpaces ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/SubDirSpaces"
"${CMake_BINARY_DIR}/Tests/SubDirSpaces"
--build-exe-dir "${CMake_BINARY_DIR}/Tests/SubDirSpaces/Executable"
--build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-project SUBDIR
--test-command test
"${CMake_BINARY_DIR}/Tests/SubDirSpaces/ShouldBeHere"
"${CMake_BINARY_DIR}/Tests/SubDirSpaces/testfromsubdir.obj"
)
IF (WIN32)
ADD_TEST(SubDir ${CMAKE_CTEST_COMMAND}

View File

@ -232,6 +232,12 @@ void cmTarget::DefineProperties(cmake *cm)
"A target property that can be set to override the suffix "
"(such as \".so\") on a library name.");
cm->DefineProperty
("TEST_LOCATION", cmProperty::TARGET,
"Where a target will be written on disk for ctest.",
"Much like the LOCATION property but makes use of "
"CTEST_TEST_CONFIGURATION to handle the build configuration.");
cm->DefineProperty
("VERSION", cmProperty::TARGET,
"What version number is this target.",
@ -1147,6 +1153,25 @@ const char* cmTarget::GetLocation(const char* config)
return this->Location.c_str();
}
const char* cmTarget::GetTestLocation(const char* config)
{
this->Location = this->GetDirectory();
if(!this->Location.empty())
{
this->Location += "/";
}
const char* cfgid = this->Makefile->GetDefinition("CMAKE_CFG_INTDIR");
// if this platform has configurations, then use the ctest var
if(cfgid && strcmp(cfgid, ".") != 0)
{
this->Location += "${CTEST_CONFIGURATION_TYPE}";
this->Location += "/";
}
this->Location += this->GetFullName(config, false);
return this->Location.c_str();
}
//----------------------------------------------------------------------------
void cmTarget::GetTargetVersion(int& major, int& minor)
{
@ -1237,16 +1262,38 @@ const char *cmTarget::GetProperty(const char* prop,
// variable in the location.
this->SetProperty("LOCATION", this->GetLocation(0));
}
if (!strcmp(prop,"TEST_LOCATION"))
{
// Set the LOCATION property of the target. Note that this cannot take
// into account the per-configuration name of the target because the
// configuration type may not be known at CMake time. We should
// deprecate this feature and instead support transforming an executable
// target name given as the command part of custom commands into the
// proper path at build time. Alternatively we could put environment
// variable settings in all custom commands that hold the name of the
// target for each configuration and then give a reference to the
// variable in the location.
this->SetProperty("TEST_LOCATION", this->GetTestLocation(0));
}
else
if(strcmp(prop, "OBJECT_FILES") == 0)
{
this->ComputeObjectFiles();
}
// Per-configuration location can be computed.
int len = static_cast<int>(strlen(prop));
if(len > 9 && strcmp(prop+len-9, "_LOCATION") == 0)
{
std::string configName(prop, len-9);
this->SetProperty(prop, this->GetLocation(configName.c_str()));
// Per-configuration location can be computed.
int len = static_cast<int>(strlen(prop));
if(len > 9 && strcmp(prop+len-9, "_LOCATION") == 0)
{
std::string configName(prop, len-9);
this->SetProperty(prop, this->GetLocation(configName.c_str()));
}
}
// the type property returns what type the target is
if (!strcmp(prop,"TYPE"))

View File

@ -181,6 +181,10 @@ public:
target property. */
const char* GetLocation(const char* config);
/** Get the location of the target in the build tree for use by ctest.
May make use of the CTEST_TEST_CONFIGURATION variable in ctest. */
const char* GetTestLocation(const char* config);
/** Get the target major and minor version numbers interpreted from
the VERSION property. Version 0 is returned if the property is
not set or cannot be parsed. */