tools/checksdk/main.cpp
changeset 0 1918ee327afb
child 4 3b1da2848fc7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/checksdk/main.cpp	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,165 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "cesdkhandler.h"
+#include <QtCore/QStringList>
+#include <QtCore/QFile>
+#include <QtCore/QDir>
+#include <QtCore/QDebug>
+
+void usage()
+{
+    printf("SDK Scanner - Convenience Tool to setup your environment\n");
+    printf("              for crosscompilation to Windows CE\n");
+    printf("Options:\n");
+    printf("-help                This output\n");
+    printf("-list                List all available SDKs\n");
+    printf("-sdk <name>          Select specified SDK.\n");
+    printf("                     Note: SDK names with spaces need to be\n");
+    printf("                     specified in parenthesis\n");
+    printf("                     default: Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n");
+    printf("-script <file>       Create a script file which can be launched\n");
+    printf("                     to setup your environment for specified SDK\n");
+}
+
+int main(int argc, char **argv)
+{
+    if (argc == 1) {
+        usage();
+        return 0;
+    }
+    QString sdkName;
+    bool operationList = false;
+    QString scriptFile;
+
+    QStringList arguments;
+    for (int i=0; i < argc; ++i)
+        arguments.append(QLatin1String(argv[i]));
+    for (int i=1; i < arguments.size(); ++i) {
+        if (arguments[i].toLower() == QLatin1String("-help")) {
+            usage();
+            return 0;
+        } else if (arguments[i].toLower() == QLatin1String("-list")) {
+            operationList = true;
+        } else if (arguments[i].toLower() == QLatin1String("-sdk")) {
+            if (i+1 >= arguments.size()) {
+                qWarning("No SDK specified.");
+                return -1;
+            }
+            sdkName = arguments[++i];
+        } else if (arguments[i].toLower() == QLatin1String("-script")) {
+            if (i+1 >= arguments.size()) {
+                qWarning("No scriptfile specified.");
+                return -1;
+            }
+            scriptFile = arguments[++i];
+        } else {
+            qWarning("Unknown option:%s", qPrintable(arguments[i]));
+            usage();
+            return -1;
+        }
+    }
+
+    CeSdkHandler handler;
+    if (!handler.parse()) {
+        qWarning("Could not find any installed SDK, aborting!");
+        return -1;
+    }
+
+    QList<CeSdkInfo> list = handler.listAll();
+
+    if (operationList) {
+        printf("Available SDKs:\n");
+        for (QList<CeSdkInfo>::iterator it = list.begin(); it != list.end(); ++it) {
+            printf("SDK Name: ");
+            printf(qPrintable(it->name()));
+            printf("\n");
+        }
+        return 0;
+    }
+
+    // Check for SDK Name, otherwise use Windows Mobile as default
+    if (sdkName.isEmpty()) {
+        qWarning("No SDK specified: Defaulting to Windows Mobile 5.0 Pocket PC SDK");
+        sdkName = QString::fromLatin1("Windows Mobile 5.0 Pocket PC SDK (ARMV4I)");
+    }
+
+    // finally find the given SDK and prompt out the environment to be set
+    for (QList<CeSdkInfo>::iterator it = list.begin(); it != list.end(); ++it ) {
+        if (sdkName == it->name()) {
+            if (!it->isValid()) {
+                qWarning("Selected SDK is not valid!");
+                return -1;
+            } else if (!it->isSupported()) {
+                qWarning("Selected SDK is not officially supported and might not work");
+            }
+            QString binPath, includePath, libPath;
+            binPath = QString::fromLatin1("PATH=") + it->binPath();
+            includePath = QString::fromLatin1("INCLUDE=") + it->includePath();
+            libPath = QString::fromLatin1("LIB=") + it->libPath();
+            if (scriptFile.isEmpty()) {
+                printf("Please set up your environment with the following paths:\n");
+                printf(qPrintable(binPath));
+                printf("\n");
+                printf(qPrintable(includePath));
+                printf("\n");
+                printf(qPrintable(libPath));
+                printf("\n");
+                return 0;
+            } else {
+                QFile file(scriptFile);
+                if (!file.open(QIODevice::WriteOnly)) {
+                    qWarning("Could not open target script file");
+                    return -1;
+                }
+                QString content;
+                content += QLatin1String("@echo off\n");
+                content += QLatin1String("echo Environment Selection:") + sdkName + QLatin1String("\n");
+                content += QLatin1String("set ") + binPath + QLatin1String("\n");
+                content += QLatin1String("set ") + includePath + QLatin1String("\n");
+                content += QLatin1String("set ") + libPath + QLatin1String("\n");
+                file.write(content.toLatin1());
+                return 0;
+            }
+        }
+    }
+    qWarning("Could not find specified SDK: %s" , qPrintable(sdkName));
+    return -1;
+}