summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmSystemTools.cxx8
-rw-r--r--Source/cmSystemTools.h3
-rw-r--r--Source/cmake.cxx7
-rw-r--r--Source/cmakemain.cxx19
4 files changed, 32 insertions, 5 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 9574624..1e2de6e 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -1047,3 +1047,11 @@ std::string cmSystemTools::ConvertToOutputPath(const char* path)
#endif
}
+bool cmSystemTools::StringEndsWith(const char* str1, const char* str2)
+{
+ if ( !str1 || !str2 || strlen(str1) < strlen(str2) )
+ {
+ return 0;
+ }
+ return !strncmp(str1 + (strlen(str1)-strlen(str2)), str2, strlen(str2));
+}
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 724c5ec..2ba1906 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -240,6 +240,9 @@ public:
s_ForceUnixPaths = v;
}
static std::string ConvertToOutputPath(const char* path);
+
+ //! Check if the first string ends with the second one.
+ static bool StringEndsWith(const char* str1, const char* str2);
private:
static bool s_ForceUnixPaths;
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index da7d290..cb442c2 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -215,9 +215,9 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
std::cerr << "loading initial cache file " << path.c_str() << "\n";
this->ReadListFile(path.c_str());
}
- else if(arg.find("-M",0) == 0)
+ else if(arg.find("--script",0) == 0)
{
- std::string path = arg.substr(2);
+ std::string path = arg.substr(strlen("--script"));
if ( path.size() == 0 )
{
cmSystemTools::Error("No cmake scrpt provided.");
@@ -308,7 +308,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
{
// skip for now
}
- else if(arg.find("-M",0) == 0)
+ else if(arg.find("--script",0) == 0)
{
// skip for now
}
@@ -848,6 +848,7 @@ int cmake::DoPreConfigureChecks()
cmSystemTools::Error(
"The source directory does not appear to contain CMakeLists.txt.\n"
"Specify --help for usage, or press the help button on the CMake GUI.");
+ abort();
return -2;
}
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index 3f94332..472ea7d 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -183,7 +183,7 @@ int do_cmake(int ac, char** av)
list_all_cached = true;
list_help = true;
}
- else if (strncmp(av[i], "-M", 2) == 0)
+ else if (strncmp(av[i], "--script", strlen("--script")) == 0)
{
script_mode = true;
args.push_back(av[i]);
@@ -194,6 +194,21 @@ int do_cmake(int ac, char** av)
}
}
+ if ( args.size() > 0 )
+ {
+ std::string &arg = args[args.size()-1];
+ if ( cmSystemTools::StringEndsWith(arg.c_str(), ".cmake") &&
+ cmSystemTools::FileExists(arg.c_str()) &&
+ !cmSystemTools::FileIsDirectory(arg.c_str()) )
+ {
+ std::vector<std::string>::iterator it = args.end();
+ -- it;
+ std::string ar = "--script" + arg;
+ args.insert(it, ar);
+ script_mode = 1;
+ }
+ }
+
if(command)
{
int ret = cmake::CMakeCommand(args);
@@ -216,7 +231,7 @@ int do_cmake(int ac, char** av)
{
cmCacheManager::CacheEntryType t = it.GetType();
if ( t != cmCacheManager::INTERNAL && t != cmCacheManager::STATIC &&
- t != cmCacheManager::UNINITIALIZED )
+ t != cmCacheManager::UNINITIALIZED )
{
bool advanced = it.PropertyExists("ADVANCED");
if ( list_all_cached || !advanced)