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.cpp56
-rw-r--r--qmake/generators/win32/mingw_make.h28
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp2
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.h44
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp11
-rw-r--r--qmake/generators/win32/msvc_nmake.h18
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp2
-rw-r--r--qmake/generators/win32/msvc_objectmodel.h34
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp52
-rw-r--r--qmake/generators/win32/msvc_vcproj.h18
-rw-r--r--qmake/generators/win32/msvc_vcxproj.h2
-rw-r--r--qmake/generators/win32/registry.cpp6
-rw-r--r--qmake/generators/win32/winmakefile.cpp43
-rw-r--r--qmake/generators/win32/winmakefile.h14
14 files changed, 177 insertions, 153 deletions
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
index 6fcfe96380..de7363e51b 100644
--- a/qmake/generators/win32/mingw_make.cpp
+++ b/qmake/generators/win32/mingw_make.cpp
@@ -73,6 +73,19 @@ MingwMakefileGenerator::parseLibFlag(const ProString &flag, ProString *arg)
return MakefileGenerator::parseLibFlag(flag, arg);
}
+bool MingwMakefileGenerator::processPrlFileBase(QString &origFile, const QStringRef &origName,
+ const QStringRef &fixedBase, int slashOff)
+{
+ if (origName.startsWith("lib")) {
+ QString newFixedBase = fixedBase.left(slashOff) + fixedBase.mid(slashOff + 3);
+ if (Win32MakefileGenerator::processPrlFileBase(origFile, origName,
+ QStringRef(&newFixedBase), slashOff)) {
+ return true;
+ }
+ }
+ return Win32MakefileGenerator::processPrlFileBase(origFile, origName, fixedBase, slashOff);
+}
+
bool MingwMakefileGenerator::writeMakefile(QTextStream &t)
{
writeHeader(t);
@@ -118,22 +131,25 @@ QString MingwMakefileGenerator::installRoot() const
return QStringLiteral("$(INSTALL_ROOT:@msyshack@%=%)");
}
-void createLdObjectScriptFile(const QString &fileName, const ProStringList &objList)
+void createLdResponseFile(const QString &fileName, const ProStringList &objList)
{
QString filePath = Option::output_dir + QDir::separator() + fileName;
QFile file(filePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream t(&file);
- t << "INPUT(\n";
for (ProStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) {
QString path = (*it).toQString();
- // ### quoting?
- if (QDir::isRelativePath(path))
- t << "./" << path << endl;
- else
- t << path << endl;
+ // In response files, whitespace and special characters are
+ // escaped with a backslash; backslashes themselves can either
+ // be escaped into double backslashes, or, as this is a list of
+ // path names, converted to forward slashes.
+ path.replace(QLatin1Char('\\'), QLatin1String("/"))
+ .replace(QLatin1Char(' '), QLatin1String("\\ "))
+ .replace(QLatin1Char('\t'), QLatin1String("\\\t"))
+ .replace(QLatin1Char('"'), QLatin1String("\\\""))
+ .replace(QLatin1Char('\''), QLatin1String("\\'"));
+ t << path << endl;
}
- t << ");\n";
t.flush();
file.close();
}
@@ -191,11 +207,9 @@ void MingwMakefileGenerator::init()
return;
}
- project->values("TARGET_PRL").append(project->first("TARGET"));
-
processVars();
- project->values("QMAKE_LIBS") += project->values("RES_FILE");
+ project->values("LIBS") += project->values("RES_FILE");
if (project->isActiveConfig("dll")) {
QString destDir = "";
@@ -271,6 +285,8 @@ void MingwMakefileGenerator::writeLibsPart(QTextStream &t)
t << "LINKER = " << var("QMAKE_LINK") << endl;
t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
t << "LIBS = "
+ << fixLibFlags("LIBS").join(' ') << ' '
+ << fixLibFlags("LIBS_PRIVATE").join(' ') << ' '
<< fixLibFlags("QMAKE_LIBS").join(' ') << ' '
<< fixLibFlags("QMAKE_LIBS_PRIVATE").join(' ') << endl;
}
@@ -296,14 +312,13 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t)
createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS"));
objectsLinkLine = ar_cmd + " -M < " + escapeFilePath(ar_script_file);
} else {
- QString ld_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET");
- if (!var("BUILD_NAME").isEmpty()) {
- ld_script_file += "." + var("BUILD_NAME");
- }
+ QString ld_response_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET");
+ if (!var("BUILD_NAME").isEmpty())
+ ld_response_file += "." + var("BUILD_NAME");
if (!var("MAKEFILE").isEmpty())
- ld_script_file += "." + var("MAKEFILE");
- createLdObjectScriptFile(ld_script_file, project->values("OBJECTS"));
- objectsLinkLine = escapeFilePath(ld_script_file);
+ ld_response_file += "." + var("MAKEFILE");
+ createLdResponseFile(ld_response_file, project->values("OBJECTS"));
+ objectsLinkLine = "@" + escapeFilePath(ld_response_file);
}
Win32MakefileGenerator::writeObjectsPart(t);
}
@@ -312,8 +327,9 @@ void MingwMakefileGenerator::writeBuildRulesPart(QTextStream &t)
{
t << "first: all\n";
t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName()))
- << ' ' << depVar("ALL_DEPS") << " $(DESTDIR_TARGET)\n\n";
- t << "$(DESTDIR_TARGET): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
+ << ' ' << depVar("ALL_DEPS") << ' ' << depVar("DEST_TARGET") << "\n\n";
+ t << depVar("DEST_TARGET") << ": "
+ << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
if (project->first("TEMPLATE") == "aux") {
t << "\n\n";
return;
diff --git a/qmake/generators/win32/mingw_make.h b/qmake/generators/win32/mingw_make.h
index 6f041cfd4a..5da5b24088 100644
--- a/qmake/generators/win32/mingw_make.h
+++ b/qmake/generators/win32/mingw_make.h
@@ -40,25 +40,27 @@ public:
~MingwMakefileGenerator();
protected:
using MakefileGenerator::escapeDependencyPath;
- virtual QString escapeDependencyPath(const QString &path) const;
- virtual ProString fixLibFlag(const ProString &lib);
- virtual QString getManifestFileForRcFile() const;
- bool writeMakefile(QTextStream &);
- void init();
- virtual QString installRoot() const;
+ QString escapeDependencyPath(const QString &path) const override;
+ ProString fixLibFlag(const ProString &lib) override;
+ bool processPrlFileBase(QString &origFile, const QStringRef &origName,
+ const QStringRef &fixedBase, int slashOff) override;
+ QString getManifestFileForRcFile() const override;
+ bool writeMakefile(QTextStream &) override;
+ void init() override;
+ QString installRoot() const override;
private:
void writeMingwParts(QTextStream &);
- void writeIncPart(QTextStream &t);
- void writeLibsPart(QTextStream &t);
- void writeObjectsPart(QTextStream &t);
- void writeBuildRulesPart(QTextStream &t);
- void writeRcFilePart(QTextStream &t);
+ void writeIncPart(QTextStream &t) override;
+ void writeLibsPart(QTextStream &t) override;
+ void writeObjectsPart(QTextStream &t) override;
+ void writeBuildRulesPart(QTextStream &t) override;
+ void writeRcFilePart(QTextStream &t) override;
- QStringList &findDependencies(const QString &file);
+ QStringList &findDependencies(const QString &file) override;
QString preCompHeaderOut;
- virtual LibFlagType parseLibFlag(const ProString &flag, ProString *arg);
+ LibFlagType parseLibFlag(const ProString &flag, ProString *arg) override;
QString objectsLinkLine;
};
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index 082f357d32..ad2976aa01 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -1207,7 +1207,7 @@ static inline QString toString(midlCharOption option)
static inline QString toString(midlErrorCheckOption option)
{
switch (option) {
- case midlAlignNotSet:
+ case midlEnableCustom:
break;
case midlDisableAll:
return "None";
diff --git a/qmake/generators/win32/msbuild_objectmodel.h b/qmake/generators/win32/msbuild_objectmodel.h
index 2e77537916..ce5711f2da 100644
--- a/qmake/generators/win32/msbuild_objectmodel.h
+++ b/qmake/generators/win32/msbuild_objectmodel.h
@@ -72,7 +72,7 @@ public:
return Uindex;
}
- void addElement(const QString &filepath, const VCFilterFile &allInfo){
+ void addElement(const QString &filepath, const VCFilterFile &allInfo) override {
QString newNodeName(filepath);
int index = pathIndex(filepath);
@@ -89,7 +89,7 @@ public:
n->addElement(filepath.mid(index+1), allInfo);
}
- void removeElements() {
+ void removeElements() override {
ChildrenMap::ConstIterator it = children.constBegin();
ChildrenMap::ConstIterator end = children.constEnd();
for( ; it != end; it++) {
@@ -100,8 +100,8 @@ public:
}
void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &tool,
- const QString &filter);
- bool hasElements() {
+ const QString &filter) override;
+ bool hasElements() override {
return children.size() != 0;
}
};
@@ -124,7 +124,7 @@ public:
return Uindex;
}
- void addElement(const QString &filepath, const VCFilterFile &allInfo){
+ void addElement(const QString &filepath, const VCFilterFile &allInfo) override {
QString newKey(filepath);
int index = pathIndex(filepath);
@@ -136,13 +136,13 @@ public:
children.insert(newKey + "\0" + allInfo.file, allInfo);
}
- void removeElements() {
+ void removeElements() override {
children.clear();
}
void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &proj,
- const QString &filter);
- bool hasElements() {
+ const QString &filter) override;
+ bool hasElements() override {
return children.size() != 0;
}
};
@@ -150,20 +150,20 @@ public:
class VCXProjectWriter : public VCProjectWriter
{
public:
- void write(XmlOutput &, VCProjectSingleConfig &);
- void write(XmlOutput &, VCProject &);
-
- void write(XmlOutput &, const VCCLCompilerTool &);
- void write(XmlOutput &, const VCLinkerTool &);
- void write(XmlOutput &, const VCMIDLTool &);
- void write(XmlOutput &, const VCCustomBuildTool &);
- void write(XmlOutput &, const VCLibrarianTool &);
- void write(XmlOutput &, const VCResourceCompilerTool &);
- void write(XmlOutput &, const VCEventTool &);
- void write(XmlOutput &, const VCDeploymentTool &);
- void write(XmlOutput &, const VCWinDeployQtTool &);
- void write(XmlOutput &, const VCConfiguration &);
- void write(XmlOutput &, VCFilter &);
+ void write(XmlOutput &, VCProjectSingleConfig &) override;
+ void write(XmlOutput &, VCProject &) override;
+
+ void write(XmlOutput &, const VCCLCompilerTool &) override;
+ void write(XmlOutput &, const VCLinkerTool &) override;
+ void write(XmlOutput &, const VCMIDLTool &) override;
+ void write(XmlOutput &, const VCCustomBuildTool &) override;
+ void write(XmlOutput &, const VCLibrarianTool &) override;
+ void write(XmlOutput &, const VCResourceCompilerTool &) override;
+ void write(XmlOutput &, const VCEventTool &) override;
+ void write(XmlOutput &, const VCDeploymentTool &) override;
+ void write(XmlOutput &, const VCWinDeployQtTool &) override;
+ void write(XmlOutput &, const VCConfiguration &) override;
+ void write(XmlOutput &, VCFilter &) override;
private:
struct OutputFilterData
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index 92b4eb5054..f2cd7c633b 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -383,7 +383,7 @@ void NmakeMakefileGenerator::init()
processVars();
- project->values("QMAKE_LIBS") += project->values("RES_FILE");
+ project->values("LIBS") += project->values("RES_FILE");
if (!project->values("DEF_FILE").isEmpty()) {
QString defFileName = fileFixify(project->first("DEF_FILE").toQString());
@@ -499,7 +499,7 @@ void NmakeMakefileGenerator::writeImplicitRulesPart(QTextStream &t)
QSet<QString> source_directories;
if (useInferenceRules) {
source_directories.insert(".");
- static const char * const directories[] = { "UI_SOURCES_DIR", "UI_DIR", 0 };
+ static const char * const directories[] = { "UI_SOURCES_DIR", "UI_DIR", nullptr };
for (int y = 0; directories[y]; y++) {
QString dirTemp = project->first(directories[y]).toQString();
if (dirTemp.endsWith("\\"))
@@ -507,7 +507,7 @@ void NmakeMakefileGenerator::writeImplicitRulesPart(QTextStream &t)
if(!dirTemp.isEmpty())
source_directories.insert(dirTemp);
}
- static const char * const srcs[] = { "SOURCES", "GENERATED_SOURCES", 0 };
+ static const char * const srcs[] = { "SOURCES", "GENERATED_SOURCES", nullptr };
for (int x = 0; srcs[x]; x++) {
const ProStringList &l = project->values(srcs[x]);
for (ProStringList::ConstIterator sit = l.begin(); sit != l.end(); ++sit) {
@@ -584,8 +584,9 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
t << "first: all\n";
t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName()))
- << ' ' << depVar("ALL_DEPS") << " $(DESTDIR_TARGET)\n\n";
- t << "$(DESTDIR_TARGET): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
+ << ' ' << depVar("ALL_DEPS") << ' ' << depVar("DEST_TARGET") << "\n\n";
+ t << depVar("DEST_TARGET") << ": "
+ << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
if (templateName == "aux") {
t << "\n\n";
return;
diff --git a/qmake/generators/win32/msvc_nmake.h b/qmake/generators/win32/msvc_nmake.h
index 67b609d0a6..67a56c7813 100644
--- a/qmake/generators/win32/msvc_nmake.h
+++ b/qmake/generators/win32/msvc_nmake.h
@@ -36,21 +36,21 @@ QT_BEGIN_NAMESPACE
class NmakeMakefileGenerator : public Win32MakefileGenerator
{
void writeNmakeParts(QTextStream &);
- bool writeMakefile(QTextStream &);
- void writeImplicitRulesPart(QTextStream &t);
- void writeBuildRulesPart(QTextStream &t);
+ bool writeMakefile(QTextStream &) override;
+ void writeImplicitRulesPart(QTextStream &t) override;
+ void writeBuildRulesPart(QTextStream &t) override;
void writeLinkCommand(QTextStream &t, const QString &extraFlags = QString(), const QString &extraInlineFileContent = QString());
void writeResponseFileFiles(QTextStream &t, const ProStringList &files);
int msvcVersion() const;
- void init();
+ void init() override;
static QStringList sourceFilesForImplicitRulesFilter();
protected:
- virtual void writeSubMakeCall(QTextStream &t, const QString &callPrefix,
- const QString &makeArguments);
- virtual QString defaultInstall(const QString &t);
- virtual QStringList &findDependencies(const QString &file);
- QString var(const ProKey &value) const;
+ void writeSubMakeCall(QTextStream &t, const QString &callPrefix,
+ const QString &makeArguments) override;
+ QString defaultInstall(const QString &t) override;
+ QStringList &findDependencies(const QString &file) override;
+ QString var(const ProKey &value) const override;
QString precompH, precompObj, precompPch;
QString precompObjC, precompPchC;
bool usePCH, usePCHC;
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index 452a215024..4f0cee65e1 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -2183,7 +2183,7 @@ VCConfiguration::VCConfiguration()
// VCFilter ---------------------------------------------------------
VCFilter::VCFilter()
: ParseFiles(unset),
- Config(0)
+ Config(nullptr)
{
useCustomBuildTool = false;
useCompilerTool = false;
diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h
index 10d44970ff..9d1a170489 100644
--- a/qmake/generators/win32/msvc_objectmodel.h
+++ b/qmake/generators/win32/msvc_objectmodel.h
@@ -484,7 +484,7 @@ public:
// Functions
VCCLCompilerTool();
- bool parseOption(const char* option);
+ bool parseOption(const char* option) override;
// Variables
QStringList AdditionalIncludeDirectories;
@@ -581,7 +581,7 @@ public:
// Functions
VCLinkerTool();
- bool parseOption(const char* option);
+ bool parseOption(const char* option) override;
// Variables
QStringList AdditionalDependencies;
@@ -676,7 +676,7 @@ class VCManifestTool : public VCToolBase
public:
VCManifestTool();
- bool parseOption(const char* option);
+ bool parseOption(const char* option) override;
triState EmbedManifest;
};
@@ -687,7 +687,7 @@ public:
// Functions
VCMIDLTool();
- bool parseOption(const char* option);
+ bool parseOption(const char* option) override;
// Variables
QStringList AdditionalIncludeDirectories;
@@ -741,7 +741,7 @@ public:
// Functions
VCLibrarianTool();
- bool parseOption(const char*){ return false; }
+ bool parseOption(const char*) override { return false; }
// Variables
QStringList AdditionalDependencies;
@@ -762,7 +762,7 @@ public:
// Functions
VCCustomBuildTool();
- bool parseOption(const char*){ return false; }
+ bool parseOption(const char*) override { return false; }
// Variables
QStringList AdditionalDependencies;
@@ -781,7 +781,7 @@ public:
// Functions
VCResourceCompilerTool();
- bool parseOption(const char*){ return false; }
+ bool parseOption(const char*) override { return false; }
// Variables
QStringList AdditionalIncludeDirectories;
@@ -815,7 +815,7 @@ protected:
// Functions
VCEventTool(const QString &eventName);
- bool parseOption(const char*){ return false; }
+ bool parseOption(const char*) override { return false; }
public:
// Variables
@@ -851,7 +851,7 @@ public:
VCWinDeployQtTool() {}
protected:
- bool parseOption(const char *) { return false; }
+ bool parseOption(const char *) override { return false; }
public:
// Variables
@@ -1037,7 +1037,7 @@ public:
return Uindex;
}
- void addElement(const QString &filepath, const VCFilterFile &allInfo){
+ void addElement(const QString &filepath, const VCFilterFile &allInfo) override {
QString newNodeName(filepath);
int index = pathIndex(filepath);
@@ -1054,7 +1054,7 @@ public:
n->addElement(filepath.mid(index+1), allInfo);
}
- void removeElements() {
+ void removeElements() override {
ChildrenMap::ConstIterator it = children.constBegin();
ChildrenMap::ConstIterator end = children.constEnd();
for( ; it != end; it++) {
@@ -1064,8 +1064,8 @@ public:
children.clear();
}
- void generateXML(XmlOutput &xml, const QString &tagName, VCProject &tool, const QString &filter);
- bool hasElements() {
+ void generateXML(XmlOutput &xml, const QString &tagName, VCProject &tool, const QString &filter) override;
+ bool hasElements() override {
return children.size() != 0;
}
};
@@ -1088,7 +1088,7 @@ public:
return Uindex;
}
- void addElement(const QString &filepath, const VCFilterFile &allInfo){
+ void addElement(const QString &filepath, const VCFilterFile &allInfo) override {
QString newKey(filepath);
int index = pathIndex(filepath);
@@ -1100,12 +1100,12 @@ public:
children.insert(newKey + "\0" + allInfo.file, allInfo);
}
- void removeElements() {
+ void removeElements() override {
children.clear();
}
- void generateXML(XmlOutput &xml, const QString &tagName, VCProject &proj, const QString &filter);
- bool hasElements() {
+ void generateXML(XmlOutput &xml, const QString &tagName, VCProject &proj, const QString &filter) override;
+ bool hasElements() override {
return children.size() != 0;
}
};
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 24d1657552..f7837fc1b4 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -112,7 +112,7 @@ VcprojGenerator::VcprojGenerator()
: Win32MakefileGenerator(),
is64Bit(false),
customBuildToolFilterFileSuffix(QStringLiteral(".cbt")),
- projectWriter(0)
+ projectWriter(nullptr)
{
}
@@ -208,16 +208,6 @@ struct VcsolutionDepend {
QStringList dependencies;
};
-/* Disable optimization in getProjectUUID() due to a compiler
- * bug in MSVC 2010 that causes ASSERT: "&other != this" in the QString
- * copy constructor for non-empty file names at:
- * filename.isEmpty()?project->first("QMAKE_MAKEFILE"):filename */
-
-#ifdef Q_CC_MSVC
-# pragma optimize( "g", off )
-# pragma warning ( disable : 4748 )
-#endif
-
QUuid VcprojGenerator::getProjectUUID(const QString &filename)
{
bool validUUID = true;
@@ -249,10 +239,6 @@ QUuid VcprojGenerator::getProjectUUID(const QString &filename)
return uuid;
}
-#ifdef Q_CC_MSVC
-# pragma optimize( "g", on )
-#endif
-
QUuid VcprojGenerator::increaseUUID(const QUuid &id)
{
QUuid result(id);
@@ -471,9 +457,8 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
newDep->dependencies << "idc.exe";
// Add all unknown libs to the deps
- QStringList where = QStringList() << "QMAKE_LIBS" << "QMAKE_LIBS_PRIVATE";
- if (!tmp_proj.isEmpty("QMAKE_INTERNAL_PRL_LIBS"))
- where = tmp_proj.values("QMAKE_INTERNAL_PRL_LIBS").toQStringList();
+ QStringList where = QStringList() << "LIBS" << "LIBS_PRIVATE"
+ << "QMAKE_LIBS" << "QMAKE_LIBS_PRIVATE";
for (QStringList::ConstIterator wit = where.begin();
wit != where.end(); ++wit) {
const ProStringList &l = tmp_proj.values(ProKey(*wit));
@@ -764,7 +749,7 @@ void VcprojGenerator::init()
projectTarget = Application;
} else if(project->first("TEMPLATE") == "vclib") {
if(project->isActiveConfig("staticlib")) {
- project->values("QMAKE_LIBS") += project->values("RES_FILE");
+ project->values("LIBS") += project->values("RES_FILE");
projectTarget = StaticLib;
} else
projectTarget = SharedLib;
@@ -1100,7 +1085,8 @@ void VcprojGenerator::initLinkerTool()
if (!project->values("DEF_FILE").isEmpty())
conf.linker.ModuleDefinitionFile = project->first("DEF_FILE").toQString();
- static const char * const lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 };
+ static const char * const lflags[] = { "LIBS", "LIBS_PRIVATE",
+ "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", nullptr };
for (int i = 0; lflags[i]; i++) {
const auto libs = fixLibFlags(lflags[i]);
for (const ProString &lib : libs) {
@@ -1195,7 +1181,8 @@ void VcprojGenerator::initDeploymentTool()
if (!dllPaths.isEmpty() &&
!(conf.WinRT && project->first("MSVC_VER").toQString() == "14.0")) {
// FIXME: This code should actually resolve the libraries from all Qt modules.
- ProStringList arg = project->values("QMAKE_LIBS") + project->values("QMAKE_LIBS_PRIVATE");
+ ProStringList arg = project->values("LIBS") + project->values("LIBS_PRIVATE")
+ + project->values("QMAKE_LIBS") + project->values("QMAKE_LIBS_PRIVATE");
bool qpaPluginDeployed = false;
for (ProStringList::ConstIterator it = arg.constBegin(); it != arg.constEnd(); ++it) {
QString dllName = (*it).toQString();
@@ -1617,20 +1604,15 @@ QString VcprojGenerator::replaceExtraCompilerVariables(
bool VcprojGenerator::openOutput(QFile &file, const QString &/*build*/) const
{
- QString outdir;
- if(!file.fileName().isEmpty()) {
- QFileInfo fi(fileInfo(file.fileName()));
- if(fi.isDir())
- outdir = file.fileName() + QDir::separator();
- }
- if(!outdir.isEmpty() || file.fileName().isEmpty()) {
- ProString ext = project->first("VCPROJ_EXTENSION");
- if(project->first("TEMPLATE") == "vcsubdirs")
- ext = project->first("VCSOLUTION_EXTENSION");
- ProString outputName = project->first("TARGET");
- if (!project->first("MAKEFILE").isEmpty())
- outputName = project->first("MAKEFILE");
- file.setFileName(outdir + outputName + ext);
+ ProString fileName = file.fileName();
+ ProString extension = project->first("TEMPLATE") == "vcsubdirs"
+ ? project->first("VCSOLUTION_EXTENSION") : project->first("VCPROJ_EXTENSION");
+ if (!fileName.endsWith(extension)) {
+ if (fileName.isEmpty()) {
+ fileName = !project->first("MAKEFILE").isEmpty()
+ ? project->first("MAKEFILE") : project->first("TARGET");
+ }
+ file.setFileName(fileName + extension);
}
return Win32MakefileGenerator::openOutput(file, QString());
}
diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h
index 4882296b46..6af5ec7007 100644
--- a/qmake/generators/win32/msvc_vcproj.h
+++ b/qmake/generators/win32/msvc_vcproj.h
@@ -47,10 +47,10 @@ class VcprojGenerator : public Win32MakefileGenerator
bool is64Bit;
bool writeVcprojParts(QTextStream &);
- bool writeMakefile(QTextStream &);
- bool writeProjectMakefile();
+ bool writeMakefile(QTextStream &) override;
+ bool writeProjectMakefile() override;
- void init();
+ void init() override;
public:
VcprojGenerator();
@@ -70,14 +70,14 @@ public:
protected:
virtual VCProjectWriter *createProjectWriter();
- virtual bool doDepends() const { return false; } //never necesary
+ bool doDepends() const override { return false; } // Never necessary
using Win32MakefileGenerator::replaceExtraCompilerVariables;
- virtual QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &, ReplaceFor);
- virtual bool supportsMetaBuild() { return true; }
- virtual bool supportsMergedBuilds() { return true; }
- virtual bool mergeBuildProject(MakefileGenerator *other);
+ QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &, ReplaceFor) override;
+ bool supportsMetaBuild() override { return true; }
+ bool supportsMergedBuilds() override { return true; }
+ bool mergeBuildProject(MakefileGenerator *other) override;
- virtual bool openOutput(QFile &file, const QString &build) const;
+ bool openOutput(QFile &file, const QString &build) const override;
virtual void initProject();
void initConfiguration();
diff --git a/qmake/generators/win32/msvc_vcxproj.h b/qmake/generators/win32/msvc_vcxproj.h
index 8f68348693..7e02b6c32f 100644
--- a/qmake/generators/win32/msvc_vcxproj.h
+++ b/qmake/generators/win32/msvc_vcxproj.h
@@ -39,7 +39,7 @@ public:
VcxprojGenerator();
protected:
- virtual VCProjectWriter *createProjectWriter();
+ VCProjectWriter *createProjectWriter() override;
};
QT_END_NAMESPACE
diff --git a/qmake/generators/win32/registry.cpp b/qmake/generators/win32/registry.cpp
index 7320cb0551..3391ab9512 100644
--- a/qmake/generators/win32/registry.cpp
+++ b/qmake/generators/win32/registry.cpp
@@ -77,7 +77,7 @@ QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey, unsigned l
QString rSubkeyName = keyName(rSubkey);
QString rSubkeyPath = keyPath(rSubkey);
- HKEY handle = 0;
+ HKEY handle = nullptr;
LONG res = RegOpenKeyEx(parentHandle, (wchar_t*)rSubkeyPath.utf16(), 0,
KEY_READ | options, &handle);
@@ -87,7 +87,7 @@ QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey, unsigned l
// get the size and type of the value
DWORD dataType;
DWORD dataSize;
- res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, &dataType, 0, &dataSize);
+ res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), nullptr, &dataType, nullptr, &dataSize);
if (res != ERROR_SUCCESS) {
RegCloseKey(handle);
return QString();
@@ -95,7 +95,7 @@ QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey, unsigned l
// get the value
QByteArray data(dataSize, 0);
- res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, 0,
+ res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), nullptr, nullptr,
reinterpret_cast<unsigned char*>(data.data()), &dataSize);
if (res != ERROR_SUCCESS) {
RegCloseKey(handle);
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index bca27b7044..e0d03ccc1c 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -84,7 +84,8 @@ Win32MakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags)
if (impexts.isEmpty())
impexts = project->values("QMAKE_EXTENSION_STATICLIB");
QList<QMakeLocalFileName> dirs;
- static const char * const lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 };
+ static const char * const lflags[] = { "LIBS", "LIBS_PRIVATE",
+ "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", nullptr };
for (int i = 0; lflags[i]; i++) {
ProStringList &l = project->values(lflags[i]);
for (ProStringList::Iterator it = l.begin(); it != l.end();) {
@@ -106,7 +107,7 @@ Win32MakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags)
for (QList<QMakeLocalFileName>::Iterator dir_it = dirs.begin();
dir_it != dirs.end(); ++dir_it) {
QString cand = (*dir_it).real() + Option::dir_sep + lib;
- if (linkPrl && processPrlFile(cand)) {
+ if (linkPrl && processPrlFile(cand, true)) {
(*it) = cand;
goto found;
}
@@ -124,13 +125,13 @@ Win32MakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags)
} else if (linkPrl && type == LibFlagFile) {
QString lib = opt.toQString();
if (fileInfo(lib).isAbsolute()) {
- if (processPrlFile(lib))
+ if (processPrlFile(lib, false))
(*it) = lib;
} else {
for (QList<QMakeLocalFileName>::Iterator dir_it = dirs.begin();
dir_it != dirs.end(); ++dir_it) {
QString cand = (*dir_it).real() + Option::dir_sep + lib;
- if (processPrlFile(cand)) {
+ if (processPrlFile(cand, false)) {
(*it) = cand;
break;
}
@@ -163,12 +164,30 @@ Win32MakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags)
return true;
}
+bool Win32MakefileGenerator::processPrlFileBase(QString &origFile, const QStringRef &origName,
+ const QStringRef &fixedBase, int slashOff)
+{
+ if (MakefileGenerator::processPrlFileBase(origFile, origName, fixedBase, slashOff))
+ return true;
+ for (int off = fixedBase.length(); off > slashOff; off--) {
+ if (!fixedBase.at(off - 1).isDigit()) {
+ if (off != fixedBase.length()) {
+ return MakefileGenerator::processPrlFileBase(
+ origFile, origName, fixedBase.left(off), slashOff);
+ }
+ break;
+ }
+ }
+ return false;
+}
+
void Win32MakefileGenerator::processVars()
{
if (project->first("TEMPLATE").endsWith("aux"))
return;
- project->values("QMAKE_ORIG_TARGET") = project->values("TARGET");
+ project->values("PRL_TARGET") =
+ project->values("QMAKE_ORIG_TARGET") = project->values("TARGET");
if (project->isEmpty("QMAKE_PROJECT_NAME"))
project->values("QMAKE_PROJECT_NAME") = project->values("QMAKE_ORIG_TARGET");
else if (project->first("TEMPLATE").startsWith("vc"))
@@ -207,8 +226,8 @@ void Win32MakefileGenerator::processVars()
libs << QLatin1String("-L") + lib;
}
}
- project->values("QMAKE_LIBS") += libs + project->values("LIBS");
- project->values("QMAKE_LIBS_PRIVATE") += project->values("LIBS_PRIVATE");
+ ProStringList &qmklibs = project->values("LIBS");
+ qmklibs = libs + qmklibs;
if (project->values("TEMPLATE").contains("app")) {
project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_APP");
@@ -422,7 +441,7 @@ void Win32MakefileGenerator::writeCleanParts(QTextStream &t)
{
t << "clean: compiler_clean " << depVar("CLEAN_DEPS");
{
- const char *clean_targets[] = { "OBJECTS", "QMAKE_CLEAN", "CLEAN_FILES", 0 };
+ const char *clean_targets[] = { "OBJECTS", "QMAKE_CLEAN", "CLEAN_FILES", nullptr };
for(int i = 0; clean_targets[i]; ++i) {
const ProStringList &list = project->values(clean_targets[i]);
const QString del_statement("-$(DEL_FILE)");
@@ -451,7 +470,7 @@ void Win32MakefileGenerator::writeCleanParts(QTextStream &t)
t << "distclean: clean " << depVar("DISTCLEAN_DEPS");
{
- const char *clean_targets[] = { "QMAKE_DISTCLEAN", 0 };
+ const char *clean_targets[] = { "QMAKE_DISTCLEAN", nullptr };
for(int i = 0; clean_targets[i]; ++i) {
const ProStringList &list = project->values(clean_targets[i]);
const QString del_statement("-$(DEL_FILE)");
@@ -563,7 +582,7 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
t << "DIST = " << fileVarList("DISTFILES") << ' '
<< fileVarList("HEADERS") << ' ' << fileVarList("SOURCES") << endl;
- t << "QMAKE_TARGET = " << fileVar("QMAKE_ORIG_TARGET") << endl;
+ t << "QMAKE_TARGET = " << fileVar("QMAKE_ORIG_TARGET") << endl; // unused
// The comment is important to maintain variable compatibility with Unix
// Makefiles, while not interpreting a trailing-slash as a linebreak
t << "DESTDIR = " << escapeFilePath(destDir) << " #avoid trailing-slash linebreak\n";
@@ -633,7 +652,9 @@ void Win32MakefileGenerator::writeLibsPart(QTextStream &t)
} else {
t << "LINKER = " << var("QMAKE_LINK") << endl;
t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
- t << "LIBS = " << fixLibFlags("QMAKE_LIBS").join(' ') << ' '
+ t << "LIBS = " << fixLibFlags("LIBS").join(' ') << ' '
+ << fixLibFlags("LIBS_PRIVATE").join(' ') << ' '
+ << fixLibFlags("QMAKE_LIBS").join(' ') << ' '
<< fixLibFlags("QMAKE_LIBS_PRIVATE").join(' ') << endl;
}
}
diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h
index b85a6b67df..4416951a09 100644
--- a/qmake/generators/win32/winmakefile.h
+++ b/qmake/generators/win32/winmakefile.h
@@ -39,7 +39,7 @@ public:
Win32MakefileGenerator();
~Win32MakefileGenerator();
protected:
- virtual QString defaultInstall(const QString &);
+ QString defaultInstall(const QString &) override;
virtual void writeCleanParts(QTextStream &t);
virtual void writeStandardParts(QTextStream &t);
virtual void writeIncPart(QTextStream &t);
@@ -48,16 +48,18 @@ protected:
virtual void writeImplicitRulesPart(QTextStream &t);
virtual void writeBuildRulesPart(QTextStream &);
using MakefileGenerator::escapeFilePath;
- virtual QString escapeFilePath(const QString &path) const;
+ QString escapeFilePath(const QString &path) const override;
using MakefileGenerator::escapeDependencyPath;
- virtual QString escapeDependencyPath(const QString &path) const;
+ QString escapeDependencyPath(const QString &path) const override;
virtual void writeRcFilePart(QTextStream &t);
- virtual bool findLibraries(bool linkPrl, bool mergeLflags);
+ bool findLibraries(bool linkPrl, bool mergeLflags) override;
- virtual LibFlagType parseLibFlag(const ProString &flag, ProString *arg);
- virtual ProString fixLibFlag(const ProString &lib);
+ LibFlagType parseLibFlag(const ProString &flag, ProString *arg) override;
+ ProString fixLibFlag(const ProString &lib) override;
+ bool processPrlFileBase(QString &origFile, const QStringRef &origName,
+ const QStringRef &fixedBase, int slashOff) override;
void processVars();
void fixTargetExt();