summaryrefslogtreecommitdiffstats
path: root/qmake/generators/win32/msvc_nmake.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qmake/generators/win32/msvc_nmake.cpp')
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp64
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