From 22c67fa2253e386ea25a61aa018629040d6bf1f5 Mon Sep 17 00:00:00 2001 From: Miguel Costa Date: Tue, 28 Jan 2020 17:14:34 +0100 Subject: Avoid replacing file name parts in .pro import In the import procedure of qmake projects, when transforming custom build command lines to use VS macros instead of fixed values, ensure that parts of filenames are not replaced with $(Configuration) or any other macro. This is achieved by transforming file name references (e.g. ui_foo.h --> ui_%(Filename).h ) before replacing configuration and platform names. Task-number: QTVSADDINBUG-732 Change-Id: Ic6a56cae8d240b58bfc45da7de7b3479631249a9 Reviewed-by: Joerg Bornemann --- src/qtprojectlib/MsBuildProject.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/qtprojectlib/MsBuildProject.cs') diff --git a/src/qtprojectlib/MsBuildProject.cs b/src/qtprojectlib/MsBuildProject.cs index 8e50b74e..70aafd16 100644 --- a/src/qtprojectlib/MsBuildProject.cs +++ b/src/qtprojectlib/MsBuildProject.cs @@ -879,15 +879,25 @@ namespace QtProjectLib new XAttribute("ConfigName", configId))); var configName = (string)row.config.Element(ns + "Configuration"); var platformName = (string)row.config.Element(ns + "Platform"); + + /////////////////////////////////////////////////////////////////////////////// + // Replace fixed values with VS macros + // + // * Filename, e.g. foo.ui --> %(Filename)%(Extension) var commandLine = row.command.Value .Replace(Path.GetFileName(row.itemName), "%(Filename)%(Extension)", - StringComparison.InvariantCultureIgnoreCase) + StringComparison.InvariantCultureIgnoreCase); + // + // * Context specific, e.g. ui_foo.h --> ui_%(FileName).h + foreach (var replace in extraReplacements) + commandLine = replace(row.itemName, commandLine); + // + // * Configuration/platform, e.g. x64\Debug --> $(Platform)\$(Configuration) + commandLine = commandLine .Replace(configName, "$(Configuration)", StringComparison.InvariantCultureIgnoreCase) .Replace(platformName, "$(Platform)", StringComparison.InvariantCultureIgnoreCase); - foreach (var replace in extraReplacements) - commandLine = replace(row.itemName, commandLine); evaluator.Properties.Clear(); foreach (var configProp in row.config.Elements()) -- cgit v1.2.3