summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-12-13 09:36:26 +0100
committerLiang Qi <liang.qi@qt.io>2016-12-13 09:39:20 +0100
commit6755ec891a1740110c48895afd53d39e8370704a (patch)
tree982606f3bc582262e4b315a63f55ccb141fff97b /qmake
parent449204f8c0d6679ae0e58dbb8a30b8a86fbdb4ec (diff)
parent00c9ec63a552d040e851b561c11428fabf1a2b08 (diff)
Merge remote-tracking branch 'origin/5.8' into dev
Conflicts: configure qmake/Makefile.unix.macos qmake/Makefile.unix.win32 qmake/generators/win32/msvc_vcproj.cpp src/3rdparty/pcre/qt_attribution.json src/corelib/io/qsettings.cpp src/corelib/kernel/qdeadlinetimer.cpp src/platformsupport/kmsconvenience/qkmsdevice.cpp src/platformsupport/kmsconvenience/qkmsdevice_p.h src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h tests/manual/qstorageinfo/printvolumes.cpp tools/configure/configureapp.cpp Change-Id: Ibaabcc8e965c44926f9fb018466e8b132b8df49e
Diffstat (limited to 'qmake')
-rw-r--r--qmake/Makefile.unix9
-rw-r--r--qmake/Makefile.unix.macos17
-rw-r--r--qmake/Makefile.unix.mingw27
-rw-r--r--qmake/Makefile.unix.unix11
-rw-r--r--qmake/Makefile.unix.win3221
-rw-r--r--qmake/Makefile.win3216
-rw-r--r--qmake/doc/src/qmake-manual.qdoc6
-rw-r--r--qmake/generators/makefile.cpp2
-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
-rw-r--r--qmake/library/qmakeevaluator.cpp13
-rw-r--r--qmake/qmake.pro1
16 files changed, 155 insertions, 50 deletions
diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix
index 425fe62ef6..33ec2508e2 100644
--- a/qmake/Makefile.unix
+++ b/qmake/Makefile.unix
@@ -20,7 +20,7 @@ QOBJS=qtextcodec.o qutfcodec.o qstring.o qstring_compat.o qstringbuilder.o qtext
qvariant.o qvsnprintf.o qlocale.o qlocale_tools.o qlinkedlist.o qnumeric.o \
qcryptographichash.o qxmlstream.o qxmlutils.o qlogging.o qoperatingsystemversion.o \
qjson.o qjsondocument.o qjsonparser.o qjsonarray.o qjsonobject.o qjsonvalue.o \
- $(QTOBJS)
+ $(QTOBJS) $(QTOBJS2)
#all sources, used for the depend target
@@ -92,11 +92,11 @@ DEPEND_SRC = \
$(SOURCE_PATH)/src/corelib/json/qjsonarray.cpp \
$(SOURCE_PATH)/src/corelib/json/qjsonobject.cpp \
$(SOURCE_PATH)/src/corelib/json/qjsonvalue.cpp \
- $(QTSRCS)
+ $(QTSRCS) $(QTSRCS2)
CPPFLAGS = -g $(EXTRA_CPPFLAGS) \
-I$(QMKSRC) -I$(QMKLIBSRC) -I$(QMKSRC)/generators -I$(QMKSRC)/generators/unix -I$(QMKSRC)/generators/win32 \
- -I$(QMKSRC)/generators/mac -I$(QMKSRC)/generators/integrity \
+ -I$(QMKSRC)/generators/mac \
-I$(INC_PATH) -I$(INC_PATH)/QtCore \
-I$(INC_PATH)/QtCore/$(QT_VERSION) -I$(INC_PATH)/QtCore/$(QT_VERSION)/QtCore \
-I$(BUILD_PATH)/src/corelib/global \
@@ -106,7 +106,8 @@ CPPFLAGS = -g $(EXTRA_CPPFLAGS) \
-DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
-DQT_NO_FOREACH
-CXXFLAGS = $(EXTRA_CXXFLAGS) $(CPPFLAGS)
+CXXFLAGS = $(EXTRA_CXXFLAGS) $(CONFIG_CXXFLAGS) $(CPPFLAGS)
+LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS)
first all: $(BUILD_PATH)/bin/qmake$(EXEEXT)
qmake: $(BUILD_PATH)/bin/qmake$(EXEEXT)
diff --git a/qmake/Makefile.unix.macos b/qmake/Makefile.unix.macos
new file mode 100644
index 0000000000..2708d2aab5
--- /dev/null
+++ b/qmake/Makefile.unix.macos
@@ -0,0 +1,17 @@
+COCOA_LFLAGS = -framework Foundation -framework CoreServices
+CARBON_LFLAGS = -framework ApplicationServices
+CARBON_CFLAGS = -fconstant-cfstrings
+
+EXTRA_CXXFLAGS = $(CARBON_CFLAGS)
+EXTRA_LFLAGS = $(COCOA_LFLAGS) $(CARBON_LFLAGS)
+
+QTOBJS2 = \
+ qsettings_mac.o \
+ qcore_mac.o \
+ qoperatingsystemversion_darwin.o \
+ qcore_foundation.o
+QTSRCS2 = \
+ $(SOURCE_PATH)/src/corelib/io/qsettings_mac.cpp \
+ $(SOURCE_PATH)/src/corelib/kernel/qcore_mac.cpp \
+ $(SOURCE_PATH)/src/corelib/global/qoperatingsystemversion_darwin.mm \
+ $(SOURCE_PATH)/src/corelib/kernel/qcore_foundation.mm
diff --git a/qmake/Makefile.unix.mingw b/qmake/Makefile.unix.mingw
new file mode 100644
index 0000000000..2c52c07dca
--- /dev/null
+++ b/qmake/Makefile.unix.mingw
@@ -0,0 +1,27 @@
+# SHELL is the full path of sh.exe, unless
+# 1) it is found in the current directory
+# 2) it is not found at all
+# 3) it is overridden on the command line with an existing file
+# ... otherwise it is always sh.exe. Specifically, SHELL from the
+# environment has no effect.
+#
+# This check will fail if SHELL is explicitly set to a not
+# sh-compatible shell. This is not a problem, because configure.bat
+# will not do that.
+ifeq ($(SHELL), sh.exe)
+ ifeq ($(wildcard $(CURDIR)/sh.exe), )
+ SH = 0
+ else
+ SH = 1
+ endif
+else
+ SH = 1
+endif
+
+ifeq ($(SH), 1)
+ RM_F = rm -f
+ RM_RF = rm -rf
+else
+ RM_F = del /f
+ RM_RF = rmdir /s /q
+endif
diff --git a/qmake/Makefile.unix.unix b/qmake/Makefile.unix.unix
new file mode 100644
index 0000000000..63eba4f5a5
--- /dev/null
+++ b/qmake/Makefile.unix.unix
@@ -0,0 +1,11 @@
+EXEEXT =
+QTOBJS = \
+ qfilesystemengine_unix.o \
+ qfilesystemiterator_unix.o \
+ qfsfileengine_unix.o \
+ qlocale_unix.o
+QTSRCS = \
+ $(SOURCE_PATH)/src/corelib/io/qfilesystemengine_unix.cpp \
+ $(SOURCE_PATH)/src/corelib/io/qfilesystemiterator_unix.cpp \
+ $(SOURCE_PATH)/src/corelib/io/qfsfileengine_unix.cpp \
+ $(SOURCE_PATH)/src/corelib/tools/qlocale_unix.cpp
diff --git a/qmake/Makefile.unix.win32 b/qmake/Makefile.unix.win32
new file mode 100644
index 0000000000..b2d8a0b1af
--- /dev/null
+++ b/qmake/Makefile.unix.win32
@@ -0,0 +1,21 @@
+EXEEXT = .exe
+EXTRA_CXXFLAGS = -DUNICODE
+EXTRA_LFLAGS = -static -s -lole32 -luuid -ladvapi32 -lkernel32
+QTOBJS = \
+ qfilesystemengine_win.o \
+ qfilesystemiterator_win.o \
+ qfsfileengine_win.o \
+ qlocale_win.o \
+ qsettings_win.o \
+ qoperatingsystemversion_win.o \
+ qsystemlibrary.o \
+ registry.o
+QTSRCS = \
+ $(SOURCE_PATH)/src/corelib/global/qoperatingsystemversion_win.cpp \
+ $(SOURCE_PATH)/src/corelib/io/qfilesystemengine_win.cpp \
+ $(SOURCE_PATH)/src/corelib/io/qfilesystemiterator_win.cpp \
+ $(SOURCE_PATH)/src/corelib/io/qfsfileengine_win.cpp \
+ $(SOURCE_PATH)/src/corelib/io/qsettings_win.cpp \
+ $(SOURCE_PATH)/src/corelib/tools/qlocale_win.cpp \
+ $(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp \
+ $(SOURCE_PATH)/tools/shared/windows/registry.cpp
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32
index f023dc9e3f..db8572839e 100644
--- a/qmake/Makefile.win32
+++ b/qmake/Makefile.win32
@@ -23,7 +23,7 @@ CXX = cl
LINKER = link
! if "$(QMAKESPEC)" == "win32-msvc2013"
CFLAGS_EXTRA = /MP /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS $(CFLAGS_CRT)
-! elseif "$(QMAKESPEC)" == "win32-msvc2015" || "$(QMAKESPEC)" == "win32-clang-msvc2015"
+! elseif "$(QMAKESPEC)" == "win32-msvc2015" || "$(QMAKESPEC)" == "win32-msvc2017" || "$(QMAKESPEC)" == "win32-clang-msvc2015"
CFLAGS_EXTRA = /MP /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS /Zc:strictStrings /w44456 /w44457 /w44458 /wd4577 $(CFLAGS_CRT)
! else
! error Unsupported compiler for this Makefile
@@ -38,7 +38,7 @@ PCH_OBJECT = qmake_pch.obj
CFLAGS_BARE = -c -Fo./ -Fdqmake.pdb \
-W3 -nologo -O1 \
$(CFLAGS_EXTRA) \
- -I$(QMKSRC) -I$(QMKSRC)\library -I$(QMKSRC)\generators -I$(QMKSRC)\generators\unix -I$(QMKSRC)\generators\win32 -I$(QMKSRC)\generators\mac -I$(QMKSRC)\generators\integrity \
+ -I$(QMKSRC) -I$(QMKSRC)\library -I$(QMKSRC)\generators -I$(QMKSRC)\generators\unix -I$(QMKSRC)\generators\win32 -I$(QMKSRC)\generators\mac \
-I$(INC_PATH) -I$(INC_PATH)\QtCore -I$(INC_PATH)\QtCore\$(QT_VERSION) -I$(INC_PATH)\QtCore\$(QT_VERSION)\QtCore \
-I$(BUILD_PATH)\src\corelib\global \
-I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC) \
@@ -149,18 +149,9 @@ distclean:: clean
-del $(BUILD_PATH)\bin\qmake.exe
-del Makefile
-.c.obj:
- $(CXX) $(CFLAGS) $<
-
.cpp.obj:
$(CXX) $(CXXFLAGS) $<
-.cc.obj:
- $(CXX) $(CXXFLAGS) $<
-
-.cxx.obj:
- $(CXX) $(CXXFLAGS) $<
-
$(OBJS): $(PCH_OBJECT)
$(QTOBJS): $(PCH_OBJECT)
@@ -176,9 +167,6 @@ qmake_pch.obj:
{$(SOURCE_PATH)\qmake\generators\mac}.cpp{}.obj::
$(CXX) $(CXXFLAGS) $<
-{$(SOURCE_PATH)\qmake\generators\integrity}.cpp{}.obj::
- $(CXX) $(CXXFLAGS) $<
-
{$(SOURCE_PATH)\qmake\generators\unix}.cpp{}.obj::
$(CXX) $(CXXFLAGS) $<
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index aa6c8b35cc..c3c878ebb8 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -2057,6 +2057,12 @@
value of this variable is typically handled by qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
+ \section1 QMAKE_OBJECTIVE_CFLAGS
+
+ Specifies the Objective C/C++ compiler flags for building
+ a project. These flags are used in addition to QMAKE_CFLAGS and
+ QMAKE_CXXFLAGS.
+
\section1 QMAKE_POST_LINK
Specifies the command to execute after linking the \l{TARGET}
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 4450e619b9..1ba2587bd0 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -1839,7 +1839,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
QString dep_cd_cmd;
if (!tmp_dep_cmd.isEmpty()) {
dep_cd_cmd = QLatin1String("cd ")
- + escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
+ + IoUtils::shellQuote(Option::fixPathToLocalOS(Option::output_dir, false))
+ QLatin1String(" && ");
}
const ProStringList &vars = project->values(ProKey(*it + ".variables"));
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;
diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp
index dd10afa023..fd24cf209d 100644
--- a/qmake/library/qmakeevaluator.cpp
+++ b/qmake/library/qmakeevaluator.cpp
@@ -971,6 +971,13 @@ static ProString msvcBinDirToQMakeArch(QString subdir)
subdir = subdir.toLower();
if (subdir == QLatin1String("amd64"))
return ProString("x86_64");
+ // Since 2017 the folder structure from here is HostX64|X86/x64|x86
+ idx = subdir.indexOf(QLatin1Char('\\'));
+ if (idx == -1)
+ return ProString("x86");
+ subdir.remove(0, idx + 1);
+ if (subdir == QLatin1String("x64"))
+ return ProString("x86_64");
return ProString(subdir);
}
@@ -1052,8 +1059,12 @@ void QMakeEvaluator::loadDefaults()
vars[ProKey("QMAKE_HOST.arch")] << archStr;
# if defined(Q_CC_MSVC) // ### bogus condition, but nobody x-builds for msvc with a different qmake
+ // Since VS 2017 we need VCToolsInstallDir instead of VCINSTALLDIR
+ QString vcInstallDir = m_option->getEnv(QLatin1String("VCToolsInstallDir"));
+ if (vcInstallDir.isEmpty())
+ vcInstallDir = m_option->getEnv(QLatin1String("VCINSTALLDIR"));
vars[ProKey("QMAKE_TARGET.arch")] = msvcArchitecture(
- m_option->getEnv(QLatin1String("VCINSTALLDIR")),
+ vcInstallDir,
m_option->getEnv(QLatin1String("PATH")));
# endif
#elif defined(Q_OS_UNIX)
diff --git a/qmake/qmake.pro b/qmake/qmake.pro
index 74cefb07aa..1472aef3e4 100644
--- a/qmake/qmake.pro
+++ b/qmake/qmake.pro
@@ -27,7 +27,6 @@ INCLUDEPATH += . \
generators/unix \
generators/win32 \
generators/mac \
- generators/integrity \
../tools/shared
include(qmake.pri)