diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2012-12-20 14:54:34 -0800 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2013-01-02 14:05:23 +0100 |
commit | 61ae33bfe84a8daf26bfead78d4a7a4ff488f9d6 (patch) | |
tree | 941cc4926424fcbc1d1fd3daedb12a5204b95e6f | |
parent | 8f084054b82ebe617238073ff53c6d6addf2574e (diff) |
Add a help mode to the tool, printing the usage
Only if another tool isn't specified somehow.
Change-Id: I5c0068809cb49054012c14afa388b355efa6dd2d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r-- | src/qtchooser/main.cpp | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/qtchooser/main.cpp b/src/qtchooser/main.cpp index 51e746b..69750fc 100644 --- a/src/qtchooser/main.cpp +++ b/src/qtchooser/main.cpp @@ -62,16 +62,20 @@ # include <process.h> # define execv _execv # define PATH_SEP "\\" +# define EXE_SUFFIX ".exe" #else # include <sys/types.h> # include <dirent.h> # include <libgen.h> # include <unistd.h> # define PATH_SEP "/" +# define EXE_SUFFIX "" #endif using namespace std; +static const char myName[] = "qtchooser" EXE_SUFFIX; + static const char *argv0; enum Mode { RunTool, @@ -91,6 +95,7 @@ struct Sdk struct ToolWrapper { + int printHelp(); int listVersions(); int printEnvironment(const string &targetSdk); int runTool(const string &targetSdk, const string &targetTool, char **argv); @@ -106,6 +111,19 @@ private: bool matchSdk(const string &targetSdk, Sdk &sdk); }; +int ToolWrapper::printHelp() +{ + puts("Usage:\n" + " qtchooser { -list-versions | -print-env }\n" + " qtchooser -run-tool=<tool name> [-qt=<Qt version>] [program arguments]\n" + " <executable name> [-qt=<Qt version>] [program arguments]\n" + "\n" + "Environment variables accepted:\n" + " QTCHOOSER_RUNTOOL name of the tool to be run (same as the -run-tool argument)\n" + " QT_SELECT version of Qt to be run (same as the -qt argument)\n"); + return 0; +} + int ToolWrapper::listVersions() { iterateSdks(string(), &ToolWrapper::printSdk); @@ -296,6 +314,15 @@ static inline bool beginsWith(const char *haystack, const char *needle) return strncmp(haystack, needle, strlen(needle)) == 0; } +static inline bool endsWith(const char *haystack, const char *needle) +{ + size_t haystackLen = strlen(haystack); + size_t needleLen = strlen(needle); + if (needleLen > haystackLen) + return false; + return strcmp(haystack + haystackLen - needleLen, needle) == 0; +} + int main(int argc, char **argv) { // search the environment for defaults @@ -346,14 +373,23 @@ int main(int argc, char **argv) if (!targetSdk) targetSdk = ""; + bool haveTargetTool = true; + if (strcmp(targetTool, myName) == 0) + haveTargetTool = false; + else if (endsWith(targetTool, myName) && targetTool[strlen(targetTool) - sizeof(myName)] == PATH_SEP[0]) + haveTargetTool = false; + ToolWrapper wrapper; // dispatch switch (operatingMode) { case RunTool: - return wrapper.runTool(targetSdk, - targetTool, - argv + optind - 1); + if (haveTargetTool) + return wrapper.runTool(targetSdk, + targetTool, + argv + optind - 1); + else + return wrapper.printHelp(); case PrintEnvironment: return wrapper.printEnvironment(targetSdk); |