[dotnet] Generate WorkloadManifest.targets for each platform using a script. (#19421)
This is easier than maintaining four different template files, also there will be significant changes in the WorkloadManifest.targets file with the upcoming multi-targeting changes, so this makes those changes simpler.
This commit is contained in:
Родитель
3a9097a52f
Коммит
6169939693
|
@ -173,11 +173,9 @@ Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.json: Makefile $(TOP)/Make.con
|
|||
$$(Q_GEN) ./generate-workloadmanifest-json.csharp "$(1)" "$(3)" "$(5)" "$$(DOTNET_$(4)_RUNTIME_IDENTIFIERS)" "$$@.tmp" "$$(DOTNET_WINDOWS_PLATFORMS)"
|
||||
$$(Q) mv $$@.tmp $$@
|
||||
|
||||
Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.targets: Workloads/WorkloadManifest.$(1).template.targets Makefile $(TOP)/Make.config.inc $(GIT_DIRECTORY)/HEAD $(GIT_DIRECTORY)/index | Workloads/Microsoft.NET.Sdk.$(1)
|
||||
Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.targets: Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index Makefile generate-workloadmanifest-targets.csharp | Workloads/Microsoft.NET.Sdk.$(1)
|
||||
$$(Q) rm -f $$@.tmp
|
||||
$$(Q_GEN) sed \
|
||||
-e "s/@NUGET_VERSION_NO_METADATA@/$3/g" \
|
||||
$$< > $$@.tmp
|
||||
$$(Q_GEN) ./generate-workloadmanifest-targets.csharp "$(1)" "$$@.tmp" "$$(DOTNET_WINDOWS_PLATFORMS)" "$(DOTNET_TFM)" "net7.0"
|
||||
$$(Q) mv $$@.tmp $$@
|
||||
|
||||
Workloads/Microsoft.NET.Sdk.$(1)/LICENSE: $(TOP)/LICENSE | Workloads/Microsoft.NET.Sdk.$(1)
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
<Project>
|
||||
<ImportGroup Condition=" '$(TargetPlatformIdentifier)' == 'MacCatalyst' ">
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net8" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '8.0')) " />
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net7" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '7.0')) " />
|
||||
</ImportGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '6.0')) ">
|
||||
<SdkSupportedTargetPlatformIdentifier Include="maccatalyst" DisplayName="Mac Catalyst" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,12 +0,0 @@
|
|||
<Project>
|
||||
<ImportGroup Condition=" '$(TargetPlatformIdentifier)' == 'iOS' ">
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net8" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '8.0')) " />
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net7" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '7.0')) " />
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Windows.Sdk.Aliased.net8" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '8.0')) And $([MSBuild]::IsOSPlatform('windows'))" />
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Windows.Sdk.Aliased.net7" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '7.0')) And $([MSBuild]::IsOSPlatform('windows'))" />
|
||||
</ImportGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '6.0')) ">
|
||||
<SdkSupportedTargetPlatformIdentifier Include="ios" DisplayName="iOS" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,10 +0,0 @@
|
|||
<Project>
|
||||
<ImportGroup Condition=" '$(TargetPlatformIdentifier)' == 'macOS' ">
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net8" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '8.0')) " />
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net7" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '7.0')) " />
|
||||
</ImportGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '6.0')) ">
|
||||
<SdkSupportedTargetPlatformIdentifier Include="macos" DisplayName="macOS" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,10 +0,0 @@
|
|||
<Project>
|
||||
<ImportGroup Condition=" '$(TargetPlatformIdentifier)' == 'tvOS' ">
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net8" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '8.0')) " />
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.$(TargetPlatformIdentifier).Sdk.net7" Condition=" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '7.0')) " />
|
||||
</ImportGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '6.0')) ">
|
||||
<SdkSupportedTargetPlatformIdentifier Include="tvos" DisplayName="tvOS" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env /Library/Frameworks/Mono.framework/Commands/csharp -s
|
||||
|
||||
// arguments are: <platform> <outputPath>
|
||||
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
var args = Environment.GetCommandLineArgs ();
|
||||
var expectedArgumentCount = 5;
|
||||
if (args.Length != expectedArgumentCount + 3 /* 2 default arguments (executable + script) + 'expectedArgumentCount' arguments we're interested in */) {
|
||||
// first arg is "/Library/Frameworks/Mono.framework/Versions/4.8.0/lib/mono/4.5/csharp.exe"
|
||||
// second arg the script itself
|
||||
// then comes the ones we care about
|
||||
Console.WriteLine ($"Need {expectedArgumentCount} arguments, got {args.Length - 3}");
|
||||
Environment.Exit (1);
|
||||
return;
|
||||
}
|
||||
|
||||
var argumentIndex = 3;
|
||||
var platform = args [argumentIndex++];
|
||||
var outputPath = args [argumentIndex++];
|
||||
var windowsPlatforms = args [argumentIndex++].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var hasWindows = Array.IndexOf (windowsPlatforms, platform) >= 0;
|
||||
var currentApiVersion = args [argumentIndex++];
|
||||
var olderApiVersions = args [argumentIndex++];
|
||||
|
||||
var platformLowerCase = platform.ToLowerInvariant ();
|
||||
var tfm = currentApiVersion;
|
||||
|
||||
var supportedTFMs = new List<string> ();
|
||||
supportedTFMs.Add (currentApiVersion);
|
||||
supportedTFMs.AddRange (olderApiVersions.Split (' '));
|
||||
supportedTFMs = supportedTFMs.Select (v => v.Replace ("net", "")).ToList ();
|
||||
|
||||
using (var writer = new StreamWriter (outputPath)) {
|
||||
writer.WriteLine ($"<Project>");
|
||||
writer.WriteLine ($" <ImportGroup Condition=\" '$(TargetPlatformIdentifier)' == '{platform}' \">");
|
||||
foreach (var tfv in supportedTFMs) {
|
||||
var major = Version.Parse (tfv).Major.ToString ();
|
||||
writer.WriteLine ($" <Import Project=\"Sdk.props\" Sdk=\"Microsoft.{platform}.Sdk.net{major}\" Condition=\" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '{tfv}'))\" />");
|
||||
}
|
||||
if (hasWindows) {
|
||||
foreach (var tfv in supportedTFMs) {
|
||||
var major = Version.Parse (tfv).Major.ToString ();
|
||||
writer.WriteLine ($" <Import Project=\"Sdk.props\" Sdk=\"Microsoft.{platform}.Windows.Sdk.Aliased.net{major}\" Condition=\" $([MSBuild]::VersionEquals($(TargetFrameworkVersion), '{tfv}')) And $([MSBuild]::IsOSPlatform('windows'))\" />");
|
||||
}
|
||||
}
|
||||
writer.WriteLine ($" </ImportGroup>");
|
||||
writer.WriteLine ();
|
||||
writer.WriteLine ($" <ItemGroup Condition=\" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '6.0')) \">");
|
||||
writer.WriteLine ($" <SdkSupportedTargetPlatformIdentifier Include=\"{platformLowerCase}\" DisplayName=\"{platform}\" />");
|
||||
writer.WriteLine ($" </ItemGroup>");
|
||||
|
||||
writer.WriteLine ($"</Project>");
|
||||
writer.WriteLine ();
|
||||
}
|
||||
|
||||
Environment.Exit (0);
|
Загрузка…
Ссылка в новой задаче