Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric St. John <ericstj@microsoft.com>2017-01-25 09:19:00 +0300
committerEric St. John <ericstj@microsoft.com>2017-01-25 21:51:17 +0300
commit46fd630d59f0d996ad621bfd32d6d1fd46d8e3bc (patch)
treef07676a1b743e8206a3ad76553bb297824a9a892 /buildvertical.targets
parent3515bf85fe46eeba3322f782212e4023cb8a0ae6 (diff)
Fix P2P reference Configuration selection
Previously we'd always choose Configuration for P2Ps based on BuildConfiguration. This was incorrect and could result in netstandard configurations building against netcoreapp references. Fix this by doing configuration selection in the referencing project. I've also added hooks to build all configurations. To do this from a traversal set /p:BuildAllConfigurations=true. To do this from a project build with /t:BuildAll.
Diffstat (limited to 'buildvertical.targets')
-rw-r--r--buildvertical.targets64
1 files changed, 46 insertions, 18 deletions
diff --git a/buildvertical.targets b/buildvertical.targets
index baeb058c96..54aa29290b 100644
--- a/buildvertical.targets
+++ b/buildvertical.targets
@@ -15,7 +15,14 @@
<!-- find the best configuration for each project, projects that shouldn't build for this configuration
return an empty item. -->
<MSBuild Targets="FindBestConfiguration"
- Projects="@(Project)">
+ Projects="@(Project)"
+ Condition="'$(BuildAllConfigurations)' != 'true'">
+ <Output TaskParameter="TargetOutputs"
+ ItemName="_ProjectBestConfigurations" />
+ </MSBuild>
+ <MSBuild Targets="GetBuildConfigurations"
+ Projects="@(Project)"
+ Condition="'$(BuildAllConfigurations)' == 'true'">
<Output TaskParameter="TargetOutputs"
ItemName="_ProjectBestConfigurations" />
</MSBuild>
@@ -51,35 +58,56 @@
<_BestConfiguration Condition="'$(BuildConfigurations)' == ''">$(BuildConfiguration)</_BestConfiguration>
</PropertyGroup>
</Target>
-
- <!-- Runs in a leaf project (eg: csproj) to determine best configuration if one exists for purposes of project references -->
- <Target Name="FindBestConfigurationForProjectReference"
- DependsOnTargets="FindBestConfiguration"
- Returns="$(_BestConfiguration)">
- <Error Condition="'$(_BestConfiguration)' == ''" Text="Could not find a configuration for $(BuildConfiguration) from $(BuildConfigurations)" />
+
+ <!-- Runs in a leaf project (eg: csproj) to determine all configurations -->
+ <Target Name="GetBuildConfigurations"
+ Returns="$(_AllBuildConfigurations)">
+ <PropertyGroup>
+ <_AllBuildConfigurations>$(BuildConfigurations)</_AllBuildConfigurations>
+ <_AllBuildConfigurations Condition="'$(BuildConfigurations)' == ''">$(BuildConfiguration)</_AllBuildConfigurations>
+ </PropertyGroup>
</Target>
<!-- Runs in a leaf project (csproj) to determine best configuration for ProjectReferences -->
<Target Name="AnnotateProjectReference"
- BeforeTargets="BeforeResolveReferences">
+ BeforeTargets="BeforeResolveReferences"
+ Condition="'@(ProjectReference)' != ''"
+ Inputs="%(ProjectReference.Identity)"
+ Outputs="unused">
- <!-- find the best configuration for each project, projects that do not have an
- applicable configuration will fail the build. -->
- <MSBuild Targets="FindBestConfigurationForProjectReference"
+ <!-- Get all configurations for each ProjectReference. We use this
+ rather than the FindBestConfiguration target since we need to
+ choose the best configuration for the referencing project's
+ configuration, not the BuildConfiguration. -->
+ <MSBuild Targets="GetBuildConfigurations"
Projects="@(ProjectReference)">
- <Output TaskParameter="TargetOutputs" ItemName="_ProjectReferenceBestConfigurations" />
+ <Output TaskParameter="TargetOutputs" PropertyName="_projectReferenceBuildConfigurations" />
</MSBuild>
+ <!-- Find the best configuration for the current Project's Configuration -->
+ <FindBestConfiguration Properties="@(Property)"
+ PropertyValues="@(PropertyValue)"
+ BuildConfigurations="$(_ProjectReferenceBuildConfigurations)"
+ BuildConfiguration="$(Configuration)">
+ <Output TaskParameter="BestConfiguration" PropertyName="_projectReferenceConfiguration" />
+ </FindBestConfiguration>
+
+ <Error Condition="'$(_projectReferenceConfiguration)' == ''" Text="Could not find a configuration for ProjectReference '@(ProjectReference)' from configurations '$(_projectReferenceBuildConfigurations)' when building '$(MSBuildProjectName)' for configuration '$(Configuration)' ." />
+
<ItemGroup>
- <!-- transform back to ProjectReference -->
- <ProjectReferenceWithConfiguration Include="@(_ProjectReferenceBestConfigurations->'%(OriginalItemSpec)')">
- <AdditionalProperties>Configuration=%(Identity);%(_ProjectReferenceBestConfigurations.AdditionalProperties)</AdditionalProperties>
- </ProjectReferenceWithConfiguration>
+ <ProjectReference>
+ <AdditionalProperties>Configuration=$(_projectReferenceConfiguration);%(ProjectReference.AdditionalProperties)</AdditionalProperties>
+ </ProjectReference>
</ItemGroup>
+ </Target>
+ <Target Name="BuildAll">
<ItemGroup>
- <ProjectReference Remove="@(ProjectReference)" />
- <ProjectReference Include="@(ProjectReferenceWithConfiguration)" />
+ <_buildConfigurations Include="$(BuildConfigurations)" />
+ <_buildConfigurations Condition="'@(_buildConfigurations)' == ''" Include="$(BuildConfiguration)" />
</ItemGroup>
+
+ <MSBuild Projects="$(MSBuildProjectFullPath)"
+ Properties="Configuration=%(_buildConfigurations.Identity)" />
</Target>
</Project> \ No newline at end of file