[cmake-commits] martink committed CMakeLists.txt 1.328 1.329 cmTarget.cxx 1.121 1.122 cmTarget.h 1.70 1.71

cmake-commits at cmake.org cmake-commits at cmake.org
Mon Feb 19 13:20:29 EST 2007


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv26759

Modified Files:
	CMakeLists.txt cmTarget.cxx cmTarget.h 
Log Message:
ENH: turn on spaces in path test


Index: cmTarget.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTarget.h,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -d -r1.70 -r1.71
--- cmTarget.h	16 Feb 2007 21:12:16 -0000	1.70
+++ cmTarget.h	19 Feb 2007 18:20:27 -0000	1.71
@@ -181,6 +181,10 @@
       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.  */

Index: CMakeLists.txt
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CMakeLists.txt,v
retrieving revision 1.328
retrieving revision 1.329
diff -u -d -r1.328 -r1.329
--- CMakeLists.txt	8 Feb 2007 21:18:21 -0000	1.328
+++ CMakeLists.txt	19 Feb 2007 18:20:27 -0000	1.329
@@ -991,6 +991,18 @@
       )
   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}

Index: cmTarget.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmTarget.cxx,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -d -r1.121 -r1.122
--- cmTarget.cxx	17 Feb 2007 13:46:24 -0000	1.121
+++ cmTarget.cxx	19 Feb 2007 18:20:27 -0000	1.122
@@ -233,6 +233,12 @@
      "(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 @@
   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 @@
     // 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"))



More information about the Cmake-commits mailing list