summaryrefslogtreecommitdiff
path: root/.packages/microsoft.dotnet.buildtools/3.0.0-preview4-04022-01/lib/ApiCompat.targets
diff options
context:
space:
mode:
Diffstat (limited to '.packages/microsoft.dotnet.buildtools/3.0.0-preview4-04022-01/lib/ApiCompat.targets')
-rwxr-xr-x.packages/microsoft.dotnet.buildtools/3.0.0-preview4-04022-01/lib/ApiCompat.targets129
1 files changed, 129 insertions, 0 deletions
diff --git a/.packages/microsoft.dotnet.buildtools/3.0.0-preview4-04022-01/lib/ApiCompat.targets b/.packages/microsoft.dotnet.buildtools/3.0.0-preview4-04022-01/lib/ApiCompat.targets
new file mode 100755
index 0000000000..d6cd696e0d
--- /dev/null
+++ b/.packages/microsoft.dotnet.buildtools/3.0.0-preview4-04022-01/lib/ApiCompat.targets
@@ -0,0 +1,129 @@
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <UsingTask TaskName="PrereleaseResolveNuGetPackageAssets" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
+ <UsingTask TaskName="LocatePreviousContract" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
+
+ <PropertyGroup>
+ <RunApiCompat Condition="'$(RunApiCompat)'==''">false</RunApiCompat>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(RunApiCompat)' == 'true'">
+ <ApiCompatBaseline Condition="!Exists('$(ApiCompatBaseline)')">$(MSBuildProjectDirectory)\ApiCompatBaseline.$(TargetGroup).txt</ApiCompatBaseline>
+ <ApiCompatBaseline Condition="!Exists('$(ApiCompatBaseline)')">$(MSBuildProjectDirectory)\ApiCompatBaseline.txt</ApiCompatBaseline>
+
+ <MatchingRefApiCompatBaseline Condition="!Exists('$(MatchingRefApiCompatBaseline)')">$(MSBuildProjectDirectory)\MatchingRefApiCompatBaseline.$(TargetGroup).txt</MatchingRefApiCompatBaseline>
+ <MatchingRefApiCompatBaseline Condition="'$(BaselineAllMatchingRefApiCompatError)' != 'true' and !Exists('$(MatchingRefApiCompatBaseline)')">$(MSBuildProjectDirectory)\MatchingRefApiCompatBaseline.txt</MatchingRefApiCompatBaseline>
+
+ <RunApiCompatForSrc Condition="$(MSBuildProjectDirectory.EndsWith('src'))">true</RunApiCompatForSrc>
+
+ <RunMatchingRefApiCompat Condition="'$(RunMatchingRefApiCompat)' == ''">$(RunApiCompatForSrc)</RunMatchingRefApiCompat>
+
+ <ResolveMatchingContract Condition="'$(RunApiCompatForSrc)'=='true'">true</ResolveMatchingContract>
+ <TargetsTriggeredByCompilation Condition="'$(RunApiCompatForSrc)'=='true'">$(TargetsTriggeredByCompilation);ValidateApiCompatForSrc</TargetsTriggeredByCompilation>
+ <TargetsTriggeredByCompilation Condition="'$(RunMatchingRefApiCompat)'=='true'">$(TargetsTriggeredByCompilation);RunMatchingRefApiCompat</TargetsTriggeredByCompilation>
+ </PropertyGroup>
+
+ <!-- ApiCompat for Implementation Assemblies -->
+ <Target Name="ValidateApiCompatForSrc"
+ Condition="'$(RunApiCompatForSrc)' == 'true' AND '$(RunApiCompat)' == 'true' and '@(ResolvedMatchingContract)' != ''">
+
+ <PropertyGroup>
+ <ReferenceAssembly>@(ResolvedMatchingContract)</ReferenceAssembly>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <_DependencyDirectoriesTemp Include="@(ReferencePath->'%(RootDir)%(Directory)')" />
+ <!-- Remove duplicate directories by batching over them -->
+ <!-- Add project references first to give precedence to project-specific files -->
+ <_DependencyDirectories Condition="'%(_DependencyDirectoriesTemp.ReferenceSourceTarget)'=='ProjectReference'" Include="%(_DependencyDirectoriesTemp.Identity)" />
+ <_DependencyDirectories Condition="'%(_DependencyDirectoriesTemp.ReferenceSourceTarget)'!='ProjectReference'" Include="%(_DependencyDirectoriesTemp.Identity)" />
+ <_ContractDependencyDirectories Include="@(ResolvedMatchingContract->'%(RootDir)%(Directory)')" />
+ <_ContractDependencyDirectories Include="$(ContractOutputPath)" />
+ </ItemGroup>
+
+ <PropertyGroup>
+ <ApiCompatArgs>$(ApiCompatArgs) "$(ReferenceAssembly)"</ApiCompatArgs>
+ <ApiCompatArgs>$(ApiCompatArgs) -contractDepends:"@(_ContractDependencyDirectories, ','),"</ApiCompatArgs>
+ <ApiCompatArgs>$(ApiCompatArgs) -implDirs:"$(IntermediateOutputPath),@(_DependencyDirectories, ','),"</ApiCompatArgs>
+ <ApiCompatArgs Condition="'$(ApiCompatExcludeAttributeList)' != ''">$(ApiCompatArgs) -excludeAttributes:"$(ApiCompatExcludeAttributeList)"</ApiCompatArgs>
+ <ApiCompatArgs Condition="'$(BaselineAllAPICompatError)'!='true' and Exists('$(ApiCompatBaseline)')">$(ApiCompatArgs) -baseline:"$(ApiCompatBaseline)"</ApiCompatArgs>
+ <ApiCompatBaselineAll Condition="'$(BaselineAllAPICompatError)'=='true'">&gt; $(ApiCompatBaseline)</ApiCompatBaselineAll>
+ <ApiCompatExitCode>0</ApiCompatExitCode>
+
+ <ApiCompatResponseFile>$(IntermediateOutputPath)apicompat.rsp</ApiCompatResponseFile>
+ <ApiCompatCmd>$(ToolHostCmd) "$(ToolsDir)ApiCompat.exe"</ApiCompatCmd>
+ </PropertyGroup>
+
+ <MakeDir Directories="$(IntermediateOutputPath)" />
+ <WriteLinesToFile File="$(ApiCompatResponseFile)" Lines="$(ApiCompatArgs)" Overwrite="true" />
+
+ <Exec Condition="Exists('$(ReferenceAssembly)')"
+ Command="$(ApiCompatCmd) @&quot;$(ApiCompatResponseFile)&quot; $(ApiCompatBaselineAll)"
+ CustomErrorRegularExpression="^[a-zA-Z]+ :"
+ StandardOutputImportance="Low"
+ IgnoreExitCode="true"
+ >
+ <Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
+ </Exec>
+
+ <!--
+ To force incremental builds to show failures again we are invalidating
+ one compile input by touching the assembly info file
+ -->
+ <Touch Condition="'$(ApiCompatExitCode)'!='0'" Files="$(AssemblyInfoFile)" />
+ <Error Condition="'$(ApiCompatExitCode)'!='0'" Text="ApiCompat failed for '$(TargetPath)'" />
+ </Target>
+
+ <!-- Reverse APICompat to verify that the reference assembly has all the APIs that are in the implementation -->
+ <Target Name="RunMatchingRefApiCompat"
+ Condition="'$(RunMatchingRefApiCompat)' == 'true' AND '$(RunApiCompat)' == 'true' AND '@(ReferenceFromRuntime)' == ''" >
+
+ <PropertyGroup>
+ <ImplemetnationAssemblyAsContract>@(IntermediateAssembly)</ImplemetnationAssemblyAsContract>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <_ContractDependencyDirectoriesTemp Include="@(ReferencePath->'%(RootDir)%(Directory)')" />
+ <!-- Remove duplicate directories by batching over them -->
+ <!-- Add project references first to give precedence to project-specific files -->
+ <_ContractDependencyDirectories Condition="'%(_ContractDependencyDirectoriesTemp.ReferenceSourceTarget)'=='ProjectReference'" Include="%(_ContractDependencyDirectoriesTemp.Identity)" />
+ <_ContractDependencyDirectories Condition="'%(_ContractDependencyDirectoriesTemp.ReferenceSourceTarget)'!='ProjectReference'" Include="%(_ContractDependencyDirectoriesTemp.Identity)" />
+ <_ImplementationDependencyDirectories Include="@(ResolvedMatchingContract->'%(RootDir)%(Directory)')" />
+ <_ImplementationDependencyDirectories Include="$(ContractOutputPath)" />
+ </ItemGroup>
+
+ <PropertyGroup>
+ <MatchingRefApiCompatArgs>$(MatchingRefApiCompatArgs) "$(ImplemetnationAssemblyAsContract)"</MatchingRefApiCompatArgs>
+ <MatchingRefApiCompatArgs>$(MatchingRefApiCompatArgs) -contractDepends:"@(_ContractDependencyDirectories, ','),"</MatchingRefApiCompatArgs>
+ <MatchingRefApiCompatArgs>$(MatchingRefApiCompatArgs) -lhs:implementation</MatchingRefApiCompatArgs>
+ <MatchingRefApiCompatArgs>$(MatchingRefApiCompatArgs) -implDirs:"@(_ImplementationDependencyDirectories, ','),"</MatchingRefApiCompatArgs>
+ <MatchingRefApiCompatArgs>$(MatchingRefApiCompatArgs) -rhs:reference</MatchingRefApiCompatArgs>
+ <MatchingRefApiCompatArgs Condition="'$(ApiCompatExcludeAttributeList)' != ''">$(MatchingRefApiCompatArgs) -excludeAttributes:"$(ApiCompatExcludeAttributeList)"</MatchingRefApiCompatArgs>
+ <MatchingRefApiCompatArgs Condition="'$(BaselineAllMatchingRefApiCompatError)'!='true' and Exists('$(MatchingRefApiCompatBaseline)')">$(MatchingRefApiCompatArgs) -baseline:"$(MatchingRefApiCompatBaseline)"</MatchingRefApiCompatArgs>
+ <MatchingRefApiCompatBaselineAll Condition="'$(BaselineAllMatchingRefApiCompatError)'=='true'">&gt; $(MatchingRefApiCompatBaseline)</MatchingRefApiCompatBaselineAll>
+
+ <MatchingRefApiCompatExitCode>0</MatchingRefApiCompatExitCode>
+
+ <MatchingRefApiCompatResponseFile>$(IntermediateOutputPath)MatchingRefApiCompat_verifyexactref.rsp</MatchingRefApiCompatResponseFile>
+ <MatchingRefApiCompatCmd>$(ToolHostCmd) "$(ToolsDir)ApiCompat.exe"</MatchingRefApiCompatCmd>
+ </PropertyGroup>
+
+ <MakeDir Directories="$(IntermediateOutputPath)" />
+ <WriteLinesToFile File="$(MatchingRefApiCompatResponseFile)" Lines="$(MatchingRefApiCompatArgs)" Overwrite="true" />
+
+ <Exec Condition="Exists('$(ReferenceAssembly)')"
+ Command="$(MatchingRefApiCompatCmd) @&quot;$(MatchingRefApiCompatResponseFile)&quot; $(MatchingRefApiCompatBaselineAll)"
+ CustomErrorRegularExpression="^[a-zA-Z]+ :"
+ StandardOutputImportance="Low"
+ IgnoreExitCode="true"
+ >
+ <Output TaskParameter="ExitCode" PropertyName="MatchingRefApiCompatExitCode" />
+ </Exec>
+
+ <!--
+ To force incremental builds to show failures again we are invalidating
+ one compile input by touching the assembly info file
+ -->
+ <Touch Condition="'$(MatchingRefApiCompatExitCode)'!='0'" Files="$(AssemblyInfoFile)" />
+ <Error Condition="'$(MatchingRefApiCompatExitCode)'!='0'" Text="MatchingRefApiCompat failed - The reference assembly doesn't match all the APIs in the implementation for '$(TargetPath)'. To address either fix errors in the reference assembly (referenced as implementation in compat errors for this reverse compat check), add the issues to the baseline file '$(MatchingRefApiCompatBaseline)' or disable this check by setting RunMatchingRefApiCompat=false in this project." />
+ </Target>
+</Project>