summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Breitmeyer <bjoern.breitmeyer@kdab.com>2012-05-11 10:24:28 +0200
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>2012-06-19 16:46:09 +0200
commit00f9ac93c248b019e72757da9c5d8121a5fd1bf5 (patch)
treed4a29bd28b14ba0db2edaeda7593bee2bf3839f0
parent2f1762535b87ffe2572a25a4de0f3b83bf408595 (diff)
Fixed Wince Makefile environment
Integrated the checksdk tool into qmake and made the makefiles selfcontained, so configure make, is now enough to build qt for wince Change-Id: I29076702eca2ec23d4d06bb3d5c5cef9d4f95161 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
-rw-r--r--qmake/Makefile.unix7
-rw-r--r--qmake/Makefile.win322
-rw-r--r--qmake/Makefile.win32-g++3
-rw-r--r--qmake/generators/win32/cesdkhandler.cpp127
-rw-r--r--qmake/generators/win32/cesdkhandler.h94
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp25
-rw-r--r--qmake/qmake.pri6
7 files changed, 258 insertions, 6 deletions
diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix
index ad430e2930..b1df49aab3 100644
--- a/qmake/Makefile.unix
+++ b/qmake/Makefile.unix
@@ -13,7 +13,7 @@ OBJS=project.o property.o main.o makefile.o unixmake2.o unixmake.o \
mingw_make.o option.o winmakefile.o projectgenerator.o \
meta.o makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o \
borland_bmake.o msvc_vcproj.o msvc_vcxproj.o msvc_nmake.o msvc_objectmodel.o msbuild_objectmodel.o \
- gbuild.o
+ gbuild.o cesdkhandler.o
#qt code
QOBJS=qtextcodec.o qutfcodec.o qstring.o qstringbuilder.o qtextstream.o qiodevice.o qmalloc.o qglobal.o \
@@ -36,7 +36,7 @@ DEPEND_SRC=project.cpp property.cpp meta.cpp main.cpp generators/makefile.cpp ge
generators/mac/pbuilder_pbx.cpp generators/mac/xmloutput.cpp generators/metamakefile.cpp \
generators/makefiledeps.cpp option.cpp generators/win32/mingw_make.cpp generators/makefile.cpp \
generators/win32/msvc_vcproj.cpp generators/win32/msvc_vcxproj.cpp generators/win32/msvc_objectmodel.cpp generators/win32/msbuild_objectmodel.cpp generators/win32/msbuild_objectmodel.cpp generators/win32/msvc_nmake.cpp generators/win32/borland_bmake.cpp \
- generators/integrity/gbuild.cpp \
+ generators/integrity/gbuild.cpp generators/win32/cesdkhandler.cpp \
$(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp \
$(SOURCE_PATH)/src/corelib/tools/qstring.cpp $(SOURCE_PATH)/src/corelib/io/qfile.cpp \
$(SOURCE_PATH)/src/corelib/io/qfiledevice.cpp \
@@ -160,6 +160,9 @@ msvc_vcxproj.o: $(QMKSRC)/generators/win32/msvc_vcxproj.cpp
msvc_nmake.o: $(QMKSRC)/generators/win32/msvc_nmake.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
+cesdkhandler.o: $(QMKSRC)/generators/win32/cesdkhandler.cpp
+ $(CXX) -c -o $@ $(CXXFLAGS) $<
+
pbuilder_pbx.o: $(QMKSRC)/generators/mac/pbuilder_pbx.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32
index 029546f69d..ad6d4448d7 100644
--- a/qmake/Makefile.win32
+++ b/qmake/Makefile.win32
@@ -61,7 +61,7 @@ OBJS = project.obj main.obj makefile.obj unixmake.obj unixmake2.obj mingw
makefiledeps.obj metamakefile.obj xmloutput.obj pbuilder_pbx.obj \
borland_bmake.obj msvc_nmake.obj msvc_vcproj.obj msvc_vcxproj.obj \
msvc_objectmodel.obj msbuild_objectmodel.obj registry.obj \
- gbuild.obj
+ gbuild.obj cesdkhandler.obj
!IFDEF QMAKE_OPENSOURCE_EDITION
CFLAGS = $(CFLAGS) -DQMAKE_OPENSOURCE_EDITION
diff --git a/qmake/Makefile.win32-g++ b/qmake/Makefile.win32-g++
index 1966a8bbbc..d06d958ca3 100644
--- a/qmake/Makefile.win32-g++
+++ b/qmake/Makefile.win32-g++
@@ -64,7 +64,8 @@ OBJS = project.o main.o makefile.o unixmake.o unixmake2.o mingw_make.o \
option.o winmakefile.o projectgenerator.o property.o meta.o \
makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o \
borland_bmake.o msvc_nmake.o msvc_vcproj.o msvc_vcxproj.o \
- msvc_objectmodel.o msbuild_objectmodel.o registry.o gbuild.o
+ msvc_objectmodel.o msbuild_objectmodel.o registry.o gbuild.o \
+ cesdkhandler.o
ifdef QMAKE_OPENSOURCE_EDITION
CFLAGS += -DQMAKE_OPENSOURCE_EDITION
diff --git a/qmake/generators/win32/cesdkhandler.cpp b/qmake/generators/win32/cesdkhandler.cpp
new file mode 100644
index 0000000000..de6a55112b
--- /dev/null
+++ b/qmake/generators/win32/cesdkhandler.cpp
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** 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/QFile>
+#include <QtCore/QDebug>
+#include <QtCore/QXmlStreamReader>
+
+QT_BEGIN_NAMESPACE
+
+CeSdkInfo::CeSdkInfo() : m_major(0) , m_minor(0)
+{
+}
+
+CeSdkHandler::CeSdkHandler()
+{
+}
+
+bool CeSdkHandler::parse()
+{
+ // look at the file at %VCInstallDir%/vcpackages/WCE.VCPlatform.config
+ // and scan through all installed sdks...
+ m_list.clear();
+ m_vcInstallDir = QString::fromLatin1(qgetenv("VCInstallDir"));
+ if (m_vcInstallDir.isEmpty())
+ return false;
+
+ QDir vStudioDir(m_vcInstallDir);
+ if (!vStudioDir.cd(QLatin1String("vcpackages")))
+ return false;
+
+ QFile configFile(vStudioDir.absoluteFilePath(QLatin1String("WCE.VCPlatform.config")));
+ if (!configFile.open(QIODevice::ReadOnly))
+ return false;
+
+ QString currentElement;
+ CeSdkInfo currentItem;
+ QXmlStreamReader xml(&configFile);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ if (xml.isStartElement()) {
+ currentElement = xml.name().toString();
+ if (currentElement == QLatin1String("Platform")) {
+ currentItem = CeSdkInfo();
+ } else if (currentElement == QLatin1String("Directories")) {
+ QXmlStreamAttributes attr = xml.attributes();
+ currentItem.m_include = fixPaths(attr.value(QLatin1String("Include")).toString());
+ currentItem.m_lib = fixPaths(attr.value(QLatin1String("Library")).toString());
+ currentItem.m_bin = fixPaths(attr.value(QLatin1String("Path")).toString());
+ }
+ } else if (xml.isEndElement()) {
+ if (xml.name().toString() == QLatin1String("Platform"))
+ m_list.append(currentItem);
+ } else if (xml.isCharacters() && !xml.isWhitespace()) {
+ if (currentElement == QLatin1String("PlatformName"))
+ currentItem.m_name = xml.text().toString();
+ else if (currentElement == QLatin1String("OSMajorVersion"))
+ currentItem.m_major = xml.text().toString().toInt();
+ else if (currentElement == QLatin1String("OSMinorVersion"))
+ currentItem.m_minor = xml.text().toString().toInt();
+ }
+ }
+
+ if (xml.error() && xml.error() != QXmlStreamReader::PrematureEndOfDocumentError) {
+ qWarning() << "XML ERROR:" << xml.lineNumber() << ": " << xml.errorString();
+ return false;
+ }
+
+ return m_list.size() > 0 ? true : false;
+}
+
+QString CeSdkHandler::fixPaths(QString path) const
+{
+ QRegExp searchStr(QLatin1String("(\\$\\(\\w+\\))"));
+ QString fixedString = path;
+ for (int index = fixedString.indexOf(searchStr, 0);
+ index >= 0;
+ index = fixedString.indexOf(searchStr, index)) {
+ const QString capture = searchStr.cap(0);
+ fixedString.replace(index, capture.length(), capture.toUpper());
+ index += capture.length(); // don't count the zero terminator
+ fixedString.insert(index, '\\'); // the configuration file lacks a directory separator for env vars
+ ++index;
+ }
+ return fixedString;
+}
+
+QT_END_NAMESPACE
diff --git a/qmake/generators/win32/cesdkhandler.h b/qmake/generators/win32/cesdkhandler.h
new file mode 100644
index 0000000000..8d35694e5d
--- /dev/null
+++ b/qmake/generators/win32/cesdkhandler.h
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** 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$
+**
+****************************************************************************/
+
+#ifndef CE_SDK_HANDLER_INCL
+#define CE_SDK_HANDLER_INCL
+
+#include <QStringList>
+#include <QDir>
+
+QT_BEGIN_NAMESPACE
+
+class CeSdkInfo
+{
+public:
+ CeSdkInfo();
+ inline QString name() const { return m_name; }
+ inline QString binPath() const { return m_bin; }
+ inline QString includePath() const { return m_include; }
+ inline QString libPath() const { return m_lib; }
+ inline bool isValid() const;
+ inline int majorVersion() const { return m_major; }
+ inline int minorVersion() const { return m_minor; }
+ inline bool isSupported() const { return m_major >= 5; }
+private:
+ friend class CeSdkHandler;
+ QString m_name;
+ QString m_bin;
+ QString m_include;
+ QString m_lib;
+ int m_major;
+ int m_minor;
+};
+
+bool CeSdkInfo::isValid() const
+{
+ return !m_name.isEmpty() &&
+ !m_bin.isEmpty() &&
+ !m_include.isEmpty() &&
+ !m_lib.isEmpty();
+}
+
+class CeSdkHandler
+{
+public:
+ CeSdkHandler();
+ bool parse();
+ inline QList<CeSdkInfo> listAll() const { return m_list; }
+private:
+ inline QString fixPaths(QString path) const;
+ QList<CeSdkInfo> m_list;
+ QString m_vcInstallDir;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index db6651cb88..adf8883b01 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -41,6 +41,7 @@
#include "msvc_nmake.h"
#include "option.h"
+#include "cesdkhandler.h"
#include <qregexp.h>
#include <qhash.h>
#include <qdir.h>
@@ -76,6 +77,30 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t)
if(Option::mkfile::do_stub_makefile)
return MakefileGenerator::writeStubMakefile(t);
#endif
+ if (!project->isHostBuild()) {
+ const QHash<QString, QStringList> &variables = project->variables();
+ if (variables.contains("XQMAKESPEC")
+ && !variables["XQMAKESPEC"].isEmpty()
+ && variables["XQMAKESPEC"].first().contains("wince", Qt::CaseInsensitive)) {
+ CeSdkHandler sdkhandler;
+ sdkhandler.parse();
+ const QString sdkName = variables["CE_SDK"].join(" ")
+ + " (" + variables["CE_ARCH"].join(" ") + ")";
+ const QList<CeSdkInfo> sdkList = sdkhandler.listAll();
+ CeSdkInfo sdk;
+ foreach (const CeSdkInfo &info, sdkList) {
+ if (info.name().compare(sdkName, Qt::CaseInsensitive ) == 0) {
+ sdk = info;
+ break;
+ }
+ }
+ if (sdk.isValid()) {
+ t << "\nINCLUDE = " << sdk.includePath();
+ t << "\nLIB = " << sdk.libPath();
+ t << "\nPATH = " << sdk.binPath() << "\n";
+ }
+ }
+ }
writeNmakeParts(t);
return MakefileGenerator::writeMakefile(t);
}
diff --git a/qmake/qmake.pri b/qmake/qmake.pri
index cfa0c1359d..68b78f8d21 100644
--- a/qmake/qmake.pri
+++ b/qmake/qmake.pri
@@ -14,7 +14,8 @@ SOURCES += project.cpp property.cpp main.cpp generators/makefile.cpp \
generators/win32/msvc_vcproj.cpp \
generators/win32/msvc_vcxproj.cpp \
generators/win32/msvc_objectmodel.cpp generators/win32/msbuild_objectmodel.cpp \
- generators/integrity/gbuild.cpp
+ generators/integrity/gbuild.cpp \
+ generators/win32/cesdkhandler.cpp
HEADERS += project.h property.h generators/makefile.h \
generators/unix/unixmake.h meta.h option.h cachekeys.h \
@@ -24,7 +25,8 @@ HEADERS += project.h property.h generators/makefile.h \
generators/win32/msvc_vcproj.h \
generators/win32/msvc_vcxproj.h \
generators/win32/msvc_objectmodel.h generators/win32/msbuild_objectmodel.h \
- generators/integrity/gbuild.h
+ generators/integrity/gbuild.h \
+ generators/win32/cesdkhandler.h
contains(QT_EDITION, OpenSource) {
DEFINES += QMAKE_OPENSOURCE_EDITION