<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <SdkDebugLayoutOutputDirectory>$(LayoutDirectory)/$(ArtifactNameSdkDebug)</SdkDebugLayoutOutputDirectory>
    <CombinedHostHostFxrFrameworkSdkOutputDirectory>$(LayoutDirectory)/$(ArtifactNameCombinedHostHostFxrFrameworkSdk)</CombinedHostHostFxrFrameworkSdkOutputDirectory>
    <SdkLanguagePackOutputDirectory>$(LayoutDirectory)/$(ArtifactNameSdkLanguagePack)</SdkLanguagePackOutputDirectory>
    <SatelliteAssemblies>*.resources.dll</SatelliteAssemblies>
    <WindowsSatelliteAssembliesRegEx>.*.resources.dll</WindowsSatelliteAssembliesRegEx>
  </PropertyGroup>

  <Target DependsOnTargets="Init" Name="SetupLayoutInputsOutputs" >
    <!-- Set up Items with Layout Input Files -->
    <ItemGroup>
      <SdkLayoutInput Include="$(OutputDirectory)/sdk/**/*" />
      <SdkDebugLayoutInput Include="$(SymbolsDirectory)/sdk/**/*" />
      <CombinedHostHostFxrFrameworkSdkInput Include="$(OutputDirectory)/**/*" />
      <SdkLanguagePackInput Include="$(OutputDirectory)/sdk/**/$(SatelliteAssemblies)" />

      <AspNetRuntimeFilesInput Include="$(AspNetRuntimePackageStorePublishDirectory)/**/*" />

      <MSBuildExtensionsInput Include="$(MSBuildExtensionsLayoutDirectory)/msbuildExtensions/**/*" />
      <MSBuildExtensionsVerInput Include="$(MSBuildExtensionsLayoutDirectory)/msbuildExtensions-ver/**/*" />
      <CombinedMSBuildExtensionsInput Include="@(MSBuildExtensionsInput)" />
      <CombinedMSBuildExtensionsInput Include="@(MSBuildExtensionsVerInput)" />
    </ItemGroup>

    <MakeRelative
      Path1="$(OutputDirectory)/"
      Path2="%(SdkLayoutInput.Identity)" >
      <Output TaskParameter="RelativePath" ItemName="SdkRelativeOutputFiles" />
    </MakeRelative>
    <MakeRelative
      Path1="$(SymbolsDirectory)"
      Path2="%(SdkDebugLayoutInput.Identity)" >
      <Output TaskParameter="RelativePath" ItemName="SdkDebugRelativeOutputFiles" />
    </MakeRelative>
    <MakeRelative
      Path1="$(OutputDirectory)/"
      Path2="%(CombinedHostHostFxrFrameworkSdkInput.Identity)" >
      <Output TaskParameter="RelativePath" ItemName="CombinedHostHostFxrFrameworkSdkRelativeOutputFiles" />
    </MakeRelative>
    <MakeRelative
      Path1="$(OutputDirectory)/"
      Path2="%(SdkLanguagePackInput.Identity)" >
      <Output TaskParameter="RelativePath" ItemName="SdkLanguagePackRelativeOutputFiles" />
    </MakeRelative>

    <MakeRelative
      Path1="$(MSBuildExtensionsLayoutDirectory)/msbuildExtensions/"
      Path2="%(MSBuildExtensionsInput.Identity)" >
      <Output TaskParameter="RelativePath" ItemName="MSBuildExtensionsRelativeOutputFiles" />
    </MakeRelative>
    <MakeRelative
      Path1="$(MSBuildExtensionsLayoutDirectory)/msbuildExtensions-ver/"
      Path2="%(MSBuildExtensionsVerInput.Identity)" >
      <Output TaskParameter="RelativePath" ItemName="MSBuildExtensionsVerRelativeOutputFiles" />
    </MakeRelative>

    <ItemGroup>
      <CombinedMSBuildExtensionsRelativeOutputFiles Include="@(MSBuildExtensionsRelativeOutputFiles)" />
      <CombinedMSBuildExtensionsRelativeOutputFiles Include="@(MSBuildExtensionsVerRelativeOutputFiles -> '14.0/%(Identity)')" />
    </ItemGroup>

    <!-- Set up Items Defining Layouts for easy change -->
    <ItemGroup>
      <LayoutDefinition Include="Sdk">
        <InputFiles>@(SdkLayoutInput)</InputFiles>
        <OutputFiles>@(SdkRelativeOutputFiles -> '$(SdkLayoutOutputDirectory)/%(Identity)')</OutputFiles>
        <NameWithVersion>$(ArtifactNameWithVersionSdk)</NameWithVersion>
        <Name>$(ArtifactNameSdk)</Name>
      </LayoutDefinition>

      <LayoutDefinition Include="Debug">
        <InputFiles>@(SdkDebugLayoutInput)</InputFiles>
        <OutputFiles>@(SdkDebugRelativeOutputFiles -> '$(SdkDebugLayoutOutputDirectory)/%(Identity)')</OutputFiles>
        <NameWithVersion>$(ArtifactNameWithVersionSdkDebug)</NameWithVersion>
        <Name>$(ArtifactNameSdkDebug)</Name>
      </LayoutDefinition>

      <LayoutDefinition Include="CombinedHostHostFxrFrameworkSdk">
        <InputFiles>@(CombinedHostHostFxrFrameworkSdkInput)</InputFiles>
        <OutputFiles>@(CombinedHostHostFxrFrameworkSdkRelativeOutputFiles -> '$(CombinedHostHostFxrFrameworkSdkOutputDirectory)/%(Identity)')</OutputFiles>
        <NameWithVersion>$(ArtifactNameWithVersionCombinedHostHostFxrFrameworkSdk)</NameWithVersion>
        <Name>$(ArtifactNameCombinedHostHostFxrFrameworkSdk)</Name>
        <ExcludePatterns Condition=" '$(OSName)' == 'win' ">$(WindowsSatelliteAssembliesRegEx)</ExcludePatterns>
        <ExcludePatterns Condition=" '$(OSName)' != 'win' ">$(SatelliteAssemblies)</ExcludePatterns>
      </LayoutDefinition>

      <LayoutDefinition Include="SdkLanguagePack">
        <InputFiles>@(SdkLanguagePackInput)</InputFiles>
        <OutputFiles>@(SdkLanguagePackRelativeOutputFiles -> '$(SdkLanguagePackOutputDirectory)/%(Identity)')</OutputFiles>
        <NameWithVersion>$(ArtifactNameWithVersionSdkLanguagePack)</NameWithVersion>
        <Name>$(ArtifactNameSdkLanguagePack)</Name>
      </LayoutDefinition>
    </ItemGroup>

    <ItemGroup Condition=" '$(OS)' == 'Windows_NT' And '$(Architecture)' == 'x86' ">
      <LayoutDefinition Include="MSBuildExtensions">
        <InputFiles>@(CombinedMSBuildExtensionsInput)</InputFiles>
        <OutputFiles>@(CombinedMSBuildExtensionsRelativeOutputFiles -> '$(MSBuildExtensionsOutputDirectory)/%(Identity)')</OutputFiles>
      </LayoutDefinition>
    </ItemGroup>
  </Target>

  <Target Name="Layout"
          DependsOnTargets="Init;SetupLayoutInputsOutputs"
          Inputs="@(LayoutDefinition -> '%(InputFiles)')"
          Outputs="@(LayoutDefinition -> '%(OutputFiles)')" >

    <!-- Copy Files to layout directories based on defintiions -->
    <Copy SourceFiles="%(LayoutDefinition.InputFiles)"
          DestinationFiles="%(LayoutDefinition.OutputFiles)"
          SkipUnchangedFiles="true" />
  </Target>

</Project>