| /**************************************************************************** |
| ** |
| ** Copyright (C) 2011 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$ |
| ** GNU Lesser General Public License Usage |
| ** 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. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU General |
| ** Public License version 3.0 as published by the Free Software Foundation |
| ** and appearing in the file LICENSE.GPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU General |
| ** Public License version 3.0 requirements will be met: |
| ** http://www.gnu.org/copyleft/gpl.html. |
| ** |
| ** Other Usage |
| ** Alternatively, this file may be used in accordance with the terms and |
| ** conditions contained in a signed written agreement between you and Nokia. |
| ** |
| ** |
| ** |
| ** |
| ** |
| ** $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; |
| } |