summaryrefslogtreecommitdiffstats
path: root/src/qtchooser/main.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-12-20 15:28:18 -0800
committerThiago Macieira <thiago.macieira@intel.com>2013-01-02 14:05:33 +0100
commit9cf144ec106e4aee7c5ab208a3295aaa9ad69f0b (patch)
tree2af8010331862911384f3acf155a2e5a77289961 /src/qtchooser/main.cpp
parent61ae33bfe84a8daf26bfead78d4a7a4ff488f9d6 (diff)
Accept the -print-env and -list-versions commands only on "qtchooser"
Do not accept those options when called with another tool, especially when using argv[0]. This allows the target tools to have options with identical names. Change-Id: I7c2881100ccc10c73ddfc5d15dcc7f89555392cf Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qtchooser/main.cpp')
-rw-r--r--src/qtchooser/main.cpp54
1 files changed, 43 insertions, 11 deletions
diff --git a/src/qtchooser/main.cpp b/src/qtchooser/main.cpp
index 69750fc..9b7688c 100644
--- a/src/qtchooser/main.cpp
+++ b/src/qtchooser/main.cpp
@@ -53,6 +53,7 @@
#include <string>
#include <vector>
+#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
@@ -78,6 +79,8 @@ static const char myName[] = "qtchooser" EXE_SUFFIX;
static const char *argv0;
enum Mode {
+ Unknown,
+ PrintHelp,
RunTool,
ListVersions,
PrintEnvironment
@@ -326,7 +329,7 @@ static inline bool endsWith(const char *haystack, const char *needle)
int main(int argc, char **argv)
{
// search the environment for defaults
- Mode operatingMode = RunTool;
+ Mode operatingMode = Unknown;
argv0 = basename(argv[0]);
const char *targetSdk = getenv("QT_SELECT");
const char *targetTool = getenv("QTCHOOSER_RUNTOOL");
@@ -356,10 +359,6 @@ int main(int argc, char **argv)
// -run-tool= argument
targetTool = arg + strlen("run-tool=");
operatingMode = RunTool;
- } else if (strcmp(arg, "list-versions") == 0) {
- operatingMode = ListVersions;
- } else if (beginsWith(arg, "print-env")) {
- operatingMode = PrintEnvironment;
} else {
// not one of our arguments, must be for the target tool
break;
@@ -380,16 +379,49 @@ int main(int argc, char **argv)
haveTargetTool = false;
ToolWrapper wrapper;
+ if (operatingMode == RunTool || haveTargetTool) {
+ if (!haveTargetTool) {
+ fprintf(stderr, "%s: no tool selected. Stop.\n", argv0);
+ return 1;
+ }
+ return wrapper.runTool(targetSdk,
+ targetTool,
+ argv + optind - 1);
+ }
+
+ // running qtchooser itself
+ // check for our arguments
+ operatingMode = PrintHelp;
+ for ( ; optind < argc; ++optind) {
+ char *arg = argv[optind];
+ if (*arg == '-') {
+ ++arg;
+ if (*arg == '-')
+ ++arg;
+ if (strcmp(arg, "list-versions") == 0) {
+ operatingMode = ListVersions;
+ } else if (beginsWith(arg, "print-env")) {
+ operatingMode = PrintEnvironment;
+ } else if (strcmp(arg, "help") != 0) {
+ fprintf(stderr, "%s: unknown option: %s\n", argv0, arg - 1);
+ return 1;
+ }
+ } else {
+ fprintf(stderr, "%s: unknown argument: %s\n", argv0, arg);
+ return 1;
+ }
+ }
// dispatch
switch (operatingMode) {
case RunTool:
- if (haveTargetTool)
- return wrapper.runTool(targetSdk,
- targetTool,
- argv + optind - 1);
- else
- return wrapper.printHelp();
+ case Unknown:
+ // can't happen!
+ assert(false);
+ return 127;
+
+ case PrintHelp:
+ return wrapper.printHelp();
case PrintEnvironment:
return wrapper.printEnvironment(targetSdk);