From 551cdaf9512082c1eb85da2992f8b5269d424620 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 10 Oct 2011 15:36:16 +0200 Subject: Active Qt: Move idc tool here. Fix targets of tools. Change-Id: I8886d0aa3a3e7b62337709afbdbc953a90914f1d Reviewed-on: http://codereview.qt-project.org/6341 Sanity-Review: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- tools/dumpcpp/dumpcpp.pro | 4 +- tools/dumpdoc/dumpdoc.pro | 4 + tools/idc/idc.pro | 9 ++ tools/idc/main.cpp | 335 ++++++++++++++++++++++++++++++++++++++++++++++ tools/testcon/testcon.pro | 3 + tools/tools.pro | 3 +- 6 files changed, 356 insertions(+), 2 deletions(-) create mode 100644 tools/idc/idc.pro create mode 100644 tools/idc/main.cpp (limited to 'tools') diff --git a/tools/dumpcpp/dumpcpp.pro b/tools/dumpcpp/dumpcpp.pro index e49d99f..240ae74 100644 --- a/tools/dumpcpp/dumpcpp.pro +++ b/tools/dumpcpp/dumpcpp.pro @@ -1,7 +1,9 @@ TEMPLATE = app CONFIG += console qaxcontainer -DESTDIR = ../../../bin QT += widgets SOURCES += main.cpp + +target.path = $$[QT_INSTALL_BINS] +INSTALLS += target diff --git a/tools/dumpdoc/dumpdoc.pro b/tools/dumpdoc/dumpdoc.pro index 5ee96e7..5f3fb4e 100644 --- a/tools/dumpdoc/dumpdoc.pro +++ b/tools/dumpdoc/dumpdoc.pro @@ -4,3 +4,7 @@ CONFIG += console qaxcontainer QT += widgets SOURCES += main.cpp + +target.path = $$[QT_INSTALL_BINS] +INSTALLS += target + diff --git a/tools/idc/idc.pro b/tools/idc/idc.pro new file mode 100644 index 0000000..a2e04c9 --- /dev/null +++ b/tools/idc/idc.pro @@ -0,0 +1,9 @@ +TEMPLATE = app +CONFIG += console + +QT -= gui + +SOURCES = main.cpp + +target.path = $$[QT_INSTALL_BINS] +INSTALLS += target diff --git a/tools/idc/main.cpp b/tools/idc/main.cpp new file mode 100644 index 0000000..aaa8830 --- /dev/null +++ b/tools/idc/main.cpp @@ -0,0 +1,335 @@ +/**************************************************************************** +** +** 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 +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static QString quotePath(const QString &s) +{ + if (!s.startsWith(QLatin1Char('\"')) && s.contains(QLatin1Char(' '))) + return QLatin1Char('\"') + s + QLatin1Char('\"'); + return s; +} + + +static bool runWithQtInEnvironment(const QString &cmd) +{ + QProcess proc; + + // prepend the qt binary directory to the path + QStringList env = QProcess::systemEnvironment(); + for (int i=0; i argc) { + error = QLatin1String("Missing name for interface definition file!"); + break; + } + idlfile = QLatin1String(argv[i]); + idlfile = idlfile.trimmed().toLower(); + } else if (p == QLatin1String("/version") || p == QLatin1String("-version")) { + ++i; + if (i > argc) + version = QLatin1String("1.0"); + else + version = QLatin1String(argv[i]); + } else if (p == QLatin1String("/tlb") || p == QLatin1String("-tlb")) { + ++i; + if (i > argc) { + error = QLatin1String("Missing name for type library file!"); + break; + } + tlbfile = QLatin1String(argv[i]); + tlbfile = tlbfile.trimmed().toLower(); + } else if (p == QLatin1String("/v") || p == QLatin1String("-v")) { + fprintf(stdout, "Qt Interface Definition Compiler version 1.0\n"); + return 0; + } else if (p == QLatin1String("/regserver") || p == QLatin1String("-regserver")) { + if (!registerServer(input)) { + fprintf(stderr, "Failed to register server!\n"); + return 1; + } + fprintf(stderr, "Server registered successfully!\n"); + return 0; + } else if (p == QLatin1String("/unregserver") || p == QLatin1String("-unregserver")) { + if (!unregisterServer(input)) { + fprintf(stderr, "Failed to unregister server!\n"); + return 1; + } + fprintf(stderr, "Server unregistered successfully!\n"); + return 0; + } else if (p[0] == QLatin1Char('/') || p[0] == QLatin1Char('-')) { + error = QLatin1String("Unknown option \"") + p + QLatin1Char('\"'); + break; + } else { + input = QLatin1String(argv[i]); + input = input.trimmed().toLower(); + } + i++; + } + if (!error.isEmpty()) { + fprintf(stderr, "%s", error.toLatin1().data()); + fprintf(stderr, "\n"); + return 5; + } + if (input.isEmpty()) { + fprintf(stderr, "No input file specified!\n"); + return 1; + } + if (input.endsWith(QLatin1String(".exe")) && tlbfile.isEmpty() && idlfile.isEmpty()) { + fprintf(stderr, "No type output file specified!\n"); + return 2; + } + if (input.endsWith(QLatin1String(".dll")) && idlfile.isEmpty() && tlbfile.isEmpty()) { + fprintf(stderr, "No interface definition file and no type library file specified!\n"); + return 3; + } + slashify(input); + if (!tlbfile.isEmpty()) { + slashify(tlbfile); + QFile file(tlbfile); + if (!file.open(QIODevice::ReadOnly)) { + fprintf(stderr, "Couldn't open %s for read\n", (const char*)tlbfile.toLocal8Bit().data()); + return 4; + } + QByteArray data = file.readAll(); + QString error; + bool ok = attachTypeLibrary(input, 1, data, &error); + fprintf(stderr, "%s", error.toLatin1().data()); + fprintf(stderr, "\n"); + return ok ? 0 : 4; + } else if (!idlfile.isEmpty()) { + slashify(idlfile); + idlfile = quotePath(idlfile); + fprintf(stderr, "\n\n%s\n\n", (const char*)idlfile.toLocal8Bit().data()); + quotePath(input); + HRESULT res = dumpIdl(input, idlfile, version); + + switch (res) { + case S_OK: + break; + case E_FAIL: + fprintf(stderr, "IDL generation failed trying to run program %s!\n", (const char*)input.toLocal8Bit().data()); + return res; + case -1: + fprintf(stderr, "Couldn't open %s for writing!\n", (const char*)idlfile.toLocal8Bit().data()); + return res; + case 1: + fprintf(stderr, "Malformed appID value in %s!\n", (const char*)input.toLocal8Bit().data()); + return res; + case 2: + fprintf(stderr, "Malformed typeLibID value in %s!\n", (const char*)input.toLocal8Bit().data()); + return res; + case 3: + fprintf(stderr, "Class has no metaobject information (error in %s)!\n", (const char*)input.toLocal8Bit().data()); + return res; + case 4: + fprintf(stderr, "Malformed classID value in %s!\n", (const char*)input.toLocal8Bit().data()); + return res; + case 5: + fprintf(stderr, "Malformed interfaceID value in %s!\n", (const char*)input.toLocal8Bit().data()); + return res; + case 6: + fprintf(stderr, "Malformed eventsID value in %s!\n", (const char*)input.toLocal8Bit().data()); + return res; + + default: + fprintf(stderr, "Unknown error writing IDL from %s\n", (const char*)input.toLocal8Bit().data()); + return 7; + } + } + return 0; +} + +QT_END_NAMESPACE + +int main(int argc, char **argv) +{ + return QT_PREPEND_NAMESPACE(runIdc)(argc, argv); +} diff --git a/tools/testcon/testcon.pro b/tools/testcon/testcon.pro index b2d919a..1fecafd 100644 --- a/tools/testcon/testcon.pro +++ b/tools/testcon/testcon.pro @@ -19,3 +19,6 @@ win32-borland { !win32-g++*:QMAKE_POST_LINK = midl $$QT.activeqt.sources/../../tools/testcon/testcon.idl && move testcon.tlb $(TARGETDIR) } + +target.path = $$[QT_INSTALL_BINS] +INSTALLS += target diff --git a/tools/tools.pro b/tools/tools.pro index c50010c..c3052af 100644 --- a/tools/tools.pro +++ b/tools/tools.pro @@ -4,5 +4,6 @@ CONFIG += ordered SUBDIRS = dumpdoc \ dumpcpp \ - testcon + testcon \ + idc -- cgit v1.2.1