diff options
author | Joerg Bornemann <joerg.bornemann@nokia.com> | 2012-08-07 15:07:50 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-08 11:15:24 (GMT) |
commit | 7de5ab859f75bb4e3ed9b90a37823d5eef91fc2a (patch) | |
tree | b4d5ce1f3a0bfca135474a85a0abba0104f5f966 | |
parent | 9338a26614ce6a50a6c1d30e40dfaceacdfd4912 (diff) | |
download | Qt-7de5ab859f75bb4e3ed9b90a37823d5eef91fc2a.zip Qt-7de5ab859f75bb4e3ed9b90a37823d5eef91fc2a.tar.gz Qt-7de5ab859f75bb4e3ed9b90a37823d5eef91fc2a.tar.bz2 |
qmake: un-copy-and-pastify vcxproj generator a bit
Reusing already built strings improves readability and performance.
Cherry-picked from qt5/qtbase commit
b4ae57c881455d791f4587978423c47b046a9a4e
Change-Id: I62554ffb9100af47ffb4978d51444a4cbbea7572
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
-rw-r--r-- | qmake/generators/win32/msbuild_objectmodel.cpp | 129 | ||||
-rw-r--r-- | qmake/generators/win32/msbuild_objectmodel.h | 1 |
2 files changed, 70 insertions, 60 deletions
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index a732950..c8d6812 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -413,6 +413,7 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool) xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props"); write(xml, tool.Configuration); + const QString condition = generateCondition(tool.Configuration); xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props"); @@ -423,7 +424,7 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool) // PropertySheets xml << tag("ImportGroup") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << attrTag("Label", "PropertySheets"); xml << tag("Import") @@ -432,7 +433,6 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool) << closetag() << closetag(); - // UserMacros xml << tag("PropertyGroup") << attrTag("Label", "UserMacros") @@ -442,57 +442,57 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool) if ( !tool.Configuration.OutputDirectory.isEmpty() ) { xml<< tag("OutDir") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTag(tool.Configuration.OutputDirectory); } if ( !tool.Configuration.IntermediateDirectory.isEmpty() ) { xml<< tag("IntDir") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTag(tool.Configuration.IntermediateDirectory); } if ( !tool.Configuration.PrimaryOutput.isEmpty() ) { xml<< tag("TargetName") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTag(tool.Configuration.PrimaryOutput); } if ( tool.Configuration.linker.IgnoreImportLibrary != unset) { xml<< tag("IgnoreImportLibrary") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTagT(tool.Configuration.linker.IgnoreImportLibrary); } if ( tool.Configuration.linker.LinkIncremental != linkIncrementalDefault) { const triState ts = (tool.Configuration.linker.LinkIncremental == linkIncrementalYes ? _True : _False); xml<< tag("LinkIncremental") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTagT(ts); } if ( tool.Configuration.preBuild.ExcludedFromBuild != unset ) { xml<< tag("PreBuildEventUseInBuild") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTagT(!tool.Configuration.preBuild.ExcludedFromBuild); } if ( tool.Configuration.preLink.ExcludedFromBuild != unset ) { xml<< tag("PreLinkEventUseInBuild") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTagT(!tool.Configuration.preLink.ExcludedFromBuild); } if ( tool.Configuration.postBuild.ExcludedFromBuild != unset ) { xml<< tag("PostBuildEventUseInBuild") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)) + << attrTag("Condition", condition) << valueTagT(!tool.Configuration.postBuild.ExcludedFromBuild); } xml << closetag(); xml << tag("ItemDefinitionGroup") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name)); + << attrTag("Condition", condition); // ClCompile write(xml, tool.Configuration.compiler); @@ -615,7 +615,7 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) // PropertySheets for (int i = 0; i < tool.SingleProjects.count(); ++i) { xml << tag("ImportGroup") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) + << attrTag("Condition", generateCondition(tool.SingleProjects.at(i).Configuration)) << attrTag("Label", "PropertySheets"); xml << tag("Import") @@ -632,93 +632,97 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) xml << tag("PropertyGroup"); for (int i = 0; i < tool.SingleProjects.count(); ++i) { + const VCConfiguration &config = tool.SingleProjects.at(i).Configuration; + const QString condition = generateCondition(config); - if ( !tool.SingleProjects.at(i).Configuration.OutputDirectory.isEmpty() ) { + if (!config.OutputDirectory.isEmpty()) { xml << tag("OutDir") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) - << valueTag(tool.SingleProjects.at(i).Configuration.OutputDirectory); + << attrTag("Condition", condition) + << valueTag(config.OutputDirectory); } - if ( !tool.SingleProjects.at(i).Configuration.IntermediateDirectory.isEmpty() ) { + if (!config.IntermediateDirectory.isEmpty()) { xml << tag("IntDir") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) - << valueTag(tool.SingleProjects.at(i).Configuration.IntermediateDirectory); + << attrTag("Condition", condition) + << valueTag(config.IntermediateDirectory); } - if ( !tool.SingleProjects.at(i).Configuration.PrimaryOutput.isEmpty() ) { + if (!config.PrimaryOutput.isEmpty()) { xml << tag("TargetName") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) - << valueTag(tool.SingleProjects.at(i).Configuration.PrimaryOutput); + << attrTag("Condition", condition) + << valueTag(config.PrimaryOutput); } - if ( tool.SingleProjects.at(i).Configuration.linker.IgnoreImportLibrary != unset) { + if (config.linker.IgnoreImportLibrary != unset) { xml << tag("IgnoreImportLibrary") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) - << valueTagT(tool.SingleProjects.at(i).Configuration.linker.IgnoreImportLibrary); + << attrTag("Condition", condition) + << valueTagT(config.linker.IgnoreImportLibrary); } - if ( tool.SingleProjects.at(i).Configuration.linker.LinkIncremental != linkIncrementalDefault) { - const triState ts = (tool.SingleProjects.at(i).Configuration.linker.LinkIncremental == linkIncrementalYes ? _True : _False); + if (config.linker.LinkIncremental != linkIncrementalDefault) { + const triState ts = (config.linker.LinkIncremental == linkIncrementalYes ? _True : _False); xml << tag("LinkIncremental") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) + << attrTag("Condition", condition) << valueTagT(ts); } - const triState generateManifest = tool.SingleProjects.at(i).Configuration.linker.GenerateManifest; + const triState generateManifest = config.linker.GenerateManifest; if (generateManifest != unset) { xml << tag("GenerateManifest") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) + << attrTag("Condition", condition) << valueTagT(generateManifest); } - if ( tool.SingleProjects.at(i).Configuration.preBuild.ExcludedFromBuild != unset ) + if (config.preBuild.ExcludedFromBuild != unset) { xml << tag("PreBuildEventUseInBuild") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) - << valueTagT(!tool.SingleProjects.at(i).Configuration.preBuild.ExcludedFromBuild); + << attrTag("Condition", condition) + << valueTagT(!config.preBuild.ExcludedFromBuild); } - if ( tool.SingleProjects.at(i).Configuration.preLink.ExcludedFromBuild != unset ) + if (config.preLink.ExcludedFromBuild != unset) { xml << tag("PreLinkEventUseInBuild") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) - << valueTagT(!tool.SingleProjects.at(i).Configuration.preLink.ExcludedFromBuild); + << attrTag("Condition", condition) + << valueTagT(!config.preLink.ExcludedFromBuild); } - if ( tool.SingleProjects.at(i).Configuration.postBuild.ExcludedFromBuild != unset ) + if (config.postBuild.ExcludedFromBuild != unset) { xml << tag("PostBuildEventUseInBuild") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) - << valueTagT(!tool.SingleProjects.at(i).Configuration.postBuild.ExcludedFromBuild); + << attrTag("Condition", condition) + << valueTagT(!config.postBuild.ExcludedFromBuild); } } xml << closetag(); for (int i = 0; i < tool.SingleProjects.count(); ++i) { + const VCConfiguration &config = tool.SingleProjects.at(i).Configuration; + xml << tag("ItemDefinitionGroup") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)); + << attrTag("Condition", generateCondition(config)); // ClCompile - write(xml, tool.SingleProjects.at(i).Configuration.compiler); + write(xml, config.compiler); // Link - write(xml, tool.SingleProjects.at(i).Configuration.linker); + write(xml, config.linker); // Midl - write(xml, tool.SingleProjects.at(i).Configuration.idl); + write(xml, config.idl); // ResourceCompiler - write(xml, tool.SingleProjects.at(i).Configuration.resource); + write(xml, config.resource); // Post build event - if ( tool.SingleProjects.at(i).Configuration.postBuild.ExcludedFromBuild != unset ) - write(xml, tool.SingleProjects.at(i).Configuration.postBuild); + if (config.postBuild.ExcludedFromBuild != unset) + write(xml, config.postBuild); // Pre build event - if ( tool.SingleProjects.at(i).Configuration.preBuild.ExcludedFromBuild != unset ) - write(xml, tool.SingleProjects.at(i).Configuration.preBuild); + if (config.preBuild.ExcludedFromBuild != unset) + write(xml, config.preBuild); // Pre link event - if ( tool.SingleProjects.at(i).Configuration.preLink.ExcludedFromBuild != unset ) - write(xml, tool.SingleProjects.at(i).Configuration.preLink); + if (config.preLink.ExcludedFromBuild != unset) + write(xml, config.preLink); xml << closetag(); } @@ -1458,33 +1462,33 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCMIDLTool &tool) void VCXProjectWriter::write(XmlOutput &xml, const VCCustomBuildTool &tool) { - const QString &configName = tool.config->Name; + const QString condition = generateCondition(*tool.config); if ( !tool.AdditionalDependencies.isEmpty() ) { xml << tag("AdditionalInputs") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(configName)) + << attrTag("Condition", condition) << valueTagDefX(tool.AdditionalDependencies, "AdditionalInputs", ";"); } if( !tool.CommandLine.isEmpty() ) { xml << tag("Command") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(configName)) + << attrTag("Condition", condition) << valueTag(tool.CommandLine.join(vcxCommandSeparator())); } if ( !tool.Description.isEmpty() ) { xml << tag("Message") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(configName)) + << attrTag("Condition", condition) << valueTag(tool.Description); } if ( !tool.Outputs.isEmpty() ) { xml << tag("Outputs") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(configName)) + << attrTag("Condition", condition) << valueTagDefX(tool.Outputs, "Outputs", ";"); } } @@ -1552,7 +1556,7 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCDeploymentTool &tool) void VCXProjectWriter::write(XmlOutput &xml, const VCConfiguration &tool) { xml << tag("PropertyGroup") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Name)) + << attrTag("Condition", generateCondition(tool)) << attrTag("Label", "Configuration") << attrTagS(_OutputDirectory, tool.OutputDirectory) << attrTagT(_ATLMinimizesCRunTimeLibraryUsage, tool.ATLMinimizesCRunTimeLibraryUsage) @@ -1920,10 +1924,10 @@ bool VCXProjectWriter::outputFileConfig(VCFilter &filter, XmlOutput &xml, XmlOut } } + const QString condition = generateCondition(*filter.Config); if(!inBuild) { - xml << tag("ExcludedFromBuild") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(filter.Config->Name)) + << attrTag("Condition", condition) << valueTag("true"); } @@ -1931,17 +1935,17 @@ bool VCXProjectWriter::outputFileConfig(VCFilter &filter, XmlOutput &xml, XmlOut if ( !filter.CompilerTool.ForcedIncludeFiles.isEmpty() ) { xml << tag("ForcedIncludeFiles") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(filter.Config->Name)) + << attrTag("Condition", condition) << valueTagX(filter.CompilerTool.ForcedIncludeFiles); } if ( !filter.CompilerTool.PrecompiledHeaderThrough.isEmpty() ) { xml << tag("PrecompiledHeaderFile") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(filter.Config->Name)) + << attrTag("Condition", condition) << valueTag(filter.CompilerTool.PrecompiledHeaderThrough) << tag("PrecompiledHeader") - << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(filter.Config->Name)) + << attrTag("Condition", condition) << valueTag(toString(filter.CompilerTool.UsePrecompiledHeader)); } } @@ -1950,4 +1954,9 @@ bool VCXProjectWriter::outputFileConfig(VCFilter &filter, XmlOutput &xml, XmlOut return fileAdded; } +QString VCXProjectWriter::generateCondition(const VCConfiguration &config) +{ + return QLatin1String("'$(Configuration)|$(Platform)'=='") + config.Name + QLatin1Char('\''); +} + QT_END_NAMESPACE diff --git a/qmake/generators/win32/msbuild_objectmodel.h b/qmake/generators/win32/msbuild_objectmodel.h index 72a405f..f53b2f9 100644 --- a/qmake/generators/win32/msbuild_objectmodel.h +++ b/qmake/generators/win32/msbuild_objectmodel.h @@ -182,6 +182,7 @@ private: static void outputFilter(VCProject &project, XmlOutput &xml, XmlOutput &xmlFilter, const QString &filtername); static void outputFileConfigs(VCProject &project, XmlOutput &xml, XmlOutput &xmlFilter, const VCFilterFile &info, const QString &filtername); static bool outputFileConfig(VCFilter &filter, XmlOutput &xml, XmlOutput &xmlFilter, const QString &filename, const QString &filtername, bool fileAllreadyAdded); + static QString generateCondition(const VCConfiguration &config); friend class XTreeNode; friend class XFlatNode; |