]> git.cworth.org Git - apitrace/blobdiff - gui/main.cpp
qapitrace: Support executing glretrace on a remote target host.
[apitrace] / gui / main.cpp
index 3dc473e4fd099d283f752a97c58a4765173f62eb..121e323a3344f4dae5a8d827afad3d7977888d16 100644 (file)
@@ -3,18 +3,34 @@
 #include "apitrace.h"
 #include "apitracecall.h"
 
+#include "os_string.hpp"
+#include "os_process.hpp"
+
 #include <QApplication>
 #include <QMetaType>
 #include <QVariant>
+#include <QImage>
+
+#include <stdio.h>
 
 Q_DECLARE_METATYPE(QList<ApiTraceFrame*>);
 Q_DECLARE_METATYPE(QVector<ApiTraceCall*>);
 Q_DECLARE_METATYPE(Qt::CaseSensitivity);
 Q_DECLARE_METATYPE(ApiTrace::SearchResult);
 Q_DECLARE_METATYPE(ApiTrace::SearchRequest);
+Q_DECLARE_METATYPE(QList<QImage>);
+
+static void usage(void)
+{
+    qWarning("usage: qapitrace [options] [TRACE] [CALLNO]\n"
+             "Valid options include:\n"
+             "    -h, --help            Print this help message\n"
+             "    --remote-target HOST  Replay trace on remote target HOST\n");
+}
 
 int main(int argc, char **argv)
 {
+    QApplication::setGraphicsSystem("raster");
     QApplication app(argc, argv);
 
     qRegisterMetaType<QList<ApiTraceFrame*> >();
@@ -23,12 +39,61 @@ int main(int argc, char **argv)
     qRegisterMetaType<Qt::CaseSensitivity>();
     qRegisterMetaType<ApiTrace::SearchResult>();
     qRegisterMetaType<ApiTrace::SearchRequest>();
-    MainWindow window;
+    qRegisterMetaType<QList<QImage> >();
 
+#ifndef Q_OS_WIN
+    os::String currentProcess = os::getProcessName();
+    currentProcess.trimFilename();
+    QString path = qgetenv("PATH");
+    path = QLatin1String(currentProcess.str()) + QLatin1String(":") + path;
+    qputenv("PATH", path.toLatin1());
+#endif
+
+    QStringList args = app.arguments();
+    QString remoteTarget;
+
+    int i = 1;
+    while (i < args.count()) {
+        QString arg = args[i];
+        if (arg[0] != QLatin1Char('-')) {
+            break;
+        }
+        ++i;
+        if (arg == QLatin1String("--")) {
+            break;
+        } else if (arg == QLatin1String("--remote-target")) {
+            if (i == args.count()) {
+                qWarning("Option --remote-target requires an argument.\n");
+                exit(1);
+            }
+            remoteTarget = args[i];
+            ++i;
+        } else if (arg == QLatin1String("-h") ||
+                   arg == QLatin1String("--help")) {
+            usage();
+            exit(0);
+        } else {
+            usage();
+            exit(1);
+        }
+    }
+
+    MainWindow window;
     window.show();
 
-    if (app.arguments().count() == 2)
-        window.loadTrace(app.arguments()[1]);
+    if (i < args.count()) {
+        QString fileName = args[i++];
+
+        int callNum = -1;
+        if (i < args.count()) {
+            callNum = args[i++].toInt();
+        }
+        window.loadTrace(fileName, callNum);
+    }
+
+    if (remoteTarget.length()) {
+        window.setRemoteTarget(remoteTarget);
+    }
 
     app.exec();
 }