Browse Source

Merge branch 'fix-2828-more-info-in-script-mode' into add-STRING-subcommand-FIND-issue-11795

Conflicts:
	Tests/CMakeTests/StringTestScript.cmake
Brad King 15 years ago
parent
commit
8a8da3694b

+ 8 - 0
Source/cmDocumentVariables.cxx

@@ -96,6 +96,14 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
      "See also CMAKE_CURRENT_LIST_FILE.",false,
      "Variables that Provide Information");
 
+  cm->DefineProperty
+    ("CMAKE_SCRIPT_MODE_FILE", cmProperty::VARIABLE,
+     "Full path to the -P script file currently being processed. ",
+     "When run in -P script mode, CMake sets this variable to the full "
+     "path of the script file. When run to configure a CMakeLists.txt "
+     "file, this variable is not set.", false,
+     "Variables that Provide Information");
+
   cm->DefineProperty
     ("CMAKE_BUILD_TOOL", cmProperty::VARIABLE,
      "Tool used for the actual build process.",

+ 11 - 10
Source/cmGetCMakePropertyCommand.cxx

@@ -22,21 +22,22 @@ bool cmGetCMakePropertyCommand
     this->SetError("called with incorrect number of arguments");
     return false;
     }
-  
+
   std::vector<std::string>::size_type cc;
   std::string variable = args[0];
   std::string output = "NOTFOUND";
 
-  if ( args[1] == "VARIABLES")
+  if ( args[1] == "VARIABLES" )
     {
     int cacheonly = 0;
     std::vector<std::string> vars = this->Makefile->GetDefinitions(cacheonly);
-    for ( cc = 0; cc < vars.size(); cc ++ )
+    if (vars.size()>0)
       {
-      if ( cc > 0 )
-        {
-        output += ";";
-        }
+      output = vars[0];
+      }
+    for ( cc = 1; cc < vars.size(); ++cc )
+      {
+      output += ";";
       output += vars[cc];
       }
     }
@@ -62,15 +63,15 @@ bool cmGetCMakePropertyCommand
     }
   else
     {
-    const char *prop = 
+    const char *prop =
       this->Makefile->GetCMakeInstance()->GetProperty(args[1].c_str());
     if (prop)
       {
       output = prop;
       }
     }
+
   this->Makefile->AddDefinition(variable.c_str(), output.c_str());
-  
+
   return true;
 }
-

+ 5 - 0
Source/cmMakefile.cxx

@@ -2744,6 +2744,11 @@ void cmMakefile::SetHomeOutputDirectory(const char* lib)
     }
 }
 
+void cmMakefile::SetScriptModeFile(const char* scriptfile)
+{
+  this->AddDefinition("CMAKE_SCRIPT_MODE_FILE", scriptfile);
+}
+
 //----------------------------------------------------------------------------
 cmSourceFile* cmMakefile::GetSource(const char* sourceName)
 {

+ 6 - 1
Source/cmMakefile.h

@@ -411,7 +411,12 @@ public:
       return this->HomeOutputDirectory.c_str();
     }
   //@}
-  
+
+  /**
+   * Set CMAKE_SCRIPT_MODE_FILE variable when running a -P script.
+   */
+  void SetScriptModeFile(const char* scriptfile);
+
   //@{
   /**
    * Set/Get the start directory (or output directory). The start directory

+ 6 - 0
Source/cmake.cxx

@@ -510,6 +510,12 @@ void cmake::ReadListFile(const char *path)
       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
     lg->GetMakefile()->SetStartDirectory
       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
+    if (this->GetScriptMode())
+      {
+      std::string file(cmSystemTools::CollapseFullPath(path));
+      cmSystemTools::ConvertToUnixSlashes(file);
+      lg->GetMakefile()->SetScriptModeFile(file.c_str());
+      }
     if (!lg->GetMakefile()->ReadListFile(0, path))
       {
       cmSystemTools::Error("Error processing file:", path);

+ 2 - 0
Tests/CMakeTests/StringTestScript.cmake

@@ -194,6 +194,8 @@ elseif(testname STREQUAL random_with_various_alphabets) # pass
   string(RANDOM LENGTH 78 ALPHABET "~`!@#$%^&*()_-+={}[]\\|:\\;'\",.<>/?" v)
   message(STATUS "v='${v}'")
 
+  message(STATUS "CMAKE_SCRIPT_MODE_FILE='${CMAKE_SCRIPT_MODE_FILE}'")
+
 elseif(testname STREQUAL string_find_with_no_parameter) # fail
   string(FIND)