summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2008-08-19 19:42:48 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2008-08-19 19:42:48 (GMT)
commitd632b96841b43e5a5d27e2787018353e7388a423 (patch)
tree0bb1ae5ae5922362ada681ee831547cc28ad3434
parentd2e2ab72bfb2e21d189e0623880b2e376024a4bd (diff)
downloadCMake-d632b96841b43e5a5d27e2787018353e7388a423.zip
CMake-d632b96841b43e5a5d27e2787018353e7388a423.tar.gz
CMake-d632b96841b43e5a5d27e2787018353e7388a423.tar.bz2
BUG: fix 6647 arguments after -E should not be parsed by CMake
-rw-r--r--Source/cmDocumentation.cxx7
-rw-r--r--Source/cmDocumentation.h7
-rw-r--r--Source/cmakemain.cxx15
3 files changed, 18 insertions, 11 deletions
diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx
index 72a8192..8b6f69e 100644
--- a/Source/cmDocumentation.cxx
+++ b/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) ||
diff --git a/Source/cmDocumentation.h b/Source/cmDocumentation.h
index 526da58..c1b98d3 100644
--- a/Source/cmDocumentation.h
+++ b/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
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index 233e87a..ff57eca 100644
--- a/Source/cmakemain.cxx
+++ b/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);