[Tizen] Add BuildTools 2.1.0-rc1-02804-05
[platform/upstream/coreclr.git] / Tools / sign.targets
1 <?xml version="1.0" encoding="utf-8"?>
2 <Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
4   <PropertyGroup>
5     <AuthenticodeSig Condition="'$(AuthenticodeSig)' == ''">Microsoft</AuthenticodeSig>
6     <StrongNameSig Condition="'$(StrongNameSig)' == '' and '$(SignType)' == 'real' and '$(UseOpenKey)' != 'true'">StrongName</StrongNameSig>
7   </PropertyGroup>
8
9   <UsingTask AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" TaskName="OpenSourceSign" />
10   <UsingTask AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" TaskName="WriteSigningRequired" />
11
12   <PropertyGroup Condition="'$(SkipSigning)'!='true'">
13
14     <!-- For older support set AssemblyKey base on Use*Key properties but moving forward projects should just set AssemblyKey -->
15     <AssemblyKey Condition="'$(AssemblyKey)'=='' and '$(UseOpenKey)' == 'true'">Open</AssemblyKey>
16     <AssemblyKey Condition="'$(AssemblyKey)'=='' and '$(UseECMAKey)' == 'true'">ECMA</AssemblyKey>
17     <AssemblyKey Condition="'$(AssemblyKey)'=='' and '$(UseMSFTKey)' == 'true'">MSFT</AssemblyKey>
18
19     <!-- Force all test projects to use the Test key -->
20     <AssemblyKey Condition="'$(IsTestProject)' == 'true'">Test</AssemblyKey>
21
22     <AssemblyOriginatorKeyFile Condition="'$(AssemblyKey)' == 'MSFT'">$(ToolsDir)MSFT.snk</AssemblyOriginatorKeyFile>
23     <AssemblyOriginatorKeyFile Condition="'$(AssemblyKey)' == 'ECMA'">$(ToolsDir)ECMA.snk</AssemblyOriginatorKeyFile>
24     <AssemblyOriginatorKeyFile Condition="'$(AssemblyKey)' == 'Open'">$(ToolsDir)Open.snk</AssemblyOriginatorKeyFile>
25     <AssemblyOriginatorKeyFile Condition="'$(AssemblyKey)' == 'SilverlightPlatform'">$(ToolsDir)SilverlightPlatformPublicKey.snk</AssemblyOriginatorKeyFile>
26     <AssemblyOriginatorKeyFile Condition="'$(AssemblyKey)' == 'SilverlightExtension'">$(ToolsDir)SilverlightPublicKey.snk</AssemblyOriginatorKeyFile>
27
28     <StrongNameSig Condition="'$(AssemblyKey)' == 'Open'">Open</StrongNameSig>
29     <StrongNameSig Condition="'$(AssemblyKey)' == 'SilverlightPlatform'">SilverlightCert121</StrongNameSig>
30     <StrongNameSig Condition="'$(AssemblyKey)' == 'SilverlightExtension'">MsSharedLib</StrongNameSig>
31
32     <!-- Don't sign test assemblies with the Microsoft Key, as this affects APIs checking if the test assembly is an MS Key -->
33     <AssemblyOriginatorKeyFile Condition="'$(AssemblyKey)' == 'Test'">$(ToolsDir)Test.snk</AssemblyOriginatorKeyFile>
34
35     <SignAssembly>true</SignAssembly>
36     <DelaySign>true</DelaySign>
37
38     <DelaySign Condition="'$(AssemblyKey)' == 'Test'">false</DelaySign>
39
40     <!--
41       Setting DelaySign to true when running build on unix because of Roslyn doesn't support full signing on non-windows.
42       See issue https://github.com/dotnet/roslyn/issues/8210.
43     -->
44     <DelaySign Condition="'$(RunningOnUnix)' == 'true'">true</DelaySign>
45
46     <DefineConstants>$(DefineConstants);SIGNED</DefineConstants>
47
48     <!-- applicable values for SignType are public, test or real -->
49     <SignType Condition="'$(SignType)' == ''">public</SignType>
50
51     <ShouldWriteSigningRequired Condition="'$(IsTestProject)' == 'true'">false</ShouldWriteSigningRequired>
52     <ShouldWriteSigningRequired Condition="'$(SkipSigning)' == 'true'">false</ShouldWriteSigningRequired>
53     <ShouldWriteSigningRequired Condition="'$(SignType)' == 'public' or '$(SignType)' == 'oss'">false</ShouldWriteSigningRequired>
54     <ShouldWriteSigningRequired Condition="'$(ShouldWriteSigningRequired)'==''">true</ShouldWriteSigningRequired>
55
56     <ShouldOpenSourceSign Condition="'$(SignType)' == 'public' or '$(SignType)' == 'oss'">$(DelaySign)</ShouldOpenSourceSign>
57     <ShouldOpenSourceSign Condition="'$(SkipSigning)' == 'true'">false</ShouldOpenSourceSign>
58   </PropertyGroup>
59
60   <!-- stub for signing.  for official builds this is replaced with the real one -->
61   <Target Name="SignFiles" AfterTargets="AfterBuild" />
62
63   <Target Name="SignFilesLocally"
64           BeforeTargets="SignFiles"
65           Condition="'$(RunningOnUnix)' != 'true'">
66
67     <ItemGroup>
68       <FilesToSignLocally Include="@(FilesToSign)" Condition="'%(FilesToSign.StrongName)' == 'Open'">
69         <AssemblyKeyFile>$(ToolsDir)Open.snk</AssemblyKeyFile>
70       </FilesToSignLocally>
71       <!-- Clear out the strong name metadata for open keys -->
72       <FilesToSign Condition="'%(FilesToSign.StrongName)' == 'Open'">
73         <StrongName></StrongName>
74       </FilesToSign>
75     </ItemGroup>
76
77     <!-- Depends on sn being on the path thus will only work in some windows environments -->
78     <Exec Condition="'@(FilesToSignLocally)' != ''"
79           Command="sn -R %(FilesToSignLocally.Identity) %(FilesToSignLocally.AssemblyKeyFile)"
80           StandardOutputImportance="Low" />
81   </Target>
82
83   <!-- writes a signing marker file containing the required signatures -->
84   <Target Name="WriteSigningRequired"
85           AfterTargets="AfterBuild"
86           Condition="'$(ShouldWriteSigningRequired)' == 'true'"
87           Inputs="$(TargetPath)"
88           Outputs="$(TargetPath).requires_signing">
89     <WriteSigningRequired AuthenticodeSig="$(AuthenticodeSig)"
90                           StrongNameSig="$(StrongNameSig)"
91                           MarkerFile="$(TargetPath).requires_signing" />
92     <ItemGroup>
93       <FileWrites Include="%(IntermediateAssembly.Identity).requires_signing" />
94     </ItemGroup>
95   </Target>
96
97   <!--
98     NOTE: This mechanism for wiring in the OpenSourceSign target can't be changed to any of the following:
99
100         * AfterTargets=Compile -> hit by intellisense builds while @(IntermediateAssembly) doesn't exist yet.
101         * AfterTargets=PrepareForRun -> hit after @(IntermediateAssembly) has already been copied to output.
102         * BeforeTargets=CopyFilesToOutputDirectory -> does not work on Mono.
103   -->
104   <PropertyGroup>
105     <PrepareForRunDependsOn>OpenSourceSign;$(PrepareForRunDependsOn)</PrepareForRunDependsOn>
106   </PropertyGroup>
107
108   <Target Name="OpenSourceSign"
109           Condition="'$(ShouldOpenSourceSign)' == 'true' and '@(IntermediateAssembly)' != ''"
110           Inputs="@(IntermediateAssembly)"
111           Outputs="%(IntermediateAssembly.Identity).oss_signed"
112           >
113     <OpenSourceSign AssemblyPath="%(IntermediateAssembly.Identity)" />
114     <Touch Files="%(IntermediateAssembly.Identity).oss_signed" AlwaysCreate="true" />
115     <ItemGroup>
116       <FileWrites Include="%(IntermediateAssembly.Identity).oss_signed" />
117     </ItemGroup>
118   </Target>
119
120 </Project>