diff options
Diffstat (limited to 'qmake')
-rw-r--r-- | qmake/Makefile.unix | 6 | ||||
-rw-r--r-- | qmake/Makefile.win32 | 1 | ||||
-rw-r--r-- | qmake/generators/makefile.cpp | 22 | ||||
-rw-r--r-- | qmake/generators/makefile.h | 20 | ||||
-rw-r--r-- | qmake/generators/unix/unixmake2.cpp | 2 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_nmake.cpp | 72 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_nmake.h | 2 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_vcproj.cpp | 8 | ||||
-rw-r--r-- | qmake/qmake.pri | 1 |
9 files changed, 80 insertions, 54 deletions
diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix index 2f04a88a42..2c41bf5951 100644 --- a/qmake/Makefile.unix +++ b/qmake/Makefile.unix @@ -12,7 +12,7 @@ OBJS=project.o option.o property.o main.o ioutils.o proitems.o \ gbuild.o cesdkhandler.o #qt code -QOBJS=qtextcodec.o qutfcodec.o qstring.o qstringbuilder.o qtextstream.o qiodevice.o qmalloc.o qglobal.o \ +QOBJS=qtextcodec.o qutfcodec.o qstring.o qstring_compat.o qstringbuilder.o qtextstream.o qiodevice.o qmalloc.o qglobal.o \ qarraydata.o qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlist.o qfiledevice.o qfile.o \ qfilesystementry.o qfilesystemengine.o qfsfileengine.o qfsfileengine_iterator.o qregexp.o qvector.o \ qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o qfileinfo.o qdatetime.o qstringlist.o \ @@ -40,6 +40,7 @@ DEPEND_SRC = \ $(QMKGENSRC)/win32/msvc_objectmodel.cpp $(QMKGENSRC)/win32/msbuild_objectmodel.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/tools/qstring_compat.cpp \ $(SOURCE_PATH)/src/corelib/io/qfiledevice.cpp \ $(SOURCE_PATH)/src/corelib/io/qtextstream.cpp $(SOURCE_PATH)/src/corelib/io/qiodevice.cpp \ $(SOURCE_PATH)/src/corelib/global/qmalloc.cpp \ @@ -272,6 +273,9 @@ qtextcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp qstring.o: $(SOURCE_PATH)/src/corelib/tools/qstring.cpp $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstring.cpp +qstring_compat.o: $(SOURCE_PATH)/src/corelib/tools/qstring_compat.cpp + $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstring_compat.cpp + qstringbuilder.o: $(SOURCE_PATH)/src/corelib/tools/qstringbuilder.cpp $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstringbuilder.cpp diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32 index 73f4dd5de3..0bc0093fd3 100644 --- a/qmake/Makefile.win32 +++ b/qmake/Makefile.win32 @@ -105,6 +105,7 @@ QTOBJS= \ qtextcodec.obj \ qutfcodec.obj \ qstring.obj \ + qstring_compat.obj \ qstringlist.obj \ qstringbuilder.obj \ qsystemerror.obj \ diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 946a1ee986..ac8bd8f9a7 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -1420,31 +1420,31 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) } QString -MakefileGenerator::var(const ProKey &var) +MakefileGenerator::var(const ProKey &var) const { return val(project->values(var)); } QString -MakefileGenerator::val(const ProStringList &varList) +MakefileGenerator::val(const ProStringList &varList) const { return valGlue(varList, "", " ", ""); } QString -MakefileGenerator::val(const QStringList &varList) +MakefileGenerator::val(const QStringList &varList) const { return valGlue(varList, "", " ", ""); } QString -MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const { return valGlue(project->values(var), before, glue, after); } QString -MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const { ProStringList varList; foreach (const ProString &val, project->values(var)) @@ -1453,7 +1453,7 @@ MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const Q } QString -MakefileGenerator::valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after) const { QString ret; for (ProStringList::ConstIterator it = varList.begin(); it != varList.end(); ++it) { @@ -1467,7 +1467,7 @@ MakefileGenerator::valGlue(const ProStringList &varList, const QString &before, } QString -MakefileGenerator::valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) const { QString ret; for(QStringList::ConstIterator it = varList.begin(); it != varList.end(); ++it) { @@ -1482,19 +1482,19 @@ MakefileGenerator::valGlue(const QStringList &varList, const QString &before, co QString -MakefileGenerator::varList(const ProKey &var) +MakefileGenerator::varList(const ProKey &var) const { return valList(project->values(var)); } QString -MakefileGenerator::valList(const ProStringList &varList) +MakefileGenerator::valList(const ProStringList &varList) const { return valGlue(varList, "", " \\\n\t\t", ""); } QString -MakefileGenerator::valList(const QStringList &varList) +MakefileGenerator::valList(const QStringList &varList) const { return valGlue(varList, "", " \\\n\t\t", ""); } @@ -2464,8 +2464,6 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT t << "include " << (*qeui_it) << endl; if (!(flags & SubTargetSkipDefaultVariables)) { - /* Calling Option::fixPathToTargetOS() is necessary for MinGW/MSYS, which requires - * back-slashes to be turned into slashes. */ t << "QMAKE = " << var("QMAKE_QMAKE") << endl; t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl; diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h index 4b8a96c15f..a382ca6bf6 100644 --- a/qmake/generators/makefile.h +++ b/qmake/generators/makefile.h @@ -225,16 +225,16 @@ protected: virtual bool findLibraries(); //for retrieving values and lists of values - virtual QString var(const ProKey &var); - QString varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after); - QString fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after); - QString varList(const ProKey &var); - QString val(const ProStringList &varList); - QString val(const QStringList &varList); - QString valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after); - QString valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after); - QString valList(const QStringList &varList); - QString valList(const ProStringList &varList); + virtual QString var(const ProKey &var) const; + QString varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const; + QString fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const; + QString varList(const ProKey &var) const; + QString val(const ProStringList &varList) const; + QString val(const QStringList &varList) const; + QString valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) const; + QString valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after) const; + QString valList(const QStringList &varList) const; + QString valList(const ProStringList &varList) const; QString filePrefixRoot(const QString &, const QString &); diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp index 7ed89e23d7..c25bd3ca08 100644 --- a/qmake/generators/unix/unixmake2.cpp +++ b/qmake/generators/unix/unixmake2.cpp @@ -936,7 +936,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) if(doPrecompiledHeaders() && !project->isEmpty("PRECOMPILED_HEADER")) { QString pchInput = project->first("PRECOMPILED_HEADER").toQString(); - t << "###### Prefix headers\n"; + t << "###### Precompiled headers\n"; QString comps[] = { "C", "CXX", "OBJC", "OBJCXX", QString() }; for(int i = 0; !comps[i].isNull(); i++) { QString pchFlags = var(ProKey("QMAKE_" + comps[i] + "FLAGS_PRECOMPILE")); diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index 0abbd133cc..acccdc1bdc 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -124,28 +124,61 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) compiler = QStringLiteral("x86_amd64"); compilerArch = QStringLiteral("amd64"); } + + const QString msvcVer = project->first("MSVC_VER").toQString(); + if (msvcVer.isEmpty()) { + fprintf(stderr, "Mkspec does not specify MSVC_VER. Cannot continue.\n"); + return false; + } + const QString winsdkVer = project->first("WINSDK_VER").toQString(); + if (winsdkVer.isEmpty()) { + fprintf(stderr, "Mkspec does not specify WINSDK_VER. Cannot continue.\n"); + return false; + } + const QString targetVer = project->first("WINTARGET_VER").toQString(); + if (targetVer.isEmpty()) { + fprintf(stderr, "Mkspec does not specify WINTARGET_VER. Cannot continue.\n"); + return false; + } + + const bool isPhone = project->isActiveConfig(QStringLiteral("winphone")); #ifdef Q_OS_WIN -#ifdef Q_OS_WIN64 - const QString regKey = QStringLiteral("Software\\Wow6432Node\\Microsoft\\VisualStudio\\11.0\\Setup\\VC\\ProductDir"); -#else - const QString regKey = QStringLiteral("Software\\Microsoft\\VisualStudio\\11.0\\Setup\\VC\\ProductDir"); + QString regKeyPrefix; +#if !defined(Q_OS_WIN64) && _WIN32_WINNT >= 0x0501 + BOOL isWow64; + IsWow64Process(GetCurrentProcess(), &isWow64); + if (!isWow64) + regKeyPrefix = QStringLiteral("Software\\"); + else #endif + regKeyPrefix = QStringLiteral("Software\\Wow6432Node\\"); + + QString regKey = regKeyPrefix + QStringLiteral("Microsoft\\VisualStudio\\") + msvcVer + ("\\Setup\\VC\\ProductDir"); const QString vcInstallDir = qt_readRegistryKey(HKEY_LOCAL_MACHINE, regKey); if (vcInstallDir.isEmpty()) { - fprintf(stderr, "Failed to find the Visual Studio 2012 installation directory.\n" - "Is it installed?.\n"); + fprintf(stderr, "Failed to find the Visual Studio installation directory.\n"); + return false; + } + + regKey = regKeyPrefix + + (isPhone ? QStringLiteral("Microsoft\\Microsoft SDKs\\WindowsPhone\\v") + : QStringLiteral("Microsoft\\Microsoft SDKs\\Windows\\v")) + + winsdkVer + QStringLiteral("\\InstallationFolder"); + const QString kitDir = qt_readRegistryKey(HKEY_LOCAL_MACHINE, regKey); + if (kitDir.isEmpty()) { + fprintf(stderr, "Failed to find the Windows Kit installation directory.\n"); return false; } #else const QString vcInstallDir = "/fake/vc_install_dir"; + const QString kitDir = "/fake/sdk_install_dir"; #endif // Q_OS_WIN QStringList incDirs; QStringList libDirs; QStringList binDirs; - const bool isPhone = project->isActiveConfig(QStringLiteral("winphone")); if (isPhone) { - QString sdkDir = vcInstallDir + QStringLiteral("/WPSDK/WP80"); + QString sdkDir = vcInstallDir + QStringLiteral("/WPSDK/") + targetVer; if (!QDir(sdkDir).exists()) { fprintf(stderr, "Failed to find the Windows Phone SDK in %s.\n" "Check that it is properly installed.\n", @@ -155,14 +188,6 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) incDirs << sdkDir + QStringLiteral("/include"); libDirs << sdkDir + QStringLiteral("/lib/") + compilerArch; binDirs << sdkDir + QStringLiteral("/bin/") + compiler; - - QString kitDir = vcInstallDir + QStringLiteral("/../../Windows Phone Kits/8.0"); - if (!QDir(kitDir).exists()) { - fprintf(stderr, "Failed to find the Windows Phone Kit in %s.\n" - "Check that it is properly installed.\n", - qPrintable(QDir::toNativeSeparators(kitDir))); - return false; - } libDirs << kitDir + QStringLiteral("/lib/") + arch; incDirs << kitDir + QStringLiteral("/include") << kitDir + QStringLiteral("/include/abi") @@ -170,18 +195,11 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) << kitDir + QStringLiteral("/include/minwin"); } else { incDirs << vcInstallDir + QStringLiteral("/include"); - libDirs << vcInstallDir + QStringLiteral("/lib/") + compilerArch; + libDirs << vcInstallDir + QStringLiteral("/lib/store/") + compilerArch + << vcInstallDir + QStringLiteral("/lib/") + compilerArch; binDirs << vcInstallDir + QStringLiteral("/bin/") + compiler << vcInstallDir + QStringLiteral("/../Common7/IDE"); - - QString kitDir = vcInstallDir + QStringLiteral("/../../Windows Kits/8.0"); - if (!QDir(kitDir).exists()) { - fprintf(stderr, "Failed to find the Windows Kit in %s.\n" - "Check that it is properly installed.\n", - qPrintable(QDir::toNativeSeparators(kitDir))); - return false; - } - libDirs << kitDir + QStringLiteral("/Lib/win8/um/") + arch; + libDirs << kitDir + QStringLiteral("/Lib/") + targetVer + ("/um/") + arch; incDirs << kitDir + QStringLiteral("/include/um") << kitDir + QStringLiteral("/include/shared") << kitDir + QStringLiteral("/include/winrt"); @@ -285,7 +303,7 @@ void NmakeMakefileGenerator::writeNmakeParts(QTextStream &t) } } -QString NmakeMakefileGenerator::var(const ProKey &value) +QString NmakeMakefileGenerator::var(const ProKey &value) const { if (usePCH) { if ((value == "QMAKE_RUN_CXX_IMP_BATCH" diff --git a/qmake/generators/win32/msvc_nmake.h b/qmake/generators/win32/msvc_nmake.h index 7a47bb8cec..4d3c69bdd6 100644 --- a/qmake/generators/win32/msvc_nmake.h +++ b/qmake/generators/win32/msvc_nmake.h @@ -62,7 +62,7 @@ protected: virtual QString getPdbTarget(); virtual QString defaultInstall(const QString &t); virtual QStringList &findDependencies(const QString &file); - QString var(const ProKey &value); + QString var(const ProKey &value) const; QString precompH, precompObj, precompPch; bool usePCH; diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index fbc2f6b0a6..5f2486319c 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -968,8 +968,12 @@ void VcprojGenerator::initConfiguration() if (conf.CompilerVersion >= NET2012) { conf.WinRT = project->isActiveConfig("winrt"); - if (conf.WinRT) + if (conf.WinRT) { conf.WinPhone = project->isActiveConfig("winphone"); + // Saner defaults + conf.compiler.UsePrecompiledHeader = pchNone; + conf.compiler.CompileAsWinRT = _False; + } } conf.Name = project->values("BUILD_NAME").join(' '); @@ -986,7 +990,7 @@ void VcprojGenerator::initConfiguration() conf.ATLMinimizesCRunTimeLibraryUsage = (project->first("ATLMinimizesCRunTimeLibraryUsage").isEmpty() ? _False : _True); conf.BuildBrowserInformation = triState(temp.isEmpty() ? (short)unset : temp.toShort()); temp = project->first("CharacterSet"); - conf.CharacterSet = charSet(temp.isEmpty() ? (short)charSetNotSet : temp.toShort()); + conf.CharacterSet = charSet(temp.isEmpty() ? short(conf.WinRT ? charSetUnicode : charSetNotSet) : temp.toShort()); conf.DeleteExtensionsOnClean = project->first("DeleteExtensionsOnClean").toQString(); conf.ImportLibrary = conf.linker.ImportLibrary; conf.IntermediateDirectory = project->first("OBJECTS_DIR").toQString(); diff --git a/qmake/qmake.pri b/qmake/qmake.pri index 661b787a55..6052dadb2e 100644 --- a/qmake/qmake.pri +++ b/qmake/qmake.pri @@ -67,6 +67,7 @@ bootstrap { #Qt code qtextcodec.cpp \ qutfcodec.cpp \ qstring.cpp \ + qstring_compat.cpp \ qstringlist.cpp \ qtemporaryfile.cpp \ qtextstream.cpp \ |