summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmDocumentVariables.cxx8
-rw-r--r--Source/cmGetCMakePropertyCommand.cxx21
-rw-r--r--Source/cmMakefile.cxx5
-rw-r--r--Source/cmMakefile.h7
-rw-r--r--Source/cmake.cxx6
-rw-r--r--Tests/CMakeTests/StringTestScript.cmake2
6 files changed, 38 insertions, 11 deletions
diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx
index 0cd5fa2..524bc2a 100644
--- a/Source/cmDocumentVariables.cxx
+++ b/Source/cmDocumentVariables.cxx
@@ -97,6 +97,14 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"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.",
"This variable is set to the program that will be"
diff --git a/Source/cmGetCMakePropertyCommand.cxx b/Source/cmGetCMakePropertyCommand.cxx
index e3448de..8bb5487 100644
--- a/Source/cmGetCMakePropertyCommand.cxx
+++ b/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;
}
-
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index e14e44d..daea7bf 100644
--- a/Source/cmMakefile.cxx
+++ b/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)
{
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 837a352..ebe2801 100644
--- a/Source/cmMakefile.h
+++ b/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
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index bab0aaf..e063ea6 100644
--- a/Source/cmake.cxx
+++ b/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);
diff --git a/Tests/CMakeTests/StringTestScript.cmake b/Tests/CMakeTests/StringTestScript.cmake
index 8dfdc89..7a264a0 100644
--- a/Tests/CMakeTests/StringTestScript.cmake
+++ b/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)