diff options
-rw-r--r-- | src/config/12.0/source.extension.vsixmanifest_TT | 3 | ||||
-rw-r--r-- | src/qtmsbuild/Qt.props | 59 | ||||
-rw-r--r-- | src/qtmsbuild/QtMSBuild.csproj | 6 | ||||
-rw-r--r-- | src/qtmsbuild/qt.targets | 8 | ||||
-rw-r--r-- | src/qtmsbuild/qt_private.props | 3 | ||||
-rw-r--r-- | src/qtmsbuild/qt_settings.xml | 1 | ||||
-rw-r--r-- | src/qtmsbuild/qt_settings_vs2015.xml | 1 | ||||
-rw-r--r-- | src/qttemplates/console/console.vcxproj | 11 | ||||
-rw-r--r-- | src/qttemplates/designer/designer.vcxproj | 11 | ||||
-rw-r--r-- | src/qttemplates/empty/empty.vcxproj | 11 | ||||
-rw-r--r-- | src/qttemplates/gui/gui.vcxproj | 11 | ||||
-rw-r--r-- | src/qttemplates/lib/lib.vcxproj | 11 | ||||
-rw-r--r-- | src/qttemplates/quick/quick.vcxproj | 11 | ||||
-rw-r--r-- | src/qttemplates/server/server.vcxproj | 11 | ||||
-rw-r--r-- | src/qtvstools.core/Resources.cs | 2 | ||||
-rw-r--r-- | src/qtvstools/QtVsTools.csproj | 10 | ||||
-rw-r--r-- | src/qtvstools/Vsix.cs | 41 | ||||
-rw-r--r-- | src/qtwizard/Wizards/ProjectWizard/ProjectTemplateWizard.cs | 1 |
18 files changed, 156 insertions, 56 deletions
diff --git a/src/config/12.0/source.extension.vsixmanifest_TT b/src/config/12.0/source.extension.vsixmanifest_TT index f8870814..9ec4a28c 100644 --- a/src/config/12.0/source.extension.vsixmanifest_TT +++ b/src/config/12.0/source.extension.vsixmanifest_TT @@ -139,6 +139,9 @@ Type="File" d:Source="File" Path="qtmsbuild\qt.props" d:VsixSubPath="qtmsbuild" /> <Asset + Type="File" d:Source="File" Path="qtmsbuild\qt_private.props" + d:VsixSubPath="qtmsbuild" /> + <Asset Type="File" d:Source="File" Path="qtmsbuild\qt.targets" d:VsixSubPath="qtmsbuild" /> <Asset diff --git a/src/qtmsbuild/Qt.props b/src/qtmsbuild/Qt.props new file mode 100644 index 00000000..3ad337af --- /dev/null +++ b/src/qtmsbuild/Qt.props @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt VS Tools. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +--> +<!-- +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Item type definition and default values +// --> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <!-- + ///////////////////////////////////////////////////////////////////////////////////////////////// + // Import private Qt property definitions + // --> + <ImportGroup Label="Qt"> + <Import Project="$(MSBuildThisFileDirectory)\qt_private.props"/> + </ImportGroup> + <!-- + ///////////////////////////////////////////////////////////////////////////////////////////////// + // User-defined settings + // --> + <PropertyGroup Label="UserMacros"> + <!-- Placeholder for user macros written by VS Property Manager --> + </PropertyGroup> + <PropertyGroup> + <!-- Placeholder for properties written by VS Property Manager --> + </PropertyGroup> + <ItemDefinitionGroup> + <!-- Placeholder for default metadata written by VS Property Manager --> + </ItemDefinitionGroup> + <ItemGroup> + <!-- Placeholder for items written by VS Property Manager --> + </ItemGroup> +</Project> diff --git a/src/qtmsbuild/QtMSBuild.csproj b/src/qtmsbuild/QtMSBuild.csproj index 84ec9583..3407e054 100644 --- a/src/qtmsbuild/QtMSBuild.csproj +++ b/src/qtmsbuild/QtMSBuild.csproj @@ -50,7 +50,11 @@ <CopyToOutputDirectory>Always</CopyToOutputDirectory> <SubType>Designer</SubType> </Content> - <Content Include="qt.props"> + <Content Include="Qt.props"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + <SubType>Designer</SubType> + </Content> + <Content Include="qt_private.props"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> <SubType>Designer</SubType> </Content> diff --git a/src/qtmsbuild/qt.targets b/src/qtmsbuild/qt.targets index 0d9b2fc6..3a99ed22 100644 --- a/src/qtmsbuild/qt.targets +++ b/src/qtmsbuild/qt.targets @@ -36,6 +36,14 @@ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- ///////////////////////////////////////////////////////////////////////////////////////////////// + // Fail-safe import of private definitions + // --> + <Import + Condition="'$(QtPrivateLoaded)' != 'true'" + Project="$(MSBuildThisFileDirectory)\qt_private.props"/> + + <!-- + ///////////////////////////////////////////////////////////////////////////////////////////////// // Defaults for project version constants // --> <PropertyGroup> diff --git a/src/qtmsbuild/qt_private.props b/src/qtmsbuild/qt_private.props index 159d2dc7..a0bb3b70 100644 --- a/src/qtmsbuild/qt_private.props +++ b/src/qtmsbuild/qt_private.props @@ -34,6 +34,9 @@ // Item type definition and default values // --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <QtPrivateLoaded>true</QtPrivateLoaded> + </PropertyGroup> <!-- ///////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/qtmsbuild/qt_settings.xml b/src/qtmsbuild/qt_settings.xml index e8b53546..b6a25d93 100644 --- a/src/qtmsbuild/qt_settings.xml +++ b/src/qtmsbuild/qt_settings.xml @@ -59,6 +59,7 @@ <EnumValue Name="QtVS_v301" DisplayName="Version 3.1"/> <EnumValue Name="QtVS_v302" DisplayName="Version 3.2"/> <EnumValue Name="QtVS_v303" DisplayName="Version 3.3"/> + <EnumValue Name="QtVS_v304" DisplayName="Version 3.4"/> </EnumProperty> <DynamicEnumProperty Name="QtInstall" diff --git a/src/qtmsbuild/qt_settings_vs2015.xml b/src/qtmsbuild/qt_settings_vs2015.xml index a42f9bfd..4170d399 100644 --- a/src/qtmsbuild/qt_settings_vs2015.xml +++ b/src/qtmsbuild/qt_settings_vs2015.xml @@ -59,6 +59,7 @@ <EnumValue Name="QtVS_v301" DisplayName="Version 3.1"/> <EnumValue Name="QtVS_v302" DisplayName="Version 3.2"/> <EnumValue Name="QtVS_v303" DisplayName="Version 3.3"/> + <EnumValue Name="QtVS_v304" DisplayName="Version 3.4"/> </EnumProperty> <DynamicEnumProperty Name="QtInstall" diff --git a/src/qttemplates/console/console.vcxproj b/src/qttemplates/console/console.vcxproj index bbb86c5a..fbd4048a 100644 --- a/src/qttemplates/console/console.vcxproj +++ b/src/qttemplates/console/console.vcxproj @@ -13,6 +13,10 @@ $Globals$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> $Configurations$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> + <Import Project="$(QtMsBuild)\qt_defaults.props" /> + </ImportGroup> +$QtSettings$ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> @@ -23,14 +27,7 @@ $Configurations$ <ImportGroup Label="Shared" /> $PropertySheets$ <PropertyGroup Label="UserMacros" /> - <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> - <Import Project="$(QtMsBuild)\qt_defaults.props" /> - </ImportGroup> $Properties$ -$QtSettings$ - <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> - <Import Project="$(QtMsBuild)\qt.props" /> - </ImportGroup> $BuildSettings$ <ItemGroup> <ClCompile Include="main.cpp" /> diff --git a/src/qttemplates/designer/designer.vcxproj b/src/qttemplates/designer/designer.vcxproj index 0ecc97b8..f32dc6e3 100644 --- a/src/qttemplates/designer/designer.vcxproj +++ b/src/qttemplates/designer/designer.vcxproj @@ -13,6 +13,10 @@ $Globals$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> $Configurations$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> + <Import Project="$(QtMsBuild)\qt_defaults.props" /> + </ImportGroup> +$QtSettings$ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> @@ -23,14 +27,7 @@ $Configurations$ <ImportGroup Label="Shared" /> $PropertySheets$ <PropertyGroup Label="UserMacros" /> - <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> - <Import Project="$(QtMsBuild)\qt_defaults.props" /> - </ImportGroup> $Properties$ -$QtSettings$ - <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> - <Import Project="$(QtMsBuild)\qt.props" /> - </ImportGroup> $BuildSettings$ <ItemGroup> <QtMoc Include="$headerfilename$"/> diff --git a/src/qttemplates/empty/empty.vcxproj b/src/qttemplates/empty/empty.vcxproj index 658b695e..70c2cef5 100644 --- a/src/qttemplates/empty/empty.vcxproj +++ b/src/qttemplates/empty/empty.vcxproj @@ -13,6 +13,10 @@ $Globals$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> $Configurations$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> + <Import Project="$(QtMsBuild)\qt_defaults.props" /> + </ImportGroup> +$QtSettings$ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> @@ -23,14 +27,7 @@ $Configurations$ <ImportGroup Label="Shared" /> $PropertySheets$ <PropertyGroup Label="UserMacros" /> - <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> - <Import Project="$(QtMsBuild)\qt_defaults.props" /> - </ImportGroup> $Properties$ -$QtSettings$ - <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> - <Import Project="$(QtMsBuild)\qt.props" /> - </ImportGroup> $BuildSettings$ <ItemGroup> $ProjectItems$ diff --git a/src/qttemplates/gui/gui.vcxproj b/src/qttemplates/gui/gui.vcxproj index 0bd31e55..58731f3c 100644 --- a/src/qttemplates/gui/gui.vcxproj +++ b/src/qttemplates/gui/gui.vcxproj @@ -13,6 +13,10 @@ $Globals$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> $Configurations$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> + <Import Project="$(QtMsBuild)\qt_defaults.props" /> + </ImportGroup> +$QtSettings$ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> @@ -23,14 +27,7 @@ $Configurations$ <ImportGroup Label="Shared" /> $PropertySheets$ <PropertyGroup Label="UserMacros" /> - <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> - <Import Project="$(QtMsBuild)\qt_defaults.props" /> - </ImportGroup> $Properties$ -$QtSettings$ - <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> - <Import Project="$(QtMsBuild)\qt.props" /> - </ImportGroup> $BuildSettings$ <ItemGroup> <QtRcc Include="$qrcfilename$"/> diff --git a/src/qttemplates/lib/lib.vcxproj b/src/qttemplates/lib/lib.vcxproj index 44b7ee57..e3f38124 100644 --- a/src/qttemplates/lib/lib.vcxproj +++ b/src/qttemplates/lib/lib.vcxproj @@ -13,6 +13,10 @@ $Globals$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> $Configurations$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> + <Import Project="$(QtMsBuild)\qt_defaults.props" /> + </ImportGroup> +$QtSettings$ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> @@ -23,14 +27,7 @@ $Configurations$ <ImportGroup Label="Shared" /> $PropertySheets$ <PropertyGroup Label="UserMacros" /> - <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> - <Import Project="$(QtMsBuild)\qt_defaults.props" /> - </ImportGroup> $Properties$ -$QtSettings$ - <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> - <Import Project="$(QtMsBuild)\qt.props" /> - </ImportGroup> $BuildSettings$ <ItemGroup> <ClInclude Include="$saveglobal$_global.h"/> diff --git a/src/qttemplates/quick/quick.vcxproj b/src/qttemplates/quick/quick.vcxproj index 68f9ed6c..17f6b66a 100644 --- a/src/qttemplates/quick/quick.vcxproj +++ b/src/qttemplates/quick/quick.vcxproj @@ -13,6 +13,10 @@ $Globals$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> $Configurations$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> + <Import Project="$(QtMsBuild)\qt_defaults.props" /> + </ImportGroup> +$QtSettings$ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> @@ -23,14 +27,7 @@ $Configurations$ <ImportGroup Label="Shared" /> $PropertySheets$ <PropertyGroup Label="UserMacros" /> - <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> - <Import Project="$(QtMsBuild)\qt_defaults.props" /> - </ImportGroup> $Properties$ -$QtSettings$ - <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> - <Import Project="$(QtMsBuild)\qt.props" /> - </ImportGroup> $BuildSettings$ <ItemGroup> <ClCompile Include="main.cpp"/> diff --git a/src/qttemplates/server/server.vcxproj b/src/qttemplates/server/server.vcxproj index a83c5ff9..b2a0d838 100644 --- a/src/qttemplates/server/server.vcxproj +++ b/src/qttemplates/server/server.vcxproj @@ -13,6 +13,10 @@ $Globals$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> $Configurations$ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> + <Import Project="$(QtMsBuild)\qt_defaults.props" /> + </ImportGroup> +$QtSettings$ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> @@ -23,14 +27,7 @@ $Configurations$ <ImportGroup Label="Shared" /> $PropertySheets$ <PropertyGroup Label="UserMacros" /> - <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> - <Import Project="$(QtMsBuild)\qt_defaults.props" /> - </ImportGroup> $Properties$ -$QtSettings$ - <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> - <Import Project="$(QtMsBuild)\qt.props" /> - </ImportGroup> $BuildSettings$ <ItemGroup> <QtUic Include="$uifilename$" /> diff --git a/src/qtvstools.core/Resources.cs b/src/qtvstools.core/Resources.cs index be807610..2bfced2b 100644 --- a/src/qtvstools.core/Resources.cs +++ b/src/qtvstools.core/Resources.cs @@ -83,7 +83,7 @@ namespace QtVsTools.Core // Qt VS project tag and format version public const string qtProjectKeyword = "QtVS"; - public const int qtProjectFormatVersion = 303; + public const int qtProjectFormatVersion = 304; public static string QtVSVersionTag => string.Format("{0}_v{1}", qtProjectKeyword, qtProjectFormatVersion); diff --git a/src/qtvstools/QtVsTools.csproj b/src/qtvstools/QtVsTools.csproj index 1ec1d62a..af71661e 100644 --- a/src/qtvstools/QtVsTools.csproj +++ b/src/qtvstools/QtVsTools.csproj @@ -577,8 +577,14 @@ <IncludeInVSIX>true</IncludeInVSIX> <SubType>Designer</SubType> </Content> - <Content Include="..\qtmsbuild\qt.props"> - <Link>QtMsBuild\qt.props</Link> + <Content Include="..\qtmsbuild\Qt.props"> + <Link>QtMsBuild\Qt.props</Link> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + <IncludeInVSIX>true</IncludeInVSIX> + <SubType>Designer</SubType> + </Content> + <Content Include="..\qtmsbuild\qt_private.props"> + <Link>QtMsBuild\qt_private.props</Link> <CopyToOutputDirectory>Always</CopyToOutputDirectory> <IncludeInVSIX>true</IncludeInVSIX> <SubType>Designer</SubType> diff --git a/src/qtvstools/Vsix.cs b/src/qtvstools/Vsix.cs index 298e97b4..7a40e2a7 100644 --- a/src/qtvstools/Vsix.cs +++ b/src/qtvstools/Vsix.cs @@ -130,6 +130,8 @@ namespace QtVsTools static EventWaitHandle initDone = new EventWaitHandle(false, EventResetMode.ManualReset); static Vsix instance = null; + const StringComparison IGNORE_CASE = StringComparison.InvariantCultureIgnoreCase; + /// <summary> /// Gets the instance of the package. /// </summary> @@ -223,6 +225,10 @@ namespace QtVsTools PkgInstallPath = Path.GetDirectoryName( Uri.UnescapeDataString(uri.AbsolutePath)) + @"\"; + /////////// + // Install Qt/MSBuild files from package folder to standard location + // -> %LOCALAPPDATA%\QtMsBuild + // var QtMsBuildDefault = Path.Combine( Environment.GetEnvironmentVariable("LocalAppData"), "QtMsBuild"); try { @@ -239,16 +245,45 @@ namespace QtVsTools var targetPathTemp = targetPath + ".tmp"; Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); File.Copy(sourcePath, targetPathTemp, overwrite: true); - if (File.Exists(targetPath)) - File.Replace(targetPathTemp, targetPath, null); - else + //////// + // Copy Qt/MSBuild files to standard location, taking care not to + // overwrite the updated Qt props file, possibly containing user-defined + // build settings (written by the VS Property Manager). This file is + // recognized as being named "Qt.props" and containing the import + // statement for qt_private.props. + // + string qtPrivateImport = + @"<Import Project=""$(MSBuildThisFileDirectory)\qt_private.props"""; + Func<string, bool> isUpdateQtProps = (string filePath) => + { + return Path.GetFileName(targetPath).Equals("Qt.props", IGNORE_CASE) + && File.ReadAllText(targetPath).Contains(qtPrivateImport); + }; + if (!File.Exists(targetPath)) { + // Target file does not exist + // -> Create new File.Move(targetPathTemp, targetPath); + } else if (!isUpdateQtProps(targetPath)) { + // Target file is not the updated Qt.props + // -> Overwrite + File.Replace(targetPathTemp, targetPath, null); + } else { + // Target file *is* the updated Qt.props; skip! + // -> Remove temp file + File.Delete(targetPathTemp); + } } } } catch { + ///////// + // Error copying files to standard location. + // -> FAIL-SAFE: use source folder (within package) as the standard location QtMsBuildDefault = Path.Combine(PkgInstallPath, "QtMsBuild"); } + /////// + // Set %QTMSBUILD% by default to point to standard location of Qt/MSBuild + // var QtMsBuildPath = Environment.GetEnvironmentVariable("QtMsBuild"); if (string.IsNullOrEmpty(QtMsBuildPath)) { diff --git a/src/qtwizard/Wizards/ProjectWizard/ProjectTemplateWizard.cs b/src/qtwizard/Wizards/ProjectWizard/ProjectTemplateWizard.cs index ca9f7d9a..dca0dafd 100644 --- a/src/qtwizard/Wizards/ProjectWizard/ProjectTemplateWizard.cs +++ b/src/qtwizard/Wizards/ProjectWizard/ProjectTemplateWizard.cs @@ -447,6 +447,7 @@ namespace QtVsTools.Wizards.ProjectWizard xml.AppendLine(string.Format(@" <ImportGroup Label=""PropertySheets"" Condition=""'$(Configuration)|$(Platform)' == '{0}|{1}'""> <Import Project=""$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"" Condition=""exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"" Label=""LocalAppDataPlatform"" /> + <Import Project=""$(QtMsBuild)\Qt.props"" /> </ImportGroup>", /*{0}*/ c.Name, /*{1}*/ c.Platform)); |