Merge pull request #642 from Ventero/CleanCopyLocal
[mono.git] / mcs / tools / xbuild / xbuild / 4.0 / Microsoft.Common.targets
index 3966a3c7b987e90c9b88495903728f92d2806626..0c26fe9395e10babf40f48e840c6e6ad8f493fcc 100644 (file)
                        <Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName"/>
                </GetReferenceAssemblyPaths>
 
-               <CreateProperty Value="$(_TargetFrameworkDirectories);$(TargetFrameworkDirectory)">
-                       <Output TaskParameter="Value" PropertyName="TargetFrameworkDirectory"/>
-               </CreateProperty>
+               
+               <!-- Remove duplicates. -->
+               <ItemGroup>
+                       <_TargetFrameworkDirectories Include="$(_TargetFrameworkDirectories);$(TargetFrameworkDirectory)" KeepDuplicates="false" />
+               </ItemGroup>
+               <PropertyGroup>
+                       <TargetFrameworkDirectory>@(_TargetFrameworkDirectories)</TargetFrameworkDirectory>
+               </PropertyGroup>
+               
+               <ItemGroup Condition="'$(ImplicitlyExpandDesignTimeFacades)' == 'true'">
+                       <DesignTimeFacadeDirectoryRoots Include="$(TargetFrameworkDirectory)" />
+                       <DesignTimeFacadeDirectories Include="%(DesignTimeFacadeDirectoryRoots.Identity)\Facades\" Condition="Exists('%(DesignTimeFacadeDirectoryRoots.Identity)\Facades\')" />
+                       <_DesignTimeFacadeAssemblies Include="%(DesignTimeFacadeDirectories.Identity)\*.dll"/>
+               </ItemGroup>
+               
+               <PropertyGroup Condition="'@(DesignTimeFacadeDirectories)' != ''">
+                       <TargetFrameworkDirectory>$(TargetFrameworkDirectory);@(DesignTimeFacadeDirectories)</TargetFrameworkDirectory>
+               </PropertyGroup>
+               
        </Target>
 
        <PropertyGroup>
                        PrepareForBuild
                </ResolveAssemblyReferencesDependsOn>
        </PropertyGroup>
+       
+       <PropertyGroup Condition="'$(TargetFrameworkMoniker)' != ''">
+               <TargetFrameworkMonikerAssemblyAttributesPath Condition="'$(TargetFrameworkMonikerAssemblyAttributesPath)' == ''">$(IntermediateOutputPath)$(TargetFrameworkMoniker).AssemblyAttribute$(DefaultLanguageSourceExtension)</TargetFrameworkMonikerAssemblyAttributesPath>
+               <GenerateTargetFrameworkAttribute Condition="'$(GenerateTargetFrameworkAttribute)' == '' and '$(TargetFrameworkMoniker)' 
+       != '' and '$(TargetingClr2Framework)' != 'true'">true</GenerateTargetFrameworkAttribute>
+       </PropertyGroup>
+       
+       <ItemGroup Condition="'$(GenerateTargetFrameworkAttribute)' == 'true'">
+               <FileWrites Include="$(TargetFrameworkMonikerAssemblyAttributesPath)" />
+       </ItemGroup>
+       
+       <Target Name="GenerateTargetFrameworkMonikerAttribute"
+               DependsOnTargets="PrepareForBuild;GetReferenceAssemblyPaths"
+               Inputs="$(MSBuildToolsPath)\Microsoft.Common.targets"
+               Outputs="$(TargetFrameworkMonikerAssemblyAttributesPath)"
+               Condition="'$(GenerateTargetFrameworkAttribute)' == 'true'">
+               
+               <WriteLinesToFile
+                       File="$(TargetFrameworkMonikerAssemblyAttributesPath)"
+                       Lines="$(TargetFrameworkMonikerAssemblyAttributeText)"
+                       Overwrite="true"
+                       ContinueOnError="true"
+                       Condition="'@(Compile)' != '' and '$(TargetFrameworkMonikerAssemblyAttributeText)' != ''"
+               />
+       </Target>
 
        <Target Name="ResolveReferences" DependsOnTargets="$(ResolveReferencesDependsOn)"/>
 
                >
                        <Output TaskParameter="ResolvedFiles" ItemName="ResolvedFiles"/>
                        <Output TaskParameter="ResolvedFiles" ItemName="ReferencePath"/>
-                       <Output TaskParameter="ResolvedDependencyFiles" ItemName="_ResolvedDependencyFiles"/>
+                       <Output TaskParameter="ResolvedDependencyFiles" ItemName="ReferenceDependencyPaths"/>
                        <Output TaskParameter="RelatedFiles" ItemName="_ReferenceRelatedPaths"/>
                        <Output TaskParameter="SatelliteFiles" ItemName="ReferenceSatellitePaths"/>
                        <Output TaskParameter="CopyLocalFiles" ItemName="ReferenceCopyLocalPaths"/>
+                       
+                       <!-- FIXME: backwards compatibility -->
+                       <Output TaskParameter="ResolvedDependencyFiles" ItemName="_ResolvedDependencyFiles"/>
                </ResolveAssemblyReference>
        </Target>
 
 
        <PropertyGroup>
                <BuildDependsOn>
+                       BuildOnlySettings;
                        BeforeBuild;
                        CoreBuild;
                        AfterBuild
                </BuildDependsOn>
        </PropertyGroup>
-
+       
+       <Target Name="BuildOnlySettings"/>
        <Target Name="BeforeBuild"/>
        <Target Name="AfterBuild"/>
 
        <PropertyGroup>
                <CompileDependsOn>
                        ResolveReferences;
+                       GenerateTargetFrameworkMonikerAttribute;
                        BeforeCompile;
                        _TimestampBeforeCompile;
                        CoreCompile;
                        LicenseTarget = "$(TargetFileName)"
                        OutputDirectory = "$(IntermediateOutputPath)"
                        OutputLicense = "$(IntermediateOutputPath)$(TargetFileName).licenses"
-                       ReferencedAssemblies = "@(ReferencePath);@(_ResolvedDependencyFiles)"
+                       ReferencedAssemblies = "@(ReferencePath);@(ReferenceDependencyPaths)"
                        ToolPath = "$(LCToolPath)"
                        ToolExe = "$(LCToolExe)">
 
                     we can safely remove the file list now -->
                <Delete Files="$(IntermediateOutputPath)$(CleanFile)" TreatErrorsAsWarnings="true" />
        </Target>
+       
+       <PropertyGroup>
+               <ImplicitlyExpandDesignTimeFacades>true</ImplicitlyExpandDesignTimeFacades>
+
+               <ResolveReferencesDependsOn>
+                       $(ResolveReferencesDependsOn);
+                       ImplicitlyExpandDesignTimeFacades
+               </ResolveReferencesDependsOn>
+
+               <ImplicitlyExpandDesignTimeFacadesDependsOn>
+                       $(ImplicitlyExpandDesignTimeFacadesDependsOn);
+                       GetReferenceAssemblyPaths
+               </ImplicitlyExpandDesignTimeFacadesDependsOn>
+       </PropertyGroup>
+       
+       <Target Name="ImplicitlyExpandDesignTimeFacades" Condition="'$(ImplicitlyExpandDesignTimeFacades)' == 'true'" DependsOnTargets="$(ImplicitlyExpandDesignTimeFacadesDependsOn)">
+       
+               <PropertyGroup>
+                       <_HasReferenceToSystemRuntime Condition="'%(_ResolvedDependencyFiles.Filename)' == 'System.Runtime'">true</_HasReferenceToSystemRuntime>
+               </PropertyGroup>
+
+               <ItemGroup Condition="'$(_HasReferenceToSystemRuntime)' == 'true'">
+                       <!-- If the user has manually referenced these assemblies, remove them so we don't end up with duplicates -->
+                       <ReferencePath Remove="@(_DesignTimeFacadeAssemblies)"/>
+                       <ReferencePath Include="%(_DesignTimeFacadeAssemblies.Identity)">
+                               <WinMDFile>false</WinMDFile>
+                               <CopyLocal>false</CopyLocal>
+                               <ResolvedFrom>ImplicitlyExpandDesignTimeFacades</ResolvedFrom>
+                       </ReferencePath>
+                       <_ResolveAssemblyReferenceResolvedFiles Include="@(ReferencePath)" Condition="'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandDesignTimeFacades'" />
+               </ItemGroup>
+    
+               <Message Importance="Low" Text="Including @(ReferencePath)" Condition="'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandDesignTimeFacades'" />
 
+       </Target>
+       
        <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportAfter\*"
                Condition="'$(ImportByWildcardAfterMicrosoftCommonTargets)' == 'true' and Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportAfter')"/>
 </Project>