diff options
author | Miguel Costa <miguel.costa@qt.io> | 2019-11-15 18:09:33 +0100 |
---|---|---|
committer | Miguel Costa <miguel.costa@qt.io> | 2019-12-19 14:08:24 +0000 |
commit | 94881b1e278a8db0de04825d816953f82b629ec1 (patch) | |
tree | 14a13c67cd0f109c300ae6dc542b3dcc34b5bb28 | |
parent | da239ca90edc6274ca6e914f64919ca1bc64df04 (diff) |
Fix problems with outer/inner build
To include Qt properties, extracted from qmake, into a VS/MSBuild
project requires that MSBuild be invoked recursively, after the Qt
properties file has been generated. This change fixes some
inconsistencies between the "outer" build (i.e. the initial call to
MSBuild, corresponding to the original build request), and the "inner"
build (i.e. the recursive call to MSBuild, after the Qt properties file
is generated), as well as build requests related to the update of
IntelliSense information (syntax highlighting, code completion, etc.)
Task-number: QTVSADDINBUG-708
Change-Id: If5d1fcd4ab2ffd996b1817cc3953cefeba3bfe4a
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r-- | src/qtmsbuild/qt.props | 2 | ||||
-rw-r--r-- | src/qtmsbuild/qt_globals.targets | 19 | ||||
-rw-r--r-- | src/qtmsbuild/qt_vars.targets | 52 | ||||
-rw-r--r-- | src/qtprojectlib/MsBuildProject.cs | 2 | ||||
-rw-r--r-- | src/qtvstools/QtMsBuild/Components/QtProjectTracker.cs | 4 |
5 files changed, 30 insertions, 49 deletions
diff --git a/src/qtmsbuild/qt.props b/src/qtmsbuild/qt.props index 28046430..3f4f7ff9 100644 --- a/src/qtmsbuild/qt.props +++ b/src/qtmsbuild/qt.props @@ -117,7 +117,7 @@ <QtVarsFilePath >$(QtVarsOutputDir)\$(QtVarsFileName)</QtVarsFilePath> <QtVarsIndexPathDesignTime - >$(QtVarsOutputDir)\$(QtVarsFileNameWithoutExt).designtime.idx</QtVarsIndexPathDesignTime> + >$(TEMP)\$(ProjectGuid.Replace('{','').Replace('}','')).$(ProjectName).designtime.idx</QtVarsIndexPathDesignTime> <QtVarsDesignTime Condition="Exists('$(QtVarsIndexPathDesignTime)')" >$([System.String]::Copy($([System.IO.File]::ReadAllText('$(QtVarsIndexPathDesignTime)'))).Replace('
',''))</QtVarsDesignTime> </PropertyGroup> diff --git a/src/qtmsbuild/qt_globals.targets b/src/qtmsbuild/qt_globals.targets index 2822e9ba..2d7524f4 100644 --- a/src/qtmsbuild/qt_globals.targets +++ b/src/qtmsbuild/qt_globals.targets @@ -437,4 +437,23 @@ </ItemGroup> </Target> + <!-- + ///////////////////////////////////////////////////////////////////////////////////////////////// + /// TARGET QtOuterBuild + ///////////////////////////////////////////////////////////////////////////////////////////////// + // Root Qt target + // --> + <PropertyGroup Condition="'$(QtInnerBuild)' != 'true' AND '$(DesignTimeBuild)' != 'true'"> + <BuildDependsOn>QtOuterBuild</BuildDependsOn> + </PropertyGroup> + + <Target Name="QtOuterBuild" DependsOnTargets="$(QtOuterBuildDependsOn)"> + <!--// Restart build in second MSBuild instance --> + <MSBuild + Projects="$(MSBuildProjectFullPath)" + Targets="Build" + Properties="QtInnerBuild=true;RandomFileName=$([System.IO.Path]::GetRandomFileName())"> + </MSBuild> + </Target> + </Project> diff --git a/src/qtmsbuild/qt_vars.targets b/src/qtmsbuild/qt_vars.targets index fc6c8e3d..a41b3ba7 100644 --- a/src/qtmsbuild/qt_vars.targets +++ b/src/qtmsbuild/qt_vars.targets @@ -34,9 +34,8 @@ // --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <QtDependsOn>QtVarsPrepare;QtVars;$(QtDependsOn)</QtDependsOn> - <QtSkipBuildTargets>QtSkipBuild;$(QtSkipBuildTargets)</QtSkipBuildTargets> + <PropertyGroup Condition="'$(QtVsProjectSettings)' == 'true'"> + <QtOuterBuildDependsOn>QtVarsPrepare;QtVars;$(QtDependsOn)</QtOuterBuildDependsOn> <CleanDependsOn>$(CleanDependsOn);QtVarsClean</CleanDependsOn> </PropertyGroup> @@ -338,36 +337,17 @@ <!--// In design-time, copy generated .props to randomly named file --> <PropertyGroup> <QtVarsDesignTimeNew - Condition="'$(ErrorLevel)' == '0'" - >$([System.IO.Path]::Combine('$(QtVarsOutputDir)', - 'qtvars_$([System.IO.Path]::GetRandomFileName()).designtime.props'))</QtVarsDesignTimeNew> + Condition="'$(ErrorLevel)' == '0' AND '$(QtVSToolsBuild)' == 'true'" + >$([System.IO.Path]::Combine('$(TEMP)','$([System.IO.Path]::GetRandomFileName()).designtime.props')) + </QtVarsDesignTimeNew> </PropertyGroup> - <Delete - Condition="'$(ErrorLevel)' == '0'" - Files="$([System.IO.Directory]::GetFiles('$(QtVarsOutputDir)', '*.designtime.props'))"/> <Copy - Condition="'$(ErrorLevel)' == '0'" + Condition="'$(ErrorLevel)' == '0' AND '$(QtVSToolsBuild)' == 'true'" SourceFiles="$(QtVarsFilePath)" DestinationFiles="$(QtVarsDesignTimeNew)"/> <WriteLinesToFile - Condition="'$(ErrorLevel)' == '0'" + Condition="'$(ErrorLevel)' == '0' AND '$(QtVSToolsBuild)' == 'true'" File="$(QtVarsIndexPathDesignTime)" Overwrite="true" Lines="$(QtVarsDesignTimeNew)"/> - <!--// Restart build in second MSBuild instance with updated Qt variables --> - <MSBuild - Condition="'$(DesignTimeBuild)' != 'true'" - Projects="$(MSBuildProjectFullPath)" - Targets="Build" - Properties="RandomFileName=$([System.IO.Path]::GetRandomFileName())"> - </MSBuild> - - <!--// Skip remaining build --> - <CreateProperty Value="true"> - <Output TaskParameter="ValueSetByTask" PropertyName="QtSkipWork" /> - </CreateProperty> - <CallTarget - Condition="'$(QtSkipBuildTargets)' != ''" - Targets="$(QtSkipBuildTargets)"/> - <!--// Clean-up --> <ItemGroup> <QtModuleList Remove="@(QtModuleList)"/> @@ -443,22 +423,4 @@ <CallTarget Targets="QtVars"/> </Target> - <!-- - ///////////////////////////////////////////////////////////////////////////////////////////////// - /// TARGET QtSkipBuild - ///////////////////////////////////////////////////////////////////////////////////////////////// - // Remove source file items in order to skip remaining build process - // --> - <Target Name="QtSkipBuild"> - <ItemGroup> - <QtMoc Remove="@(QtMoc)"/> - <QtRcc Remove="@(QtRcc)"/> - <QtRepc Remove="@(QtRepc)"/> - <QtUic Remove="@(QtUic)"/> - <ClCompile Remove="@(ClCompile)"/> - <Link Remove="@(Link)"/> - <ProjectReference Remove="@(ProjectReference)"/> - </ItemGroup> - </Target> - </Project> diff --git a/src/qtprojectlib/MsBuildProject.cs b/src/qtprojectlib/MsBuildProject.cs index 9155cea3..c2f097fb 100644 --- a/src/qtprojectlib/MsBuildProject.cs +++ b/src/qtprojectlib/MsBuildProject.cs @@ -1466,7 +1466,7 @@ namespace QtProjectLib var projectInstance = new ProjectInstance(this[Files.Project].filePath, new Dictionary<string, string>(configProps) - { { "DesignTimeBuild", "true" } }, + { { "QtVSToolsBuild", "true" } }, null, new ProjectCollection()); var buildRequest = new BuildRequestData(projectInstance, diff --git a/src/qtvstools/QtMsBuild/Components/QtProjectTracker.cs b/src/qtvstools/QtMsBuild/Components/QtProjectTracker.cs index 02595baf..f177d410 100644 --- a/src/qtvstools/QtMsBuild/Components/QtProjectTracker.cs +++ b/src/qtvstools/QtMsBuild/Components/QtProjectTracker.cs @@ -148,8 +148,8 @@ namespace QtVsTools.QtMsBuild { await BuildAsync( project, - new[] { KVP("DesignTimeBuild", "true") }, - new[] { "Qt" }); + new[] { KVP("QtVSToolsBuild", "true") }, + new[] { "QtVars" }); } private async Task BuildAsync( |