diff options
Diffstat (limited to 'qmake/generators/win32/msvc_nmake.cpp')
-rw-r--r-- | qmake/generators/win32/msvc_nmake.cpp | 64 |
1 files changed, 33 insertions, 31 deletions
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index 92043e829f..8ac462da6b 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -124,7 +124,6 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) return false; } - const bool isPhone = project->isActiveConfig(QStringLiteral("winphone")); #ifdef Q_OS_WIN QString regKey; if (msvcVer == QStringLiteral("15.0")) @@ -137,12 +136,7 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) return false; } - QString windowsPath; - if (isPhone) { - windowsPath = "Software\\Microsoft\\Microsoft SDKs\\WindowsPhoneApp\\v"; - } else { - windowsPath = "Software\\Microsoft\\Microsoft SDKs\\Windows\\v"; - } + const QString windowsPath = "Software\\Microsoft\\Microsoft SDKs\\Windows\\v"; regKey = windowsPath + winsdkVer + QStringLiteral("\\InstallationFolder"); const QString kitDir = qt_readRegistryKey(HKEY_LOCAL_MACHINE, regKey, KEY_WOW64_32KEY); @@ -228,23 +222,6 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) libDirs << crtLib + QStringLiteral("/ucrt/") + arch; libDirs << crtLib + QStringLiteral("/um/") + arch; - } else if (isPhone) { - QString sdkDir = vcInstallDir; - if (!QDir(sdkDir).exists()) { - fprintf(stderr, "Failed to find the Windows Phone SDK in %s.\n" - "Check that it is properly installed.\n", - qPrintable(QDir::toNativeSeparators(sdkDir))); - return false; - } - incDirs << sdkDir + QStringLiteral("/include"); - libDirs << sdkDir + QStringLiteral("/lib/store/") + compilerArch - << sdkDir + QStringLiteral("/lib/") + compilerArch; - binDirs << sdkDir + QStringLiteral("/bin/") + compiler; - libDirs << kitDir + QStringLiteral("/lib/") + arch; - incDirs << kitDir + QStringLiteral("/include") - << kitDir + QStringLiteral("/include/abi") - << kitDir + QStringLiteral("/include/mincore") - << kitDir + QStringLiteral("/include/minwin"); } else { incDirs << vcInstallDir + QStringLiteral("/include"); libDirs << vcInstallDir + QStringLiteral("/lib/store/") + compilerArch @@ -589,9 +566,9 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t) if(!project->isEmpty("QMAKE_PRE_LINK")) t << "\n\t" <<var("QMAKE_PRE_LINK"); if(project->isActiveConfig("staticlib")) { - t << "\n\t$(LIBAPP) $(LIBFLAGS) " << var("QMAKE_LINK_O_FLAG") << "$(DESTDIR_TARGET) @<<\n\t " - << "$(OBJECTS)" - << "\n<<"; + t << "\n\t$(LIBAPP) $(LIBFLAGS) " << var("QMAKE_LINK_O_FLAG") << "$(DESTDIR_TARGET) @<<\n\t "; + writeResponseFileFiles(t, project->values("OBJECTS")); + t << "<<"; } else { const bool embedManifest = ((templateName == "app" && project->isActiveConfig("embed_manifest_exe")) || (templateName == "lib" && project->isActiveConfig("embed_manifest_dll") @@ -675,11 +652,36 @@ void NmakeMakefileGenerator::writeLinkCommand(QTextStream &t, const QString &ext t << "$(LINKER) $(LFLAGS)"; if (!extraFlags.isEmpty()) t << ' ' << extraFlags; - t << " " << var("QMAKE_LINK_O_FLAG") << "$(DESTDIR_TARGET) @<<\n" - << "$(OBJECTS) $(LIBS)"; + t << " " << var("QMAKE_LINK_O_FLAG") << "$(DESTDIR_TARGET) @<<\n"; + writeResponseFileFiles(t, project->values("OBJECTS")); + t << "$(LIBS)\n"; if (!extraInlineFileContent.isEmpty()) - t << ' ' << extraInlineFileContent; - t << "\n<<"; + t << extraInlineFileContent << '\n'; + t << "<<"; +} + +void NmakeMakefileGenerator::writeResponseFileFiles(QTextStream &t, const ProStringList &files) +{ + // Add line breaks in file lists in reponse files to work around LNK1170. + // The actual line length limit is 131070, but let's use a smaller limit + // in case other tools are similarly hampered. + const int maxLineLength = 1000; + int len = 0; + for (const ProString &file : files) { + const ProString escapedFilePath = escapeFilePath(file); + if (len) { + if (len + escapedFilePath.length() > maxLineLength) { + t << '\n'; + len = 0; + } else { + t << ' '; + len++; + } + } + t << escapedFilePath; + len += escapedFilePath.length(); + } + t << '\n'; } int NmakeMakefileGenerator::msvcVersion() const |