From 61e61feb7aeec1af6b14ec433126ad9d895e2030 Mon Sep 17 00:00:00 2001 From: "acacio.egas" Date: Wed, 12 Aug 2015 16:29:27 -0300 Subject: [PATCH] QTBUG-47724: Adding Windows 10 References in Soluciton Change-Id: I035a4be1aff6028d32b2bc228c4278abadf8742d --- qmake/generators/win32/msbuild_objectmodel.cpp | 62 +++++++++++++++++++++++++- qmake/generators/win32/msvc_objectmodel.h | 2 + qmake/generators/win32/msvc_vcproj.cpp | 13 +++++- qmake/generators/win32/msvc_vcproj.h | 1 + 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index aad6e6e..db7c6b1 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -675,6 +675,35 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) << attrTag("Condition", "exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')") << closetag() << closetag(); + + if (tool.SdkVersion == "10.0") { + QStringListIterator extraReferences(tool.ExtraReferences); + while (extraReferences.hasNext()) { + QString tmpRef = extraReferences.next(); + QStringList Reference; + QString nameReference; + QString versionReference; + if (tmpRef.contains(":")) + Reference = tmpRef.split(":"); + else + Reference << tmpRef; + + if (Reference.size()>=1) + nameReference = Reference.first(); + + if (Reference.size()==2) + versionReference = Reference.last(); + else + versionReference = QString(qgetenv("UCRTVERSION")); + + if (!nameReference.isEmpty() && !versionReference.isEmpty()) + xml << tag("Import") + << attrTag("Project", "$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`" + nameReference + ", Version=" + versionReference + "`, $(TargetPlatformIdentifier), $(TargetPlatformVersion), null, $(ExtensionSDKDirectoryRoot), null))\\DesignTime\\CommonConfiguration\\Neutral\\" + nameReference + ".props") + << attrTag("Condition", "exists('$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`" + nameReference + ", Version=" + versionReference + "`, $(TargetPlatformIdentifier), $(TargetPlatformVersion), null, $(ExtensionSDKDirectoryRoot), null))\\DesignTime\\CommonConfiguration\\Neutral\\" + nameReference + ".props')") + << closetag(); + } + } + } // UserMacros @@ -868,7 +897,38 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) } xml << closetag(); } - + + if (tool.SdkVersion == "10.0") { + QStringListIterator extraReferences(tool.ExtraReferences); + xml << tag(_ItemGroup); + while (extraReferences.hasNext()) { + QString tmpRef = extraReferences.next(); + QStringList Reference; + QString nameReference; + QString versionReference; + if (tmpRef.contains(":")) + Reference = tmpRef.split(":"); + else + Reference << tmpRef; + + if (Reference.size()>=1) + nameReference = Reference.first(); + + if (Reference.size()==2) + versionReference = Reference.last(); + else + versionReference = QString(qgetenv("UCRTVERSION")); + + if (!nameReference.isEmpty() && !versionReference.isEmpty()) + { + xml << tag("SDKReference") + << attrTag("Include", QString(nameReference + ", Version=" + versionReference).toLatin1().constData()) + << closetag(); + } + } + xml << closetag(); + } + xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets") << tag("ImportGroup") << attrTag("Label", "ExtensionTargets") diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h index 7092da3..5722c03 100644 --- a/qmake/generators/win32/msvc_objectmodel.h +++ b/qmake/generators/win32/msvc_objectmodel.h @@ -1013,6 +1013,7 @@ public: VCFilter DeploymentFiles; VCFilter DistributionFiles; VCFilterList ExtraCompilersFiles; + QStringList ExtraReferences; bool flat_files; @@ -1146,6 +1147,7 @@ public: // List of all extracompilers QStringList ExtraCompilers; + QStringList ExtraReferences; }; class VCProjectWriter diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 8e08ab2..d5b5e1f 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -293,8 +293,10 @@ bool VcprojGenerator::writeProjectMakefile() mergedProject.SccProjectName = mergedProjects.at(0)->vcProject.SccProjectName; mergedProject.SccLocalPath = mergedProjects.at(0)->vcProject.SccLocalPath; mergedProject.PlatformName = mergedProjects.at(0)->vcProject.PlatformName; - + mergedProject.ExtraReferences = mergedProjects.at(0)->vcProject.ExtraReferences; + XmlOutput xmlOut(t); + projectWriter->write(xmlOut, mergedProject); return true; } else if(project->first("TEMPLATE") == "vcsubdirs") { @@ -976,6 +978,7 @@ void VcprojGenerator::initProject() initResourceFiles(); initDistributionFiles(); initExtraCompilerOutputs(); + initExtraReferences(); // Own elements ----------------------------- vcProject.Name = project->first("QMAKE_ORIG_TARGET").toQString(); @@ -1088,7 +1091,8 @@ void VcprojGenerator::initConfiguration() conf.WinPhone = project->isActiveConfig("winphone"); // Saner defaults conf.compiler.UsePrecompiledHeader = pchNone; - conf.compiler.CompileAsWinRT = _False; + if (!project->values("QMAKE_CXXFLAGS").contains("/ZW")) + conf.compiler.CompileAsWinRT = _False; conf.linker.GenerateWindowsMetadata = _False; } } @@ -1720,6 +1724,11 @@ void VcprojGenerator::initExtraCompilerOutputs() } } +void VcprojGenerator::initExtraReferences() +{ + vcProject.ExtraReferences = project->values("REFERENCES").toQStringList(); +} + // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h index 35dc1e8..734ba23 100644 --- a/qmake/generators/win32/msvc_vcproj.h +++ b/qmake/generators/win32/msvc_vcproj.h @@ -109,6 +109,7 @@ protected: void initDistributionFiles(); void initLexYaccFiles(); void initExtraCompilerOutputs(); + void initExtraReferences(); void writeSubDirs(QTextStream &t); // Called from VCXProj backend QUuid getProjectUUID(const QString &filename=QString()); // Called from VCXProj backend -- 1.9.5.msysgit.1