summaryrefslogtreecommitdiffstats
path: root/qmake/generators/win32
diff options
context:
space:
mode:
Diffstat (limited to 'qmake/generators/win32')
-rw-r--r--qmake/generators/win32/mingw_make.cpp9
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp9
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp9
-rw-r--r--qmake/generators/win32/msvc_objectmodel.h13
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp18
-rw-r--r--qmake/generators/win32/winmakefile.cpp24
6 files changed, 53 insertions, 29 deletions
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
index 382b10c37b..e3d76cd76e 100644
--- a/qmake/generators/win32/mingw_make.cpp
+++ b/qmake/generators/win32/mingw_make.cpp
@@ -308,7 +308,12 @@ void MingwMakefileGenerator::writeBuildRulesPart(QTextStream &t)
{
t << "first: all\n";
t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName()))
- << ' ' << depVar("ALL_DEPS") << " $(DESTDIR_TARGET)\n\n";
+ << ' ' << depVar("ALL_DEPS");
+ if (project->first("TEMPLATE") == "aux") {
+ t << "\n\n";
+ return;
+ }
+ t << " $(DESTDIR_TARGET)\n\n";
t << "$(DESTDIR_TARGET): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
if(!project->isEmpty("QMAKE_PRE_LINK"))
t << "\n\t" <<var("QMAKE_PRE_LINK");
@@ -318,7 +323,7 @@ void MingwMakefileGenerator::writeBuildRulesPart(QTextStream &t)
} else {
t << "\n\t" << objectsLinkLine << " " ;
}
- } else if (project->first("TEMPLATE") != "aux") {
+ } else {
t << "\n\t$(LINKER) $(LFLAGS) " << var("QMAKE_LINK_O_FLAG") << "$(DESTDIR_TARGET) " << objectsLinkLine << " $(LIBS)";
}
if(!project->isEmpty("QMAKE_POST_LINK"))
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index 1739f66453..3a4f6242b2 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -517,7 +517,12 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
t << "first: all\n";
t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName()))
- << ' ' << depVar("ALL_DEPS") << " $(DESTDIR_TARGET)\n\n";
+ << ' ' << depVar("ALL_DEPS");
+ if (templateName == "aux") {
+ t << "\n\n";
+ return;
+ }
+ t << " $(DESTDIR_TARGET)\n\n";
t << "$(DESTDIR_TARGET): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
if(!project->isEmpty("QMAKE_PRE_LINK"))
@@ -526,7 +531,7 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
t << "\n\t$(LIBAPP) $(LIBFLAGS) " << var("QMAKE_LINK_O_FLAG") << "$(DESTDIR_TARGET) @<<\n\t "
<< "$(OBJECTS)"
<< "\n<<";
- } else if (templateName != "aux") {
+ } else {
const bool embedManifest = ((templateName == "app" && project->isActiveConfig("embed_manifest_exe"))
|| (templateName == "lib" && project->isActiveConfig("embed_manifest_dll")
&& !(project->isActiveConfig("plugin") && project->isActiveConfig("no_plugin_manifest"))
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index f219130e18..1fb83d719e 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -29,9 +29,14 @@
#include "msvc_objectmodel.h"
#include "msvc_vcproj.h"
#include "msvc_vcxproj.h"
+
+#include <ioutils.h>
+
#include <qscopedpointer.h>
#include <qfileinfo.h>
+using namespace QMakeInternal;
+
QT_BEGIN_NAMESPACE
static DotNET vsVersionFromString(const char *versionString)
@@ -2173,7 +2178,6 @@ VCConfiguration::VCConfiguration()
compiler.config = this;
linker.config = this;
idl.config = this;
- custom.config = this;
}
// VCFilter ---------------------------------------------------------
@@ -2347,7 +2351,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
tmp_dep_cmd, inFile, out, MakefileGenerator::LocalShell);
if(Project->canExecute(dep_cmd)) {
dep_cmd.prepend(QLatin1String("cd ")
- + Project->escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
+ + IoUtils::shellQuote(Option::fixPathToLocalOS(Option::output_dir, false))
+ QLatin1String(" && "));
if (FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), QT_POPEN_READ)) {
QString indeps;
@@ -2896,7 +2900,6 @@ void VCProjectWriter::write(XmlOutput &xml, const VCConfiguration &tool)
<< attrE(_UseOfMfc, tool.UseOfMfc)
<< attrT(_WholeProgramOptimization, tool.WholeProgramOptimization);
write(xml, tool.compiler);
- write(xml, tool.custom);
if (tool.ConfigurationType == typeStaticLibrary)
write(xml, tool.librarian);
else
diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h
index 35bc3913a8..025112701b 100644
--- a/qmake/generators/win32/msvc_objectmodel.h
+++ b/qmake/generators/win32/msvc_objectmodel.h
@@ -51,7 +51,8 @@ enum DotNET {
NET2010 = 0xa0,
NET2012 = 0xb0,
NET2013 = 0xc0,
- NET2015 = 0xd0
+ NET2015 = 0xd0,
+ NET2017 = 0xe0
};
DotNET vsVersionFromString(const ProString &versionString);
@@ -896,7 +897,6 @@ public:
VCLinkerTool linker;
VCLibrarianTool librarian;
VCManifestTool manifestTool;
- VCCustomBuildTool custom;
VCMIDLTool idl;
VCPostBuildEventTool postBuild;
VCPreBuildEventTool preBuild;
@@ -912,24 +912,15 @@ struct VCFilterFile
{ excludeFromBuild = false; }
VCFilterFile(const QString &filename, bool exclude = false )
{ file = filename; excludeFromBuild = exclude; }
- VCFilterFile(const QString &filename, const QString &additional, bool exclude = false )
- { file = filename; excludeFromBuild = exclude; additionalFile = additional; }
- bool operator==(const VCFilterFile &other){
- return file == other.file
- && additionalFile == other.additionalFile
- && excludeFromBuild == other.excludeFromBuild;
- }
bool excludeFromBuild;
QString file;
- QString additionalFile; // For tools like MOC
};
#ifndef QT_NO_DEBUG_OUTPUT
inline QDebug operator<<(QDebug dbg, const VCFilterFile &p)
{
dbg.nospace() << "VCFilterFile(file(" << p.file
- << ") additionalFile(" << p.additionalFile
<< ") excludeFromBuild(" << p.excludeFromBuild << "))" << endl;
return dbg.space();
}
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 77cb554ec6..a5ee42a449 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -29,15 +29,21 @@
#include "msvc_vcproj.h"
#include "option.h"
#include "xmloutput.h"
+
+#include <ioutils.h>
+
#include <qdir.h>
#include <qdiriterator.h>
#include <qcryptographichash.h>
#include <qhash.h>
#include <quuid.h>
+
#include <stdlib.h>
//#define DEBUG_SOLUTION_GEN
+using namespace QMakeInternal;
+
QT_BEGIN_NAMESPACE
// Filter GUIDs (Do NOT change these!) ------------------------------
const char _GUIDSourceFiles[] = "{4FC737F1-C7A5-4376-A066-2A32D752A2FF}";
@@ -66,6 +72,8 @@ const char _slnHeader120[] = "Microsoft Visual Studio Solution File, Format
"\n# Visual Studio 2013";
const char _slnHeader140[] = "Microsoft Visual Studio Solution File, Format Version 12.00"
"\n# Visual Studio 2015";
+const char _slnHeader141[] = "Microsoft Visual Studio Solution File, Format Version 12.00"
+ "\n# Visual Studio 2017";
// The following UUID _may_ change for later servicepacks...
// If so we need to search through the registry at
// HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.0\Projects
@@ -294,6 +302,8 @@ QString VcprojGenerator::retrievePlatformToolSet() const
return QStringLiteral("v120") + suffix;
case NET2015:
return QStringLiteral("v140") + suffix;
+ case NET2017:
+ return QStringLiteral("v141") + suffix;
default:
return QString();
}
@@ -521,6 +531,9 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
}
switch (vcProject.Configuration.CompilerVersion) {
+ case NET2017:
+ t << _slnHeader141;
+ break;
case NET2015:
t << _slnHeader140;
break;
@@ -843,6 +856,9 @@ void VcprojGenerator::initProject()
// Own elements -----------------------------
vcProject.Name = project->first("QMAKE_ORIG_TARGET").toQString();
switch (vcProject.Configuration.CompilerVersion) {
+ case NET2017:
+ vcProject.Version = "15.00";
+ break;
case NET2015:
vcProject.Version = "14.00";
break;
@@ -1448,7 +1464,7 @@ void VcprojGenerator::initResourceFiles()
dep_cmd = Option::fixPathToLocalOS(dep_cmd, true, false);
if(canExecute(dep_cmd)) {
dep_cmd.prepend(QLatin1String("cd ")
- + escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
+ + IoUtils::shellQuote(Option::fixPathToLocalOS(Option::output_dir, false))
+ QLatin1String(" && "));
if (FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), QT_POPEN_READ)) {
QString indeps;
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index af9fe520f1..48df4ff916 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -568,16 +568,18 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
t << "####### Build rules\n\n";
writeBuildRulesPart(t);
- if(project->isActiveConfig("shared") && !project->values("DLLDESTDIR").isEmpty()) {
- const ProStringList &dlldirs = project->values("DLLDESTDIR");
- for (ProStringList::ConstIterator dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir) {
- t << "\t-$(COPY_FILE) $(DESTDIR_TARGET) "
- << escapeFilePath(Option::fixPathToTargetOS((*dlldir).toQString(), false)) << endl;
+ if (project->first("TEMPLATE") != "aux") {
+ if (project->isActiveConfig("shared") && !project->values("DLLDESTDIR").isEmpty()) {
+ const ProStringList &dlldirs = project->values("DLLDESTDIR");
+ for (ProStringList::ConstIterator dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir) {
+ t << "\t-$(COPY_FILE) $(DESTDIR_TARGET) "
+ << escapeFilePath(Option::fixPathToTargetOS((*dlldir).toQString(), false)) << endl;
+ }
}
- }
- t << endl;
+ t << endl;
- writeRcFilePart(t);
+ writeRcFilePart(t);
+ }
writeMakeQmake(t);
@@ -601,8 +603,10 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS");
for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) {
const ProStringList &inputs = project->values(ProKey(*it + ".input"));
- for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input)
- t << escapeFilePath(*input) << ' ';
+ for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input) {
+ const ProStringList &val = project->values((*input).toKey());
+ t << escapeFilePaths(val).join(' ') << ' ';
+ }
}
}
t << endl << endl;