diff options
author | Ken Martin <ken.martin@kitware.com> | 2007-02-19 18:20:27 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2007-02-19 18:20:27 (GMT) |
commit | 09699018ccccf654ce6ca4d0b84e3e2a973f5c22 (patch) | |
tree | 8ce7ba16e859b5f7c5340bbff22ea852618f7ead /Source/cmTarget.cxx | |
parent | 314f5f60a08cc2366a18126fdc69aa367a01b046 (diff) | |
download | CMake-09699018ccccf654ce6ca4d0b84e3e2a973f5c22.zip CMake-09699018ccccf654ce6ca4d0b84e3e2a973f5c22.tar.gz CMake-09699018ccccf654ce6ca4d0b84e3e2a973f5c22.tar.bz2 |
ENH: turn on spaces in path test
Diffstat (limited to 'Source/cmTarget.cxx')
-rw-r--r-- | Source/cmTarget.cxx | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 3bd0d30..a60ae28 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -233,6 +233,12 @@ void cmTarget::DefineProperties(cmake *cm) "(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.", "For shared libraries VERSION and SOVERSION can be used to specify " @@ -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")) |