summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-10-21 13:47:16 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-10-22 22:19:21 +0200
commitd1e950b919615c1ae754e07899f1b45303c17654 (patch)
treef5fd33e3613432c68a5f8eb7903fb7e7a4b501be /qmake
parent1ff6c575ce57c84324e4be4919cac65e09b96025 (diff)
qmake vcxproj generator: write PrimaryOutputExtension value
Second attempt. MSVCPROJ_TARGET contains the resolved target name, including version number and target extension. We're splitting this value into PrimaryOutput and PrimaryOutputExtension. PrimaryOutputExtension is only written if it contains a non-default value. Task-number: QTBUG-26782 Change-Id: I4b828dc5dd47322f653585aee1a5767f0cf8bd48 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Diffstat (limited to 'qmake')
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp12
-rw-r--r--qmake/generators/win32/msvc_objectmodel.h1
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp27
-rw-r--r--qmake/generators/win32/msvc_vcproj.h1
4 files changed, 33 insertions, 8 deletions
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index 6751dc0f6b..fad0465bf9 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -474,7 +474,11 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool)
<< attrTag("Condition", condition)
<< valueTag(tool.Configuration.PrimaryOutput);
}
-
+ if (!tool.Configuration.PrimaryOutputExtension.isEmpty()) {
+ xml<< tag("TargetExt")
+ << attrTag("Condition", condition)
+ << valueTag(tool.Configuration.PrimaryOutputExtension);
+ }
if ( tool.Configuration.linker.IgnoreImportLibrary != unset) {
xml<< tag("IgnoreImportLibrary")
<< attrTag("Condition", condition)
@@ -696,7 +700,11 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool)
<< attrTag("Condition", condition)
<< valueTag(config.PrimaryOutput);
}
-
+ if (!config.PrimaryOutputExtension.isEmpty()) {
+ xml << tag("TargetExt")
+ << attrTag("Condition", condition)
+ << valueTag(config.PrimaryOutputExtension);
+ }
if (config.linker.IgnoreImportLibrary != unset) {
xml << tag("IgnoreImportLibrary")
<< attrTag("Condition", condition)
diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h
index 850f5f0f57..4b70ca3d71 100644
--- a/qmake/generators/win32/msvc_objectmodel.h
+++ b/qmake/generators/win32/msvc_objectmodel.h
@@ -887,6 +887,7 @@ public:
QString ConfigurationName;
QString OutputDirectory;
QString PrimaryOutput;
+ QString PrimaryOutputExtension;
QString ProgramDatabase;
QString PlatformToolSet;
triState RegisterOutput;
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 24421c6c28..9385a50e02 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -405,6 +405,21 @@ QString VcprojGenerator::retrievePlatformToolSet() const
}
}
+bool VcprojGenerator::isStandardSuffix(const QString &suffix) const
+{
+ if (!project->values("QMAKE_APP_FLAG").isEmpty()) {
+ if (suffix.compare("exe", Qt::CaseInsensitive) == 0)
+ return true;
+ } else if (project->isActiveConfig("shared")) {
+ if (suffix.compare("dll", Qt::CaseInsensitive) == 0)
+ return true;
+ } else {
+ if (suffix.compare("lib", Qt::CaseInsensitive) == 0)
+ return true;
+ }
+ return false;
+}
+
ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QString, QString> &projLookup,
QHash<QString, QString> &projGuids,
QHash<VcsolutionDepend *, QStringList> &extraSubdirs,
@@ -993,12 +1008,12 @@ void VcprojGenerator::initConfiguration()
if (conf.CompilerVersion >= NET2010) {
conf.PlatformToolSet = retrievePlatformToolSet();
- // The target name could have been changed.
- conf.PrimaryOutput = project->first("TARGET").toQString();
- if (!conf.PrimaryOutput.isEmpty() && project->first("TEMPLATE") == "vclib"
- && project->isActiveConfig("shared")) {
- conf.PrimaryOutput.append(project->first("TARGET_VERSION_EXT").toQString());
- }
+ const QFileInfo targetInfo = fileInfo(project->first("MSVCPROJ_TARGET").toQString());
+ conf.PrimaryOutput = targetInfo.completeBaseName();
+
+ const QString targetSuffix = targetInfo.suffix();
+ if (!isStandardSuffix(targetSuffix))
+ conf.PrimaryOutputExtension = '.' + targetSuffix;
}
if (conf.CompilerVersion >= NET2012) {
diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h
index d15539d25c..f436b6da20 100644
--- a/qmake/generators/win32/msvc_vcproj.h
+++ b/qmake/generators/win32/msvc_vcproj.h
@@ -137,6 +137,7 @@ private:
const ProStringList &allDependencies = ProStringList());
QUuid increaseUUID(const QUuid &id);
QString retrievePlatformToolSet() const;
+ bool isStandardSuffix(const QString &suffix) const;
friend class VCFilter;
};