瀏覽代碼

BUG: fix 6647 arguments after -E should not be parsed by CMake

Bill Hoffman 17 年之前
父節點
當前提交
d632b96841
共有 3 個文件被更改,包括 18 次插入11 次删除
  1. 6 1
      Source/cmDocumentation.cxx
  2. 5 2
      Source/cmDocumentation.h
  3. 7 8
      Source/cmakemain.cxx

+ 6 - 1
Source/cmDocumentation.cxx

@@ -656,7 +656,8 @@ cmDocumentation::Form cmDocumentation::GetFormFromFilename(
 }
 
 //----------------------------------------------------------------------------
-bool cmDocumentation::CheckOptions(int argc, const char* const* argv)
+bool cmDocumentation::CheckOptions(int argc, const char* const* argv,
+                                   const char* exitOpt)
 {
   // Providing zero arguments gives usage information.
   if(argc == 1)
@@ -673,6 +674,10 @@ bool cmDocumentation::CheckOptions(int argc, const char* const* argv)
   bool result = false;
   for(int i=1; i < argc; ++i)
     {
+    if(exitOpt && strcmp(argv[i], exitOpt) == 0)
+      {
+      return result;
+      }
     RequestedHelpItem help;
     // Check if this is a supported help option.
     if((strcmp(argv[i], "-help") == 0) ||

+ 5 - 2
Source/cmDocumentation.h

@@ -45,9 +45,12 @@ public:
    * Check command line arguments for documentation options.  Returns
    * true if documentation options are found, and false otherwise.
    * When true is returned, PrintRequestedDocumentation should be
-   * called.
+   * called.  exitOpt can be used for things like cmake -E, so that 
+   * all arguments after the -E are ignored and not searched for
+   * help arguments.
    */
-  bool CheckOptions(int argc, const char* const* argv);
+  bool CheckOptions(int argc, const char* const* argv, 
+                    const char* exitOpt =0);
   
   /**
    * Print help requested on the command line.  Call after

+ 7 - 8
Source/cmakemain.cxx

@@ -314,7 +314,7 @@ int do_cmake(int ac, char** av)
 
 #ifdef CMAKE_BUILD_WITH_CMAKE
   cmDocumentation doc;
-  if(doc.CheckOptions(ac, av) || nocwd)
+  if(doc.CheckOptions(ac, av, "-E") || nocwd)
     { 
     // Construct and print requested documentation.
     cmake hcm;
@@ -416,29 +416,29 @@ int do_cmake(int ac, char** av)
       {
       command = true;
       }
-    else if (strcmp(av[i], "-N") == 0)
+    else if (!command && strcmp(av[i], "-N") == 0)
       {
       view_only = true;
       }
-    else if (strcmp(av[i], "-L") == 0)
+    else if (!command && strcmp(av[i], "-L") == 0)
       {
       list_cached = true;
       }
-    else if (strcmp(av[i], "-LA") == 0)
+    else if (!command && strcmp(av[i], "-LA") == 0)
       {
       list_all_cached = true;
       }
-    else if (strcmp(av[i], "-LH") == 0)
+    else if (!command && strcmp(av[i], "-LH") == 0)
       {
       list_cached = true;
       list_help = true;
       }
-    else if (strcmp(av[i], "-LAH") == 0)
+    else if (!command && strcmp(av[i], "-LAH") == 0)
       {
       list_all_cached = true;
       list_help = true;
       }
-    else if (strncmp(av[i], "-P", strlen("-P")) == 0)
+    else if (!command && strncmp(av[i], "-P", strlen("-P")) == 0)
       {
       if ( i == ac -1 )
         {
@@ -457,7 +457,6 @@ int do_cmake(int ac, char** av)
       args.push_back(av[i]);
       }
     }
-
   if(command)
     {
     int ret = cmake::ExecuteCMakeCommand(args);