Browse Source

ENH: Ok, no more argument needed for script mode

Andy Cedilnik 22 years ago
parent
commit
d21532cd02
4 changed files with 32 additions and 5 deletions
  1. 8 0
      Source/cmSystemTools.cxx
  2. 3 0
      Source/cmSystemTools.h
  3. 4 3
      Source/cmake.cxx
  4. 17 2
      Source/cmakemain.cxx

+ 8 - 0
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));
+}

+ 3 - 0
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;

+ 4 - 3
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;
     }
   

+ 17 - 2
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)