summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-12-20 14:54:34 -0800
committerThiago Macieira <thiago.macieira@intel.com>2013-01-02 14:05:23 +0100
commit61ae33bfe84a8daf26bfead78d4a7a4ff488f9d6 (patch)
tree941cc4926424fcbc1d1fd3daedb12a5204b95e6f
parent8f084054b82ebe617238073ff53c6d6addf2574e (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.cpp42
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);