source/SkiaSharp.Build.targets (183 lines of code) (raw):
<Project>
<Import Project="$(MSBuildThisFileDirectory)SkiaSharp.NuGet.targets" />
<PropertyGroup>
<_ManagedExeLauncher Condition=" !$(IsWindows) and Exists('/Library/Frameworks/Mono.framework/Versions/Current/bin/mono') ">/Library/Frameworks/Mono.framework/Versions/Current/bin/mono</_ManagedExeLauncher>
<_ManagedExeLauncher Condition=" !$(IsWindows) and Exists('/usr/local/bin/mono') ">/usr/local/bin/mono</_ManagedExeLauncher>
<_ManagedExeLauncher Condition=" !$(IsWindows) and Exists('/usr/bin/mono') ">/usr/bin/mono</_ManagedExeLauncher>
<_ManagedExeLauncher Condition=" !$(IsWindows) and '$(_ManagedExeLauncher)' == '' ">mono</_ManagedExeLauncher>
<_SnExePath Condition=" $(IsWindows) and '$(_SnExePath)' == '' and Exists('$(SDK40ToolsPath)sn.exe') ">$(SDK40ToolsPath)sn.exe</_SnExePath>
<_SnExePath Condition=" $(IsWindows) and '$(_SnExePath)' == '' and Exists('$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\sn.exe') ">$(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\sn.exe</_SnExePath>
<_SnExePath Condition=" '$(_SnExePath)' == '' ">sn</_SnExePath>
<PublicSign Condition=" '$(PublicSign)' == '' and '$(SignAssembly)' == 'true' ">true</PublicSign>
<KeyFileName Condition=" '$(KeyFileName)' == '' ">mono.snk</KeyFileName>
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)..\scripts\$(KeyFileName)</AssemblyOriginatorKeyFile>
<StrongNamerKeyFile>$(AssemblyOriginatorKeyFile)</StrongNamerKeyFile>
<!--
Suppress version attribute generation in Microsoft.NET.Sdk projects to avoid build failures
when two sets of attributes are emitted.
-->
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<!--
Ignore this message:
Warning VSX1000
No Address and User has been specified in order to establish a connection to a Mac Server, so only the main
assembly was compiled for project '<project name>'. Connect to a Mac Server and try again to build the full
application.
-->
<MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);VSX1000</MSBuildWarningsAsMessages>
<!--
Ignore this message:
Warning MSB9004
ManifestResourceWithNoCulture item type is deprecated. Emit EmbeddedResource items instead, with metadata
WithCulture='false', Type='Resx', and optional LogicalName.
-->
<MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB9004</MSBuildWarningsAsMessages>
</PropertyGroup>
<PropertyGroup>
<PackagingPlatform Condition=" '$(PackagingPlatform)' == '' ">$(TargetFramework)</PackagingPlatform>
</PropertyGroup>
<ItemGroup Condition=" $(IsWindows) and '$(Configuration)' == 'Release' ">
<PackageReference Include="mdoc" Version="5.8.9" PrivateAssets="All" GeneratePathProperty="true" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' != '' and $([MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)')) != '.NETCoreApp'">
<Compile Include="$(MSBuildThisFileDirectory)Common\NullableAttributes.generated.cs" Visible="false" />
</ItemGroup>
<!-- HACK: Do not copy the native bootstrap files -->
<Target Name="_RemoveWasdkBootstrapDll" BeforeTargets="ResolveReferences">
<ItemGroup>
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(Filename)%(Extension)' == 'Microsoft.WindowsAppRuntime.Bootstrap.dll'" />
</ItemGroup>
</Target>
<!--
Workaround for https://github.com/dotnet/sdk/issues/11105
-->
<ItemGroup>
<SourceRoot Include="$([MSBuild]::EnsureTrailingSlash($(NuGetPackageRoot)))" Condition="'$(NuGetPackageRoot)' != ''" />
</ItemGroup>
<!--
===================================================================================================================
_CollectAssemblyVersionInfo & _GenerateAssemblyVersionInfo
Generate the assembly versioning attributes from the VERSIONS.txt file.
===================================================================================================================
-->
<Target Name="_BeforeInitializeSourceControlInformation"
DependsOnTargets="CollectAssemblyVersionInfo"
BeforeTargets="InitializeSourceControlInformation" />
<Target Name="CollectAssemblyVersionInfo"
DependsOnTargets="_CollectAssemblyVersionInfoPrepare;$(CollectAssemblyVersionInfoDependsOn)" />
<Target Name="_CollectAssemblyVersionInfoPrepare"
Condition=" '$(SkipGenerateAssemblyVersionInfo)' != 'true' ">
<PropertyGroup>
<_VersionSourceFile>$(IntermediateOutputPath)\$(AssemblyName).Version.cs</_VersionSourceFile>
<_VersionTxtFile>$(MSBuildThisFileDirectory)..\scripts\VERSIONS.txt</_VersionTxtFile>
</PropertyGroup>
<PropertyGroup>
<_VersionTxtContents>$([System.IO.File]::ReadAllText($(_VersionTxtFile)))</_VersionTxtContents>
<_VersionPackagingGroup>$(PackagingGroup.Split('.')[0])</_VersionPackagingGroup>
<_VersionAssemblyPattern>^$(_VersionPackagingGroup)\s*assembly\s*(.*)$</_VersionAssemblyPattern>
<_VersionFilePattern>^$(_VersionPackagingGroup)\s*file\s*(.*)$</_VersionFilePattern>
<_VersionNuGetPattern>^$(_VersionPackagingGroup)\s*nuget\s*(.*)$</_VersionNuGetPattern>
<_VersionMilestonePattern>^lib$(_VersionPackagingGroup)\s*milestone\s*(.*)$</_VersionMilestonePattern>
<_VersionIncrementPattern>^lib$(_VersionPackagingGroup)\s*increment\s*(.*)$</_VersionIncrementPattern>
<_VersionAssemblyMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_VersionAssemblyPattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_VersionAssemblyMatch>
<_VersionFileMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_VersionFilePattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_VersionFileMatch>
<_VersionNuGetMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_VersionNuGetPattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_VersionNuGetMatch>
<_VersionMilestoneMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_VersionMilestonePattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_VersionMilestoneMatch>
<_VersionIncrementMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_VersionIncrementPattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_VersionIncrementMatch>
</PropertyGroup>
<PropertyGroup>
<Version>$(_VersionNuGetMatch)</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(Version)-$(VersionSuffix)</Version>
<InformationalVersion>$(Version)</InformationalVersion>
<InformationalVersion Condition="'$(AssemblyVersionGitBranch)' != ''">$(InformationalVersion)+$(AssemblyVersionGitBranch.Replace('/', '-').Replace('\', '-'))</InformationalVersion>
<InformationalVersion Condition="'$(AssemblyVersionGitSha)' != ''">$(InformationalVersion).$(AssemblyVersionGitSha)</InformationalVersion>
<AssemblyVersion>$(_VersionAssemblyMatch)</AssemblyVersion>
<FileVersion>$(_VersionFileMatch)</FileVersion>
</PropertyGroup>
</Target>
<Target Name="_BeforeGenerateAssemblyInfo"
BeforeTargets="GenerateAssemblyInfo"
DependsOnTargets="_GenerateAssemblyVersionInfo" />
<Target Name="_GenerateAssemblyVersionInfo"
DependsOnTargets="CollectAssemblyVersionInfo"
Condition=" '$(SkipGenerateAssemblyVersionInfo)' != 'true' ">
<PropertyGroup>
<_VersionGeneratedContents>
internal partial class VersionConstants {
public const string AssemblyVersion = "$(AssemblyVersion)"%3B
public const string AssemblyFileVersion = "$(FileVersion)"%3B
public const string AssemblyInformationalVersion = "$(InformationalVersion)"%3B
public const string GitSha = "$(AssemblyVersionGitSha)"%3B
public const string GitBranch = "$(AssemblyVersionGitBranch)"%3B
public const int Milestone = 0$(_VersionMilestoneMatch)%3B
public const int Increment = 0$(_VersionIncrementMatch)%3B
}
</_VersionGeneratedContents>
</PropertyGroup>
<WriteLinesToFile Condition=" !Exists('$(_VersionSourceFile)') or '$([System.IO.File]::ReadAllText($(_VersionSourceFile)).Trim())' != '$(_VersionGeneratedContents.Trim())' "
File="$(_VersionSourceFile)" Lines="$(_VersionGeneratedContents)" Overwrite="true" />
<ItemGroup>
<FileWrites Include="$(_VersionSourceFile)" />
<Compile Include="$(_VersionSourceFile)" />
</ItemGroup>
</Target>
<!--
===================================================================================================================
_RemoveObsoleteItemsFromReferenceAssembly
Remove all the [Obsolete(error: true)] symbols from the reference assembly.
===================================================================================================================
-->
<ItemGroup Condition="'$(ProduceReferenceAssembly)' == 'true'">
<PackageReference Include="Mono.ApiTools.MSBuildTasks" Version="0.3.0" PrivateAssets="all" />
</ItemGroup>
<Target Name="_RemoveObsoleteItemsFromReferenceAssembly"
AfterTargets="CoreCompile"
Condition="'$(ProduceReferenceAssembly)' == 'true'">
<RemoveObsoleteSymbols Assembly="@(IntermediateRefAssembly)" Condition="Exists('@(IntermediateRefAssembly)')" />
</Target>
<!--
===================================================================================================================
_SignAssembly
Sign the assembly using sn.
===================================================================================================================
-->
<PropertyGroup Condition=" $(IsWindows) and '$(SignAssembly)' == 'true' and '$(TargetPath)' != '' and '$(BuildingInsideVisualStudio)' != 'true'">
<_SignAssemblyAfterTargets>
CoreCompile
</_SignAssemblyAfterTargets>
<_SignAssemblyAfterTargets Condition="'$(CsWinRTIncludes)' != ''">
CsWinRTReplaceForPatchedRuntime
</_SignAssemblyAfterTargets>
</PropertyGroup>
<Target Name="_SignAssembly"
AfterTargets="$(_SignAssemblyAfterTargets)"
Condition=" $(IsWindows) and '$(SignAssembly)' == 'true' and '$(TargetPath)' != '' and '$(BuildingInsideVisualStudio)' != 'true' ">
<Exec Command=""$(_SnExePath)" -q -R @(IntermediateAssembly -> '"%(Identity)"') "$(AssemblyOriginatorKeyFile)"" />
<Exec Command=""$(_SnExePath)" -q -R @(IntermediateRefAssembly -> '"%(Identity)"') "$(AssemblyOriginatorKeyFile)"" Condition="'$(ProduceReferenceAssembly)' == 'true'" />
</Target>
<!--
===================================================================================================================
_SignAssemblyVerify
Verify that the output assembly is signed correctly for release.
===================================================================================================================
-->
<PropertyGroup Condition=" $(IsWindows) and '$(SignAssembly)' == 'true' and '$(Configuration)' == 'Release' and '$(TargetPath)' != '' and '$(BuildingInsideVisualStudio)' != 'true' ">
<_SignAssemblyVerifyAfterTargets>
Build
</_SignAssemblyVerifyAfterTargets>
</PropertyGroup>
<Target Name="_SignAssemblyVerify"
AfterTargets="$(_SignAssemblyVerifyAfterTargets)"
Condition=" $(IsWindows) and '$(SignAssembly)' == 'true' and '$(Configuration)' == 'Release' and '$(TargetPath)' != '' and '$(BuildingInsideVisualStudio)' != 'true' ">
<Exec Command=""$(_SnExePath)" -vf "$(TargetPath)"" StandardOutputImportance="Normal" />
<Exec Command=""$(_SnExePath)" -vf "$(TargetRefPath)"" StandardOutputImportance="Normal" Condition="'$(ProduceReferenceAssembly)' == 'true'" />
</Target>
<!--
===================================================================================================================
_CheckSkiaSharpBuildPropsImported
Make sure that SkiaSharp.Build.props was added.
===================================================================================================================
-->
<Target Name="_CheckSkiaSharpBuildPropsImported" BeforeTargets="BeforeBuild">
<Error Text="SkiaSharp.Build.props was not imported." Condition=" '$(SkiaSharpBuildPropsImported)' != 'true' " />
</Target>
<!--
===================================================================================================================
MDocGenerateDocs
Generated the XML documentation file using mdoc.
This runs during the build phase.
===================================================================================================================
-->
<PropertyGroup Condition=" '$(SkipMDocGenerateDocs)' != 'true' and $(IsWindows) and '$(Configuration)' == 'Release' ">
<MDocGenerateDocsAfterTargets>
CoreCompile
</MDocGenerateDocsAfterTargets>
</PropertyGroup>
<Target Name="_MDocGenerateDocsDep">
<PropertyGroup>
<MDocToolPath>$(Pkgmdoc)\tools\mdoc.exe</MDocToolPath>
<MDocOutputName>$(TargetName).xml</MDocOutputName>
<MDocOutputPath>$(TargetDir)$(MDocOutputName)</MDocOutputPath>
<MDocIntermediateOutputPath>$(IntermediateOutputPath)mdoc\</MDocIntermediateOutputPath>
<_ShouldGenerateDocs Condition=" '$(MDocDocumentationDirectory)' != '' and Exists('$(MDocDocumentationDirectory)\index.xml') ">true</_ShouldGenerateDocs>
</PropertyGroup>
<ItemGroup Condition=" '$(_ShouldGenerateDocs)' == 'true' ">
<_MDocInputs Include="$(MDocDocumentationDirectory)\**\*" />
</ItemGroup>
</Target>
<Target Name="MDocGenerateDocs" Condition=" '$(SkipMDocGenerateDocs)' != 'true' and $(IsWindows) and '$(Configuration)' == 'Release' "
AfterTargets="$(MDocGenerateDocsAfterTargets)" DependsOnTargets="_MDocGenerateDocsDep"
Inputs="@(_MDocInputs)" Outputs="$(MDocIntermediateOutputPath)$(MDocOutputName)">
<MakeDir Condition=" '$(_ShouldGenerateDocs)' == 'true' "
Directories="$(MDocIntermediateOutputPath)" />
<Exec Condition=" '$(_ShouldGenerateDocs)' == 'true' "
WorkingDirectory="$(MDocIntermediateOutputPath)"
Command="$(_ManagedExeLauncher) "$(MDocToolPath)" export-msxdoc --quiet=true "$(MDocDocumentationDirectory)"" />
<Copy Condition=" Exists('$(MDocIntermediateOutputPath)$(MDocOutputName)') "
SourceFiles="$(MDocIntermediateOutputPath)$(MDocOutputName)"
DestinationFiles="$(MDocOutputPath)"
ContinueOnError="false"
Retries="0" />
<ItemGroup Condition=" '$(_ShouldGenerateDocs)' == 'true' ">
<FileWrites Include="$(MDocOutputPath)" />
<FileWrites Include="$(MDocIntermediateOutputPath)\*" />
</ItemGroup>
</Target>
<!-- HACK: the new IDE seems to not like Analyzers in AdditionalFiles -->
<Target Name="After_InjectAdditionalFiles" AfterTargets="_InjectAdditionalFiles">
<ItemGroup>
<AdditionalFiles Remove="@(AdditionalFiles)" Condition="'%(Extension)' == '.dll'" />
</ItemGroup>
</Target>
<!-- Make sure we always build with a lower version of WinRT.Runtime.dll -->
<ItemGroup>
<FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" RuntimeFrameworkVersion="10.0.19041.27" TargetingPackVersion="10.0.19041.27" />
</ItemGroup>
<Import Project="SkiaSharp.Build.Override.targets" Condition="Exists('SkiaSharp.Build.Override.targets')" />
<PropertyGroup>
<TargetFrameworks Condition="'$(TargetFrameworks)' == '' and '$(TargetFramework)' == ''">net0.0-invalid</TargetFrameworks>
</PropertyGroup>
</Project>