From bce6e64c5c5b9059b55480991de3fad2b6b8ee01 Mon Sep 17 00:00:00 2001 From: Rumtery Date: Thu, 21 Sep 2023 01:18:21 +0300 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit a5b75b8179d7db4ff720e19233d2b99fd15b94f0 Author: Jakob Botsch Nielsen Date: Wed Sep 20 22:04:58 2023 +0200 JIT: Fix invalid containment of vector broadcasts (#92333) The containment checks for vector broadcasts were missing a size check, meaning that a uint broadcast could contain a ubyte/ushort indirection. That would lead to out-of-bounds reads. Fix #83387 commit 614d86440367d09b691aafe4144ed79c3af08a11 Author: Stephen Toub Date: Wed Sep 20 15:56:37 2023 -0400 Use Utf8JsonWriterCache in JsonNode.To{Json}String (#92358) commit c0b51503fae88c8ce382166833310ccf21912f10 Author: Andy Gocke Date: Wed Sep 20 12:46:37 2023 -0700 Bring back CopyOutputSymbolsToPublishDirectory (#92315) I accidentally removed this property from AOT compilation when adding support for Mac dsym bundles. This change re-enables support for suppressing debugging symbols in the output. Fixes #92188 commit b4be77b69d426f3e83777b024ee7d98e325bf593 Author: Kunal Pathak Date: Wed Sep 20 10:17:22 2023 -0700 Update the assert for BlendVariable (#92183) * Update the assert for BlendVariable * Add test cases * Add Sse41.IsSupported check commit e235aeff6c822ad18a63b39819f61031a1ac95e2 Author: Miha Zupan Date: Wed Sep 20 17:45:31 2023 +0200 Set severity of rule CA1870 to warning (#92135) * Set severity of rule CA1870 to warning * Replace one more usage in nativeaot corelib * Set severity for tests as well * pragma disable the rule in nativeaot's reflection impl commit 901f780b2e7e983db02c293be7ffd176daed9a22 Author: Ilona Tomkowicz <32700855+ilonatommy@users.noreply.github.com> Date: Wed Sep 20 17:45:01 2023 +0200 [wasm][debugger] Add tests for indexing by object schema (#92268) * Indexing with object: works. * Update expected line numbers. commit d6ff46557e7925ca0ff1a735a9a46db72d1a3ca1 Author: Johan Lorensson Date: Wed Sep 20 17:24:39 2023 +0200 Add missing case for constrained gsharedvt call. (#92338) https://github.com/dotnet/runtime/commit/1b788f4dc3e3a8829488e52c032ad6a70671e070 added a new value to our MonoRgctxInfoType enum type, but appears that all cases where not full adjusted. Running System.Buffers tests in full AOT hits the assert in info_equal about missing case, https://github.com/dotnet/runtime/blob/0dc5903679606b072adac70a268cdb77d1147b3e/src/mono/mono/mini/mini-generic-sharing.c#L2908. This commit adds the new enum value and align handling similar to other cases added by that commit. commit 36ab9056feba44e94e1eccc548148afcb4259b5d Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed Sep 20 09:51:37 2023 -0500 Update dependencies from https://github.com/dotnet/installer build 20230919.3 (#92339) Microsoft.Dotnet.Sdk.Internal From Version 9.0.100-alpha.1.23464.17 -> To Version 9.0.100-alpha.1.23469.3 Co-authored-by: dotnet-maestro[bot] commit 32c3355c502c4d8fd8f6dd50d23e9676faf03e3c Author: Stephen Toub Date: Wed Sep 20 09:42:27 2023 -0400 Fix downlevel build break in TensorPrimitives (#92269) * Fix downlevel build break in TensorPrimitives * Make net6.0 Tensors use ns2.0 implementation * Add net6.0 and net7.0 to Tensors temporarily since those are shipping in 8.0 branch * Only build net6.0 and net7.0 Tensors when not in source-build --------- Co-authored-by: Eric StJohn commit e8c3052573d17ac1148ec394986046b29a4d7227 Author: Matt Thalman Date: Wed Sep 20 07:45:55 2023 -0500 Update Newtonsoft.Json from 13.0.1 to 13.0.3 (#92298) commit b4912a7f8eed37d612a5d026c17a225388f8ce76 Author: Zoltan Varga Date: Wed Sep 20 08:12:52 2023 -0400 [wasi] Fix llvm target triple. (#92256) commit 0dc5903679606b072adac70a268cdb77d1147b3e Author: Artur Zgodziński Date: Wed Sep 20 11:45:46 2023 +0100 Fix trimming of DebuggerDisplay with Name (#92191) The `Name` and `Type` property of the `DebuggerDisplay` attribute accepts the same format string as its `Value` property, but does not prevent trimming members it references. Thanks to this fix, members referenced by any of these two properties are not trimmed and can be displayed by a debugger. commit 521e1e6e694a1077fa8709551b8acd38cdbd2c3f Author: Marie Píchová <11718369+ManickaP@users.noreply.github.com> Date: Wed Sep 20 12:28:18 2023 +0200 [QUIC] Throw ODE if connection/listener is disposed (#92215) * AcceptConnection/StreamAsync now throw ODE in case the listener/connection was stopped by DisposeAsync. * Fix exception type and make behavior stable for disposal commit d411f500a8b8bb8b74ee3f53eef97dd3b02a78dc Author: Stephen Toub Date: Wed Sep 20 06:24:58 2023 -0400 Avoid unnecessary array allocation in JsonHelpers.Utf8GetString on netstandard (#92304) commit 5883b728c8b29a7026cf3a807a22928cee844bc5 Author: Tarek Mahmoud Sayed Date: Tue Sep 19 19:52:38 2023 -0700 Fix options Validation with objects have indexers (#92309) commit fcf7b116e6faa046397dda0b75219b570965be7e Author: Sven Boemer Date: Tue Sep 19 17:51:32 2023 -0700 Prevent restoring illink for native-binplace.proj (#92289) Fixes https://github.com/dotnet/runtime/issues/92194. The reference to illink from `native-binplace.proj`, built as a reference of `build-native.proj`, was hitting a nuget bug with static graph restore. The bug seems to be specific to something about the project file (maybe the language-specific targets, since `native-binplace.proj` imports the `Microsoft.NET.Sdk`, but doesn't have a `csproj` extension). Fixed by explicitly marking this as not a source project, which will prevent the import of illink.targets. commit b049f42e5977ead2735402a79ad8247441cc3c7c Author: Egor Bogatov Date: Wed Sep 20 01:39:30 2023 +0200 Fix optSwitchConvert (#92249) Co-authored-by: Egor commit 41a8e3963f2f94bc19565553433a3f48c8af052f Author: Tanner Gooding Date: Tue Sep 19 15:09:19 2023 -0700 Ensure VN handles both forms of the xarch shift instructions for SIMD (#91601) commit 3b9b4fd5fcd3ff9ed0ea1622ff42f98a1068316b Author: Viktor Hofer Date: Tue Sep 19 23:29:29 2023 +0200 Move portable RID graph into runtime and clean-up (#92211) * Move portable RID graph into runtime and clean-up 1. Move portable RID graph into runtime 2. Allow updates to both the non-portable and portable RID graphs under source build. 3. Clean-up project and remove hacks * Update README and delete test * Fix RID graph update when the key already exists * Update src/libraries/Microsoft.NETCore.Platforms/readme.md Co-authored-by: Jan Kotas * Update src/libraries/Microsoft.NETCore.Platforms/readme.md Co-authored-by: Andy Gocke --------- Co-authored-by: Jan Kotas Co-authored-by: Andy Gocke commit 1185d19592d2a3f2ae79bd6cb0d7503db09b7d1d Author: Tanner Gooding Date: Tue Sep 19 13:41:15 2023 -0700 Don't generate AddMask as it requires more explicit consideration of semantics (#92282) commit a7cafec3e2108e57015eda8e970da41e4520e502 Author: Carlos Sánchez López <1175054+carlossanlop@users.noreply.github.com> Date: Tue Sep 19 12:14:24 2023 -0700 [main] Bump Microsoft.Private.IntelliSense package version (#92255) commit 094801ee62c9e01e6a3f0f4859a26490616e2191 Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue Sep 19 12:13:49 2023 -0700 [main] Update dependencies from dotnet/runtime dotnet/emsdk dotnet/hotreload-utils dotnet/cecil dotnet/sdk dotnet/source-build-reference-packages (#92175) * Update dependencies from https://github.com/dotnet/emsdk build 20230915.3 Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport From Version 9.0.0-alpha.1.23457.3 -> To Version 9.0.0-alpha.1.23465.3 * Update dependencies from https://github.com/dotnet/sdk build 20230915.37 Microsoft.DotNet.ApiCompat.Task From Version 9.0.100-alpha.1.23465.4 -> To Version 9.0.100-alpha.1.23465.37 * Update dependencies from https://github.com/dotnet/emsdk build 20230915.3 Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport From Version 9.0.0-alpha.1.23457.3 -> To Version 9.0.0-alpha.1.23465.3 * Update dependencies from https://github.com/dotnet/sdk build 20230916.1 Microsoft.DotNet.ApiCompat.Task From Version 9.0.100-alpha.1.23465.4 -> To Version 9.0.100-alpha.1.23466.1 * Update dependencies from https://github.com/dotnet/emsdk build 20230915.3 Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport From Version 9.0.0-alpha.1.23457.3 -> To Version 9.0.0-alpha.1.23465.3 * Update dependencies from https://github.com/dotnet/sdk build 20230918.4 Microsoft.DotNet.ApiCompat.Task From Version 9.0.100-alpha.1.23465.4 -> To Version 9.0.100-alpha.1.23468.4 * Update dependencies from https://github.com/dotnet/runtime build 20230916.6 Microsoft.DotNet.ILCompiler , Microsoft.NET.ILLink.Tasks , Microsoft.NET.Sdk.IL , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.ILAsm , runtime.native.System.IO.Ports , System.Text.Json From Version 9.0.0-alpha.1.23460.2 -> To Version 9.0.0-alpha.1.23466.6 * Update dependencies from https://github.com/dotnet/source-build-reference-packages build 20230915.1 Microsoft.SourceBuild.Intermediate.source-build-reference-packages From Version 8.0.0-alpha.1.23457.1 -> To Version 9.0.0-alpha.1.23465.1 * Update dependencies from https://github.com/dotnet/emsdk build 20230915.3 Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport From Version 9.0.0-alpha.1.23457.3 -> To Version 9.0.0-alpha.1.23465.3 * Update dependencies from https://github.com/dotnet/hotreload-utils build 20230918.2 Microsoft.DotNet.HotReload.Utils.Generator.BuildTool From Version 8.0.0-alpha.0.23461.1 -> To Version 8.0.0-alpha.0.23468.2 * Update dependencies from https://github.com/dotnet/cecil build 20230918.2 Microsoft.DotNet.Cecil From Version 0.11.4-alpha.23461.1 -> To Version 0.11.4-alpha.23468.2 * Update dependencies from https://github.com/dotnet/sdk build 20230918.31 Microsoft.DotNet.ApiCompat.Task From Version 9.0.100-alpha.1.23465.4 -> To Version 9.0.100-alpha.1.23468.31 * Update dependencies from https://github.com/dotnet/source-build-reference-packages build 20230918.3 Microsoft.SourceBuild.Intermediate.source-build-reference-packages From Version 8.0.0-alpha.1.23457.1 -> To Version 9.0.0-alpha.1.23468.3 --------- Co-authored-by: dotnet-maestro[bot] commit 9bd0e0dc36398910d8edaed8dcf44432ba7270ec Author: Jeremy Koritzinsky Date: Tue Sep 19 12:11:38 2023 -0700 Remove "Is supported on this TFM" logic from marshalling generators and instead handle it during factory construction (#91768) Co-authored-by: Jackson Schuster <36744439+jtschuster@users.noreply.github.com> commit 17eff3b13a3650f5d3ab9e478b14575a05ccda57 Author: Andy Ayers Date: Tue Sep 19 11:37:48 2023 -0700 JIT: generalize assert to handle SIMD64 (#92235) Fixes #91799. commit 67dbbeb7c2392fa53c621fe2ad5eb5c197475659 Author: Andy Ayers Date: Tue Sep 19 11:30:38 2023 -0700 JIT: add missing xarch RMW case (#92252) Handle the case where we're indirectly updating a local with a value that is not a constant. Fixes #92218. --- Directory.Build.props | 7 + Directory.Build.targets | 1 + eng/AvoidRestoreCycleOnSelfReference.targets | 14 - eng/CodeAnalysis.src.globalconfig | 3 + eng/CodeAnalysis.test.globalconfig | 3 + eng/SourceBuildPrebuiltBaseline.xml | 5 + eng/Version.Details.xml | 56 +- eng/Versions.props | 24 +- global.json | 2 +- src/coreclr/jit/emitxarch.cpp | 16 +- src/coreclr/jit/gentree.cpp | 4 +- src/coreclr/jit/lower.cpp | 2 +- src/coreclr/jit/lowerxarch.cpp | 3 + src/coreclr/jit/morph.cpp | 9 - src/coreclr/jit/switchrecognition.cpp | 9 +- src/coreclr/jit/valuenum.cpp | 60 + .../Microsoft.NETCore.Native.Publish.targets | 3 + .../Reflection/Runtime/General/Helpers.cs | 5 + src/libraries/Directory.Build.props | 4 + src/libraries/Directory.Build.targets | 1 - .../src/DataAnnotationValidateOptions.cs | 3 +- .../OptionsRuntimeTests.cs | 30 + .../Microsoft.NETCore.Platforms.sln | 78 - .../Microsoft.NETCore.Platforms/readme.md | 80 +- .../src/AssemblyResolver.cs | 111 - .../src/BuildTask.Desktop.cs | 13 - .../src/BuildTask.cs | 151 - .../src/Directory.Build.props | 9 + .../src/Extensions.cs | 46 - .../src/GenerateRuntimeGraph.cs | 427 - .../src/Microsoft.NETCore.Platforms.csproj | 89 +- .../src/PortableRuntimeIdentifierGraph.json | 475 + .../Microsoft.NETCore.Platforms/src/RID.cs | 208 - .../src/RuntimeGroup.cs | 298 - .../src/RuntimeGroupCollection.cs | 160 - .../src/RuntimeVersion.cs | 140 - .../src/UpdateRuntimeIdentifierGraph.cs | 54 + .../src/runtime.compatibility.json | 11768 ---------------- .../src/runtimeGroups.props | 296 - .../tests/AssemblyInfo.cs | 6 - .../tests/GenerateRuntimeGraphTests.cs | 264 - .../Microsoft.NETCore.Platforms/tests/Log.cs | 56 - .../Microsoft.NETCore.Platforms.Tests.csproj | 29 - .../tests/RidTests.cs | 66 - .../tests/RuntimeVersionTests.cs | 233 - .../tests/TestBuildEngine.cs | 56 - .../Configuration/BaseConfigurationRecord.cs | 10 +- .../src/System/Net/Quic/QuicConnection.cs | 7 +- .../src/System/Net/Quic/QuicListener.cs | 4 +- .../FunctionalTests/QuicConnectionTests.cs | 22 +- .../FunctionalTests/QuicListenerTests.cs | 6 +- .../ref/System.Numerics.Tensors.csproj | 3 +- .../src/System.Numerics.Tensors.csproj | 5 +- .../Tensors/TensorPrimitives.netcore.cs | 6 + .../Tensors/TensorPrimitives.netstandard.cs | 20 +- .../Reflection/TypeLoading/General/Helpers.cs | 19 +- .../Marshaling/BaseJSGenerator.cs | 1 - .../Marshaling/EmptyJSGenerator.cs | 1 - .../ComInterfaceDispatchMarshallerFactory.cs | 2 - ...anagedHResultExceptionMarshallerFactory.cs | 2 - .../ObjectUnwrapperMarshallerFactory.cs | 1 - .../StructAsHResultMarshallerFactory.cs | 2 - .../gen/Common/Resources/Strings.resx | 57 +- .../gen/Common/Resources/xlf/Strings.cs.xlf | 5 - .../gen/Common/Resources/xlf/Strings.de.xlf | 5 - .../gen/Common/Resources/xlf/Strings.es.xlf | 5 - .../gen/Common/Resources/xlf/Strings.fr.xlf | 5 - .../gen/Common/Resources/xlf/Strings.it.xlf | 5 - .../gen/Common/Resources/xlf/Strings.ja.xlf | 5 - .../gen/Common/Resources/xlf/Strings.ko.xlf | 5 - .../gen/Common/Resources/xlf/Strings.pl.xlf | 5 - .../Common/Resources/xlf/Strings.pt-BR.xlf | 5 - .../gen/Common/Resources/xlf/Strings.ru.xlf | 5 - .../gen/Common/Resources/xlf/Strings.tr.xlf | 5 - .../Common/Resources/xlf/Strings.zh-Hans.xlf | 5 - .../Common/Resources/xlf/Strings.zh-Hant.xlf | 5 - .../LibraryImportGenerator.cs | 18 +- .../LibraryImportGeneratorHelpers.cs | 25 +- .../PInvokeStubCodeGenerator.cs | 20 +- .../Marshalling/BlittableMarshaller.cs | 2 - .../Marshalling/BoolMarshaller.cs | 2 - .../Marshalling/CharMarshaller.cs | 6 - .../CustomTypeMarshallingGenerator.cs | 5 - .../Marshalling/DelegateMarshaller.cs | 2 - .../Marshalling/Forwarder.cs | 2 - .../MarshalAsMarshallingGeneratorFactory.cs | 16 - .../Marshalling/MarshallingGenerator.cs | 8 - .../Marshalling/SafeHandleMarshaller.cs | 192 - .../StaticPinnableManagedValueMarshaller.cs | 3 - ...nagedToManagedOwnershipTrackingStrategy.cs | 1 - .../SafeHandleMarshallingInfoProvider.cs | 14 +- .../src/Recognition/SrgsGrammar/SrgsRule.cs | 6 +- .../src/System/Text/Json/JsonHelpers.cs | 19 +- .../src/System/Text/Json/Nodes/JsonNode.To.cs | 50 +- .../System/Text/Json/Nodes/JsonValueOfT.cs | 29 +- .../Text/Json/Writer/Utf8JsonWriterCache.cs | 13 +- src/libraries/tests.proj | 1 - src/mono/mono/mini/mini-generic-sharing.c | 3 +- src/mono/mono/mini/mini-wasm.h | 4 + .../EvaluateOnCallFrameTests.cs | 9 +- .../debugger-test/debugger-evaluate-test.cs | 4 + .../JitBlue/Runtime_83387/Runtime_83387.cs | 19 + .../Runtime_83387/Runtime_83387.csproj | 8 + .../JitBlue/Runtime_91175/Runtime_91175.cs | 30 + .../Runtime_91175/Runtime_91175.csproj | 8 + .../JitBlue/Runtime_91798/Runtime_91798.cs | 43 + .../Runtime_91798/Runtime_91798.csproj | 9 + .../JitBlue/Runtime_92218/Runtime_92218.cs | 40 + .../Runtime_92218/Runtime_92218.csproj | 8 + .../src/linker/Linker.Steps/MarkStep.cs | 110 +- .../DebuggerDisplayAttributeOnType.cs | 20 +- .../DebuggerDisplayAttributeOnType.cs | 26 +- 112 files changed, 1261 insertions(+), 15124 deletions(-) delete mode 100644 eng/AvoidRestoreCycleOnSelfReference.targets delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs create mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs create mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RID.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs create mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs delete mode 100644 src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs delete mode 100644 src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/SafeHandleMarshaller.cs create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_83387/Runtime_83387.cs create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_83387/Runtime_83387.csproj create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_91175/Runtime_91175.cs create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_91175/Runtime_91175.csproj create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_91798/Runtime_91798.cs create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_91798/Runtime_91798.csproj create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_92218/Runtime_92218.cs create mode 100644 src/tests/JIT/Regression/JitBlue/Runtime_92218/Runtime_92218.csproj diff --git a/Directory.Build.props b/Directory.Build.props index ef11d8d95d177..4d3e8a8408abf 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -471,4 +471,11 @@ $(RepositoryEngineeringDir)NoTargetsSdk.BeforeTargets.targets $(RepositoryEngineeringDir)TraversalSdk.AfterTargets.targets + + + + $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.NETCore.Platforms', 'runtime.json')) + $([MSBuild]::NormalizePath('$(LibrariesProjectRoot)', 'Microsoft.NETCore.Platforms', 'src', 'runtime.json')) + + diff --git a/Directory.Build.targets b/Directory.Build.targets index 71e6f4f13b32f..c4c006eb266d5 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -217,4 +217,5 @@ Runtime/$(SharedFrameworkNugetVersion)/ + diff --git a/eng/AvoidRestoreCycleOnSelfReference.targets b/eng/AvoidRestoreCycleOnSelfReference.targets deleted file mode 100644 index cb665cb070d98..0000000000000 --- a/eng/AvoidRestoreCycleOnSelfReference.targets +++ /dev/null @@ -1,14 +0,0 @@ - - - - <_PackageIdTemp>$(PackageId) - $(PackageId)_temp - - - - - $(_PackageIdTemp) - - - \ No newline at end of file diff --git a/eng/CodeAnalysis.src.globalconfig b/eng/CodeAnalysis.src.globalconfig index 26c9d2e8cf74e..d06bf337e234c 100644 --- a/eng/CodeAnalysis.src.globalconfig +++ b/eng/CodeAnalysis.src.globalconfig @@ -489,6 +489,9 @@ dotnet_diagnostic.CA1868.severity = warning # CA1869: Cache and reuse 'JsonSerializerOptions' instances dotnet_diagnostic.CA1869.severity = warning +# CA1870: Use a cached 'SearchValues' instance +dotnet_diagnostic.CA1870.severity = warning + # CA2000: Dispose objects before losing scope dotnet_diagnostic.CA2000.severity = none diff --git a/eng/CodeAnalysis.test.globalconfig b/eng/CodeAnalysis.test.globalconfig index 0a50a68d677b0..76afd46a0b7b5 100644 --- a/eng/CodeAnalysis.test.globalconfig +++ b/eng/CodeAnalysis.test.globalconfig @@ -486,6 +486,9 @@ dotnet_diagnostic.CA1868.severity = none # CA1869: Cache and reuse 'JsonSerializerOptions' instances dotnet_diagnostic.CA1869.severity = none +# CA1870: Use a cached 'SearchValues' instance +dotnet_diagnostic.CA1870.severity = none + # CA2000: Dispose objects before losing scope dotnet_diagnostic.CA2000.severity = none diff --git a/eng/SourceBuildPrebuiltBaseline.xml b/eng/SourceBuildPrebuiltBaseline.xml index 06c1cda178257..0f3958675010e 100644 --- a/eng/SourceBuildPrebuiltBaseline.xml +++ b/eng/SourceBuildPrebuiltBaseline.xml @@ -19,6 +19,11 @@ + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ceb58d0764fb5..68a296dc447a8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -85,24 +85,24 @@ 02fe27cd6a9b001c8feb7938e6ef4b3799745759b - + https://github.com/dotnet/cecil - a112f15aa032c029b7d9c77df3427111d93cf407 + 89be445dd4936157533ad96bafb95f701430653a - + https://github.com/dotnet/emsdk - 7da45c33d57a762de5756f2c090e84327dae143f + bebe955e9f7d392fbca594b1c76c54ba2e27027e - + https://github.com/dotnet/source-build-reference-packages - 18302345498a62222dd3c236b3d1d140dbaed43d + b88b567fbf54c5404d039b80cfb86f09a681f604 - + https://github.com/dotnet/source-build-externals - de4dda48d0cf31e13182bc24107b2246c61ed483 + e9d6489787a5ea5400a31dfa34aa6ad6b590de9b @@ -293,34 +293,34 @@ https://github.com/dotnet/llvm-project dc18ea8f36885b70da5e7853aa6b5278ce8d0de4 - + https://github.com/dotnet/runtime - de0ab156194eb64deae0e1018db9a58f7b02f4a3 + ebe6f541ca2adea41f4b1dfc97774af371654bab - + https://github.com/dotnet/runtime - de0ab156194eb64deae0e1018db9a58f7b02f4a3 + ebe6f541ca2adea41f4b1dfc97774af371654bab - + https://github.com/dotnet/runtime - de0ab156194eb64deae0e1018db9a58f7b02f4a3 + ebe6f541ca2adea41f4b1dfc97774af371654bab - + https://github.com/dotnet/runtime - de0ab156194eb64deae0e1018db9a58f7b02f4a3 + ebe6f541ca2adea41f4b1dfc97774af371654bab - + https://github.com/dotnet/runtime - de0ab156194eb64deae0e1018db9a58f7b02f4a3 + ebe6f541ca2adea41f4b1dfc97774af371654bab - + https://github.com/dotnet/runtime - de0ab156194eb64deae0e1018db9a58f7b02f4a3 + ebe6f541ca2adea41f4b1dfc97774af371654bab - + https://github.com/dotnet/runtime - de0ab156194eb64deae0e1018db9a58f7b02f4a3 + ebe6f541ca2adea41f4b1dfc97774af371654bab https://github.com/dotnet/xharness @@ -354,9 +354,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-optimization 5b0a8abbba75c63e20e42f778650dd1448aef62c - + https://github.com/dotnet/hotreload-utils - 4b29cfaccdab45442e15f3b84f75bc9c10ee79b3 + 821048c1587d0384826230cdddf292570b8e430f https://github.com/dotnet/runtime-assets @@ -383,9 +383,9 @@ https://github.com/dotnet/roslyn-analyzers 837c22a23433f441fa56d96eb45d13c65408f7c3 - + https://github.com/dotnet/sdk - f8a9e2866134d9d04805da55fcb3984c8b94e008 + 4bc3b410401010fb7844fee0479f9b12f52500b3 @@ -402,9 +402,9 @@ https://github.com/NuGet/NuGet.Client 8fef55f5a55a3b4f2c96cd1a9b5ddc51d4b927f8 - + https://github.com/dotnet/installer - d5bf1c464514e4fa44477a872a3f687bc337ea5a + 1f0982b7f469aa0d693d1ad6744a7fde5263ef1b diff --git a/eng/Versions.props b/eng/Versions.props index e451955a185e0..f70c21cf3ca6c 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -80,7 +80,7 @@ 0.2.0 - 9.0.100-alpha.1.23465.4 + 9.0.100-alpha.1.23468.31 8.0.0-beta.23463.1 8.0.0-beta.23463.1 @@ -101,10 +101,10 @@ 6.0.0-preview.1.102 - 9.0.0-alpha.1.23460.2 + 9.0.0-alpha.1.23466.6 6.0.0 - 9.0.0-alpha.1.23460.2 + 9.0.0-alpha.1.23466.6 8.0.0-preview.7.23325.2 16.0.5-alpha.1.23452.1 16.0.5-alpha.1.23452.1 @@ -132,12 +132,12 @@ 5.0.0 5.0.0 7.0.0 - 9.0.0-alpha.1.23460.2 + 9.0.0-alpha.1.23466.6 6.0.0 7.0.0 4.5.4 4.5.0 - 9.0.0-alpha.1.23460.2 + 9.0.0-alpha.1.23466.6 8.0.0-beta.23456.1 8.0.0-beta.23456.1 @@ -189,7 +189,7 @@ 3.12.0 4.1.0 6.0.0 - 13.0.1 + 13.0.3 1.0.2 2.0.4 4.18.4 @@ -205,13 +205,13 @@ 2.45.0 1.1.2-beta1.23323.1 - 8.0.0-preview-20230828.1 + 8.0.0-preview-20230918.1 - 9.0.0-alpha.1.23460.2 + 9.0.0-alpha.1.23466.6 - 0.11.4-alpha.23461.1 + 0.11.4-alpha.23468.2 - 9.0.0-alpha.1.23460.2 + 9.0.0-alpha.1.23466.6 9.0.0-alpha.1.23454.1 @@ -236,7 +236,7 @@ Note: when the name is updated, make sure to update dependency name in eng/pipelines/common/xplat-setup.yml like - DarcDependenciesChanged.Microsoft_NET_Workload_Emscripten_Current_Manifest-8_0_100_Transport --> - 9.0.0-alpha.1.23457.3 + 9.0.0-alpha.1.23465.3 $(MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportVersion) 1.1.87-gba258badda @@ -254,7 +254,7 @@ 3.1.7 1.0.406601 - 9.0.100-alpha.1.23464.17 + 9.0.100-alpha.1.23469.3 $(MicrosoftDotnetSdkInternalVersion) diff --git a/global.json b/global.json index 7ef231a50456d..d9233ff3dc9fd 100644 --- a/global.json +++ b/global.json @@ -13,6 +13,6 @@ "Microsoft.DotNet.SharedFramework.Sdk": "8.0.0-beta.23463.1", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", - "Microsoft.NET.Sdk.IL": "9.0.0-alpha.1.23460.2" + "Microsoft.NET.Sdk.IL": "9.0.0-alpha.1.23466.6" } } diff --git a/src/coreclr/jit/emitxarch.cpp b/src/coreclr/jit/emitxarch.cpp index ba599c9e465ad..65789413500cd 100644 --- a/src/coreclr/jit/emitxarch.cpp +++ b/src/coreclr/jit/emitxarch.cpp @@ -5485,6 +5485,13 @@ void emitter::emitInsRMW(instruction ins, emitAttr attr, GenTreeStoreInd* storeI { assert(!src->isContained()); // there must be one non-contained src + if (addr->isContained() && addr->OperIs(GT_LCL_ADDR)) + { + GenTreeLclVarCommon* lclVar = addr->AsLclVarCommon(); + emitIns_S_R(ins, attr, src->GetRegNum(), lclVar->GetLclNum(), lclVar->GetLclOffs()); + return; + } + // ind, reg id = emitNewInstrAmd(attr, offset); emitHandleMemOp(storeInd, id, emitInsModeFormat(ins, IF_ARD_RRD), ins); @@ -8602,9 +8609,14 @@ void emitter::emitIns_SIMD_R_R_R_R( // SSE4.1 blendv* hardcode the mask vector (op3) in XMM0 emitIns_Mov(INS_movaps, attr, REG_XMM0, op3Reg, /* canSkip */ true); - // Ensure we aren't overwriting op2 or oop3 (which should be REG_XMM0) + // Ensure we aren't overwriting op2 or op3 (which should be REG_XMM0) assert((op2Reg != targetReg) || (op1Reg == targetReg)); - assert(targetReg != REG_XMM0); + + // If targetReg == REG_XMM0, it means that op3 was last use and we decided to + // reuse REG_XMM0 for destination i.e. targetReg. In such case, make sure + // that XMM0 value after the (op3Reg -> XMM0) move done above is not + // overwritten by op1Reg. + assert((targetReg != REG_XMM0) || (op1Reg == op3Reg)); emitIns_Mov(INS_movaps, attr, targetReg, op1Reg, /* canSkip */ true); emitIns_R_R(ins, attr, targetReg, op2Reg); diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index 239ddfaff5b29..d42175f98300e 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -19636,8 +19636,8 @@ GenTree* Compiler::gtNewSimdBinOpNode( } else { - assert(op2->TypeIs(type, simdBaseType, genActualType(simdBaseType)) || - (op2->TypeIs(TYP_SIMD12) && type == TYP_SIMD16)); + assert((genActualType(op2) == genActualType(type)) || (genActualType(op2) == genActualType(simdBaseType)) || + (op2->TypeIs(TYP_SIMD12) && (type == TYP_SIMD16))); } NamedIntrinsic intrinsic = NI_Illegal; diff --git a/src/coreclr/jit/lower.cpp b/src/coreclr/jit/lower.cpp index 2f0055cfd37dc..36b6c9481bb75 100644 --- a/src/coreclr/jit/lower.cpp +++ b/src/coreclr/jit/lower.cpp @@ -1558,7 +1558,7 @@ void Lowering::LowerArg(GenTreeCall* call, CallArg* callArg, bool late) // the assert below. assert((jitIntrinsic->GetSimdSize() == 12) || (jitIntrinsic->GetSimdSize() == 16) || - (jitIntrinsic->GetSimdSize() == 32)); + (jitIntrinsic->GetSimdSize() == 32) || (jitIntrinsic->GetSimdSize() == 64)); if (jitIntrinsic->GetSimdSize() == 12) { diff --git a/src/coreclr/jit/lowerxarch.cpp b/src/coreclr/jit/lowerxarch.cpp index 483370dab9f7f..d68c3e0d2689a 100644 --- a/src/coreclr/jit/lowerxarch.cpp +++ b/src/coreclr/jit/lowerxarch.cpp @@ -7956,6 +7956,9 @@ bool Lowering::IsContainableHWIntrinsicOp(GenTreeHWIntrinsic* parentNode, GenTre // The memory form of this already takes a pointer and should be treated like a MemoryLoad supportsGeneralLoads = !childNode->OperIsHWIntrinsic(); } + + supportsGeneralLoads = + supportsGeneralLoads && (genTypeSize(childNode) >= genTypeSize(parentNode->GetSimdBaseType())); break; } diff --git a/src/coreclr/jit/morph.cpp b/src/coreclr/jit/morph.cpp index 2a97fd82bb7ae..39617fb20a27d 100644 --- a/src/coreclr/jit/morph.cpp +++ b/src/coreclr/jit/morph.cpp @@ -10796,8 +10796,6 @@ GenTree* Compiler::fgOptimizeHWIntrinsic(GenTreeHWIntrinsic* node) return node; } #if defined(TARGET_XARCH) - case NI_AVX512F_Add: - case NI_AVX512BW_Add: case NI_AVX512F_And: case NI_AVX512DQ_And: case NI_AVX512F_AndNot: @@ -10839,13 +10837,6 @@ GenTree* Compiler::fgOptimizeHWIntrinsic(GenTreeHWIntrinsic* node) switch (intrinsicId) { - case NI_AVX512F_Add: - case NI_AVX512BW_Add: - { - maskIntrinsicId = NI_AVX512F_AddMask; - break; - } - case NI_AVX512F_And: case NI_AVX512DQ_And: { diff --git a/src/coreclr/jit/switchrecognition.cpp b/src/coreclr/jit/switchrecognition.cpp index a31de6a97bce7..5052e6ff57411 100644 --- a/src/coreclr/jit/switchrecognition.cpp +++ b/src/coreclr/jit/switchrecognition.cpp @@ -289,8 +289,11 @@ bool Compiler::optSwitchConvert(BasicBlock* firstBlock, int testsCount, ssize_t* maxValue = newMaxValue; } - assert(testIdx <= testsCount); - if (testIdx < SWITCH_MIN_TESTS) + // testIdx is now representing the index of last good test value, + // Update testsCount as it's now potentially smaller than initially. + testsCount = testIdx; + + if (testsCount < SWITCH_MIN_TESTS) { // Make sure we still have at least SWITCH_MIN_TESTS values after we filtered out some of them return false; @@ -304,7 +307,7 @@ bool Compiler::optSwitchConvert(BasicBlock* firstBlock, int testsCount, ssize_t* // Find the last block in the chain const BasicBlock* lastBlock = firstBlock; - for (int i = 0; i < testIdx - 1; i++) + for (int i = 0; i < testsCount - 1; i++) { lastBlock = lastBlock->bbNext; } diff --git a/src/coreclr/jit/valuenum.cpp b/src/coreclr/jit/valuenum.cpp index b4d7985cd97c5..79da0ca4601bd 100644 --- a/src/coreclr/jit/valuenum.cpp +++ b/src/coreclr/jit/valuenum.cpp @@ -7432,6 +7432,26 @@ ValueNum ValueNumStore::EvalHWIntrinsicFunBinary(var_types type, case NI_AVX512BW_ShiftLeftLogical: #endif { +#ifdef TARGET_XARCH + if (TypeOfVN(arg1VN) == TYP_SIMD16) + { + // The xarch shift instructions support taking the shift amount as + // a simd16, in which case they take the shift amount from the lower + // 64-bits. + + uint64_t shiftAmount = GetConstantSimd16(arg1VN).u64[0]; + + if (genTypeSize(baseType) != 8) + { + arg1VN = VNForIntCon(static_cast(shiftAmount)); + } + else + { + arg1VN = VNForLongCon(static_cast(shiftAmount)); + } + } +#endif // TARGET_XARCH + return EvaluateBinarySimd(this, GT_LSH, /* scalar */ false, type, baseType, arg0VN, arg1VN); } @@ -7445,6 +7465,26 @@ ValueNum ValueNumStore::EvalHWIntrinsicFunBinary(var_types type, case NI_AVX512BW_ShiftRightArithmetic: #endif { +#ifdef TARGET_XARCH + if (TypeOfVN(arg1VN) == TYP_SIMD16) + { + // The xarch shift instructions support taking the shift amount as + // a simd16, in which case they take the shift amount from the lower + // 64-bits. + + uint64_t shiftAmount = GetConstantSimd16(arg1VN).u64[0]; + + if (genTypeSize(baseType) != 8) + { + arg1VN = VNForIntCon(static_cast(shiftAmount)); + } + else + { + arg1VN = VNForLongCon(static_cast(shiftAmount)); + } + } +#endif // TARGET_XARCH + return EvaluateBinarySimd(this, GT_RSH, /* scalar */ false, type, baseType, arg0VN, arg1VN); } @@ -7457,6 +7497,26 @@ ValueNum ValueNumStore::EvalHWIntrinsicFunBinary(var_types type, case NI_AVX512BW_ShiftRightLogical: #endif { +#ifdef TARGET_XARCH + if (TypeOfVN(arg1VN) == TYP_SIMD16) + { + // The xarch shift instructions support taking the shift amount as + // a simd16, in which case they take the shift amount from the lower + // 64-bits. + + uint64_t shiftAmount = GetConstantSimd16(arg1VN).u64[0]; + + if (genTypeSize(baseType) != 8) + { + arg1VN = VNForIntCon(static_cast(shiftAmount)); + } + else + { + arg1VN = VNForLongCon(static_cast(shiftAmount)); + } + } +#endif // TARGET_XARCH + return EvaluateBinarySimd(this, GT_RSZ, /* scalar */ false, type, baseType, arg0VN, arg1VN); } diff --git a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Publish.targets b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Publish.targets index 5b1e1e8769bda..256b344888cc0 100644 --- a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Publish.targets +++ b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Publish.targets @@ -93,7 +93,10 @@ + + diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/Runtime/General/Helpers.cs b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/Runtime/General/Helpers.cs index 354d56e6a26de..ced17c84f44b4 100644 --- a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/Runtime/General/Helpers.cs +++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/Runtime/General/Helpers.cs @@ -109,7 +109,12 @@ public static TypeLoadException CreateTypeLoadException(string typeName, string public static string EscapeTypeNameIdentifier(this string identifier) { // Some characters in a type name need to be escaped + + // We're avoiding calling into MemoryExtensions here as it has paths that lead to reflection, + // and that would lead to an infinite loop given that this is the implementation of reflection. +#pragma warning disable CA1870 // Use a cached 'SearchValues' instance if (identifier != null && identifier.IndexOfAny(s_charsToEscape) != -1) +#pragma warning restore CA1870 { StringBuilder sbEscapedName = new StringBuilder(identifier.Length); foreach (char c in identifier) diff --git a/src/libraries/Directory.Build.props b/src/libraries/Directory.Build.props index 9d6f6c385bb4d..32fc46a35d8d7 100644 --- a/src/libraries/Directory.Build.props +++ b/src/libraries/Directory.Build.props @@ -6,6 +6,10 @@ we only enable it in specific projects. so to avoid duplicating this property in coreclr, we can first scope it to src/libraries. This property needs to be declared before the ..\..\Directory.Build.props import. --> true + + + false diff --git a/src/libraries/Directory.Build.targets b/src/libraries/Directory.Build.targets index e8b11793d5ef6..184155c6edce6 100644 --- a/src/libraries/Directory.Build.targets +++ b/src/libraries/Directory.Build.targets @@ -127,7 +127,6 @@ - diff --git a/src/libraries/Microsoft.Extensions.Options.DataAnnotations/src/DataAnnotationValidateOptions.cs b/src/libraries/Microsoft.Extensions.Options.DataAnnotations/src/DataAnnotationValidateOptions.cs index e8f4b606882cf..5b734edf32738 100644 --- a/src/libraries/Microsoft.Extensions.Options.DataAnnotations/src/DataAnnotationValidateOptions.cs +++ b/src/libraries/Microsoft.Extensions.Options.DataAnnotations/src/DataAnnotationValidateOptions.cs @@ -95,7 +95,8 @@ private static bool TryValidateOptions(object options, string qualifiedName, Lis foreach (PropertyInfo propertyInfo in options.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) { - if (propertyInfo.GetMethod is null) + // Indexers are properties which take parameters. Ignore them. + if (propertyInfo.GetMethod is null || propertyInfo.GetMethod.GetParameters().Length > 0) { continue; } diff --git a/src/libraries/Microsoft.Extensions.Options/tests/SourceGeneration.Unit.Tests/OptionsRuntimeTests.cs b/src/libraries/Microsoft.Extensions.Options/tests/SourceGeneration.Unit.Tests/OptionsRuntimeTests.cs index b644eea74120f..6109bccd29646 100644 --- a/src/libraries/Microsoft.Extensions.Options/tests/SourceGeneration.Unit.Tests/OptionsRuntimeTests.cs +++ b/src/libraries/Microsoft.Extensions.Options/tests/SourceGeneration.Unit.Tests/OptionsRuntimeTests.cs @@ -177,6 +177,30 @@ public void TestValidationWithEnumeration() result2.Failures); } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotBrowser))] + public void TestObjectsWithIndexerProperties() + { + DataAnnotationValidateOptions dataAnnotationValidateOptions1 = new("MyDictionaryOptions"); + MyDictionaryOptionsOptionsValidator sourceGenOptionsValidator1 = new(); + + var options1 = new MyDictionaryOptions(); + ValidateOptionsResult result1 = sourceGenOptionsValidator1.Validate("MyDictionaryOptions", options1); + ValidateOptionsResult result2 = dataAnnotationValidateOptions1.Validate("MyDictionaryOptions", options1); + + Assert.True(result1.Succeeded); + Assert.True(result2.Succeeded); + + DataAnnotationValidateOptions> dataAnnotationValidateOptions2 = new("MyListOptions"); + MyListOptionsOptionsValidator sourceGenOptionsValidator2 = new(); + + var options2 = new MyListOptions() { Prop = "test" }; + result1 = sourceGenOptionsValidator2.Validate("MyListOptions", options2); + result2 = dataAnnotationValidateOptions2.Validate("MyListOptions", options2); + + Assert.True(result1.Succeeded); + Assert.True(result2.Succeeded); + } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotBrowser))] public void TestValidationWithCyclicReferences() { @@ -302,6 +326,12 @@ public partial class MySourceGenOptionsValidator : IValidateOptions { } + public class MyDictionaryOptions : Dictionary { [Required] public string Prop { get; set; } = "test"; } + [OptionsValidator] public partial class MyDictionaryOptionsOptionsValidator : IValidateOptions { } + + public class MyListOptions : List { [Required] public T Prop { get; set; } = default; } + [OptionsValidator] public partial class MyListOptionsOptionsValidator : IValidateOptions> { } + #if NET8_0_OR_GREATER public class OptionsUsingNewAttributes { diff --git a/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln b/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln index ed8fadf41ebf9..736dbcc4b53af 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln +++ b/src/libraries/Microsoft.NETCore.Platforms/Microsoft.NETCore.Platforms.sln @@ -1,102 +1,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{39BCA125-321F-490F-AD4E-28DCB4406969}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NETCore.Platforms", "src\Microsoft.NETCore.Platforms.csproj", "{BFFF96CC-06AA-4291-9F93-3E77F23DBB11}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NETCore.Platforms.Tests", "tests\Microsoft.NETCore.Platforms.Tests.csproj", "{0C60F372-5C73-4BFA-9B91-5659C88F9750}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibraryImportGenerator", "..\System.Runtime.InteropServices\gen\LibraryImportGenerator\LibraryImportGenerator.csproj", "{45449066-3A31-43E5-B705-20D667080A23}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.SourceGeneration", "..\System.Runtime.InteropServices\gen\Microsoft.Interop.SourceGeneration\Microsoft.Interop.SourceGeneration.csproj", "{2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILLink.CodeFixProvider", "..\..\tools\illink\src\ILLink.CodeFix\ILLink.CodeFixProvider.csproj", "{BF52D0B1-1AD8-49DB-B910-9F9D7D41292A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILLink.RoslynAnalyzer", "..\..\tools\illink\src\ILLink.RoslynAnalyzer\ILLink.RoslynAnalyzer.csproj", "{BEFED0BD-AD56-4FAC-B9A7-CCE8BB5F8768}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILLink.Tasks", "..\..\tools\illink\src\ILLink.Tasks\ILLink.Tasks.csproj", "{41387647-9500-448C-B021-B4837947EF62}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Linker", "..\..\tools\illink\src\linker\Mono.Linker.csproj", "{281E9ED5-5F16-475D-B50B-501633FCC8C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mono.Linker", "..\..\tools\illink\src\linker\ref\Mono.Linker.csproj", "{20346A2D-06DD-4E3E-96D4-C9BF32697AE3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{E4827496-6F39-4CA0-8F4A-ACDE9DFEBE5C}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F96FBD24-3BB3-4D02-9884-4D90F94DD3C0}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gen", "gen", "{E8010E1D-FDAF-481D-AA34-3B115B667E4B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gen", "tools\gen", "{2B7F6369-F9CA-493A-A105-B7B7B697A31F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "tools\src", "{A527D4DF-4D57-40AE-B63B-1945F1D4FF3F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "tools\ref", "{EB2B9277-DB89-4554-8499-C3240163E875}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{0F4ABB64-2357-49FB-9BD3-8FEFC2A650E6}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {39BCA125-321F-490F-AD4E-28DCB4406969}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39BCA125-321F-490F-AD4E-28DCB4406969}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39BCA125-321F-490F-AD4E-28DCB4406969}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39BCA125-321F-490F-AD4E-28DCB4406969}.Release|Any CPU.Build.0 = Release|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Debug|Any CPU.Build.0 = Debug|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Release|Any CPU.ActiveCfg = Release|Any CPU {BFFF96CC-06AA-4291-9F93-3E77F23DBB11}.Release|Any CPU.Build.0 = Release|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C60F372-5C73-4BFA-9B91-5659C88F9750}.Release|Any CPU.Build.0 = Release|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45449066-3A31-43E5-B705-20D667080A23}.Release|Any CPU.Build.0 = Release|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B}.Release|Any CPU.Build.0 = Release|Any CPU - {BF52D0B1-1AD8-49DB-B910-9F9D7D41292A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF52D0B1-1AD8-49DB-B910-9F9D7D41292A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF52D0B1-1AD8-49DB-B910-9F9D7D41292A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF52D0B1-1AD8-49DB-B910-9F9D7D41292A}.Release|Any CPU.Build.0 = Release|Any CPU - {BEFED0BD-AD56-4FAC-B9A7-CCE8BB5F8768}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEFED0BD-AD56-4FAC-B9A7-CCE8BB5F8768}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEFED0BD-AD56-4FAC-B9A7-CCE8BB5F8768}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEFED0BD-AD56-4FAC-B9A7-CCE8BB5F8768}.Release|Any CPU.Build.0 = Release|Any CPU - {41387647-9500-448C-B021-B4837947EF62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41387647-9500-448C-B021-B4837947EF62}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41387647-9500-448C-B021-B4837947EF62}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41387647-9500-448C-B021-B4837947EF62}.Release|Any CPU.Build.0 = Release|Any CPU - {281E9ED5-5F16-475D-B50B-501633FCC8C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {281E9ED5-5F16-475D-B50B-501633FCC8C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {281E9ED5-5F16-475D-B50B-501633FCC8C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {281E9ED5-5F16-475D-B50B-501633FCC8C6}.Release|Any CPU.Build.0 = Release|Any CPU - {20346A2D-06DD-4E3E-96D4-C9BF32697AE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20346A2D-06DD-4E3E-96D4-C9BF32697AE3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20346A2D-06DD-4E3E-96D4-C9BF32697AE3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20346A2D-06DD-4E3E-96D4-C9BF32697AE3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {39BCA125-321F-490F-AD4E-28DCB4406969} = {E4827496-6F39-4CA0-8F4A-ACDE9DFEBE5C} - {0C60F372-5C73-4BFA-9B91-5659C88F9750} = {E4827496-6F39-4CA0-8F4A-ACDE9DFEBE5C} {BFFF96CC-06AA-4291-9F93-3E77F23DBB11} = {F96FBD24-3BB3-4D02-9884-4D90F94DD3C0} - {45449066-3A31-43E5-B705-20D667080A23} = {E8010E1D-FDAF-481D-AA34-3B115B667E4B} - {2E3568B1-EC27-4F02-BC0E-71DD3FD7735B} = {E8010E1D-FDAF-481D-AA34-3B115B667E4B} - {BF52D0B1-1AD8-49DB-B910-9F9D7D41292A} = {2B7F6369-F9CA-493A-A105-B7B7B697A31F} - {BEFED0BD-AD56-4FAC-B9A7-CCE8BB5F8768} = {2B7F6369-F9CA-493A-A105-B7B7B697A31F} - {2B7F6369-F9CA-493A-A105-B7B7B697A31F} = {0F4ABB64-2357-49FB-9BD3-8FEFC2A650E6} - {41387647-9500-448C-B021-B4837947EF62} = {A527D4DF-4D57-40AE-B63B-1945F1D4FF3F} - {281E9ED5-5F16-475D-B50B-501633FCC8C6} = {A527D4DF-4D57-40AE-B63B-1945F1D4FF3F} - {A527D4DF-4D57-40AE-B63B-1945F1D4FF3F} = {0F4ABB64-2357-49FB-9BD3-8FEFC2A650E6} - {20346A2D-06DD-4E3E-96D4-C9BF32697AE3} = {EB2B9277-DB89-4554-8499-C3240163E875} - {EB2B9277-DB89-4554-8499-C3240163E875} = {0F4ABB64-2357-49FB-9BD3-8FEFC2A650E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E946A528-C3E7-48EC-AD6D-AE84ED2B11AC} diff --git a/src/libraries/Microsoft.NETCore.Platforms/readme.md b/src/libraries/Microsoft.NETCore.Platforms/readme.md index 6c76386f17d07..cca951daaab5f 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/readme.md +++ b/src/libraries/Microsoft.NETCore.Platforms/readme.md @@ -1,5 +1,5 @@ # Runtime IDs -The package `Microsoft.NETCore.Platforms` defines the runtime identifiers (RIDs) used by .NET packages to represent runtime-specific assets in NuGet packages. +The `Microsoft.NETCore.Platforms` transport package contains the portable and non-portable runtime identifier graph files for redistribution in the dotnet/sdk repository. ## What is a RID? A RID is an opaque string that identifies a platform. RIDs have relationships to other RIDs by "importing" the other RID. In that way a RID is a directed graph of compatible RIDs. @@ -76,80 +76,4 @@ runtimes/win/lib/netstandard1.0/foo.dll When resolving for netstandard1.5/win7-x64 will select `lib/netstandard1.5/foo.dll` for the compile asset and `runtimes/win/lib/netstandard1.0/foo.dll` for the runtime asset. ## Adding new RIDs - -### Why do I need to add a new RID? -NuGet's extensibility mechanism for platform-specific assets requires a RID be defined for any platform that needs assets specific to that platform. Unlike TFMs, which have a known relationship in NuGet (eg net4.5 is compatible with net4.0), RIDs are opaque strings which NuGet knows nothing about. The definition and relationship of RIDs comes solely from the `runtime.json` files within the root of the packages referenced by the project. -As such, whenever we want to put a new RID in a project.json in order to get assets specific for that RID we have to define the rid in some package. Typically that package is `Microsoft.NETCore.Platforms` if the RID is "official". If you'd like to prototype you can put the RID in any other package and so long as that package is referenced you can use that RID. - -### Do I really need to add a new RID? -If you're prototyping on a platform that is compatible with an existing platform then you can reuse the RID for that existing platform. New RIDs are only needed when an asset needs to be different on a particular platform. - -`Microsoft.NETCore.Platforms` attempts to define all RIDs that packages may need, and as such will define RIDs for platforms that we don't actually cross compile for. This is to support higher-level packages, 3rd party packages, that may need to cross-compile for that RID. - -### Adding a new OS -Add a new `RuntimeGroup` item in `runtimeGroups.props`. - -For example: -```xml - - linux - x86;x64;arm - 42.0;43.0 - -``` - -This will create a new RID for `myLinuxDistro` where `myLinuxDistro` should be the string used for the `ID=` value in the `/etc/os-release` file. - -Whenever modifying the `runtimeGroups.props` make sure to pack the project via the `dotnet pack` command and inspect if the generated package contains the desired changes. - -RuntimeGroup items have the following format: -- `Identity`: the base string for the RID, without version architecture, or qualifiers. -- `Parent`: the base string for the parent of this RID. This RID will be imported by the baseRID, architecture-specific, and qualifier-specific RIDs (with the latter two appending appropriate architecture and qualifiers). -- `Versions`: A list of strings delimited by semi-colons that represent the versions for this RID. -- `TreatVersionsAsCompatible`: Default is true. When true, version-specific RIDs will import the previous version-specific RID in the Versions list, with the first version importing the version-less RID. When false all version-specific RIDs will import the version-less RID (bypassing previous version-specific RIDs) -- `OmitVersionDelimiter`: Default is false. When true no characters will separate the base RID and version (EG: win7). When false a '.' will separate the base RID and version (EG: osx.10.12). -- `ApplyVersionsToParent`: Default is false. When true, version-specific RIDs will import version-specific Parent RIDs similar to is done for architecture and qualifier (see Parent above). -- `Architectures`: A list of strings delimited by semi-colons that represent the architectures for this RID. -- `AdditionalQualifiers`: A list of strings delimited by semi-colons that represent the additional qualifiers for this RID. Additional qualifers do not stack, each only applies to the qualifier-less RIDs (so as not to cause combinatorial exponential growth of RIDs). - -### Adding a new version to an existing OS -Find the existing `RuntimeGroup` in `runtimeGroups.props` and add the version to the list of `Versions`, separated by a semi-colon. - -If the version you are adding needs to be treated as not-compatible with previous versions and the `RuntimeGroup` has not set `TreatVersionsAsCompatible`=`false` then you may create a new `RuntimeGroup` to represent the new compatibility band. - -### Checking your work -After making a change to `runtimeGroups.props` you can examine the resulting changes in `runtime.json` and `runtime.compatibility.json`. - -`runtime.json` is the graph representation of the RIDs and is what ships in the package. - -`runtime.compatibility.json` is a flattened version of the graph that shows the RID precedence for each RID in the graph. - -### Version compatibility -Version compatibility is represented through imports. If a platform is considered compatible with another version of the same platform, or a specific version of another platform, then it can import that platform. This permits packages to reuse assets that were built for the imported platform on the compatible platform. Compatibility here is a bit nebulous because inevitably different platforms will have observable differences that can cause compatibility problems. For the purposes of RIDs we'll try to represent compatibility as versions of a platform that are explicitly advertised as being compatible with a previous version and/or another platform and don't have any known broad breaking changes. It is usually better to opt to treat platforms as compatible since that enables the scenario of building an asset for a particular version and using that in future versions, otherwise you force people to cross-compile for all future versions the moment they target a specific version. - -## Appendix : details of RID graph generation - -### Naming convention -We use the following convention in all newly-defined RIDs. Some RIDs (win7-x64, win8-x64) predate this convention and don't follow it, but all new RIDs should follow it. -`[os name].[version]-[architecture]-[additional qualifiers]`, for example `osx.10.10-x64` or `ubuntu.14.04-x64` -- `[os name]` can contain any characters other than `.` -- `[version]` can contain any characters other than `-`. Typically a numeric version like 14.04 or 10.0. -- `[architecture]` can contain any characters other than `-`. Typically: `x86`, `x64`, `arm`, `arm64` -- `[additional qualifiers]` can be things like `aot`. Used to further differentiate different platforms. - -For all of these we strive to make them something that can be uniquely discoverable at runtime, so that a RID may be computed from an executing application. As such these properties should be derivable from `/etc/os-release` or similar platform APIs / data. - -### Import convention -Imports should be used when the added RID is considered compatible with an existing RID. - -1. Architecture-specific RIDs should first import the architecture-less RID. EG: `osx.10.11-x64` should first import `osx.10.11`. -2. Architecture-specific RIDs that are compatible with a previous version RID for the same OS should then import the previous version, architecture specific RID. EG: `osx.10.11-x64` should then import `osx.10.10-x64`. If there is no earlier compatible/supported version, then a versionless RID should be imported. EG: `osx.10.10-x64` should import `osx-x64`. -3. Architecture-less RIDs that are compatible with a previous version RID for the same OS should then import the previous version, architecture neutral RID. EG: `osx.10.11` should import `osx.10.10`. If there is no earlier compatible/supported version, then a versionless RID should be imported. EG: `osx.10.10` should import `osx`. -4. Version-less RIDs should import an OS category. EG: `osx-x64` should import `unix-x64`, `osx` should import `unix`. - -### Advanced RuntimeGroup metadata -The following options can be used under special circumstances but break the normal precedence rules we try to establish by generating the RID graph from common logic. These options make it possible to create a RID fallback chain that doesn't match the rest of the RIDs and therefore is hard for developers/package authors to reason about. Only use these options for cases where you know what you are doing and have carefully reviewed the resulting RID fallbacks using the CompatibliltyMap. - -- `OmitRIDs`: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should be omitted from the RuntimeGraph. These RIDs will not be referenced nor defined. -- `OmitRIDDefinitions`: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should be omitted from the RuntimeGraph. These RIDs will not be defined by this RuntimeGroup, but will be referenced: useful in case some other RuntimeGroup (or runtime.json template) defines them. -- `OmitRIDReferences`: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should be omitted from the RuntimeGraph. These RIDs will be defined but not referenced by this RuntimeGroup. +The RID graphs should be only updated with new base OSes, architectures, or C standard libraries. The RID graphs shouldn't be updated with new OS flavor- and version-specific RIDs anymore. Build from source automatically adds the non-portable distro RID encoded via the `OutputRID` property into the RID graph which allows build tools to target that RID. \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs b/src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs deleted file mode 100644 index 81cbce457a734..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/AssemblyResolver.cs +++ /dev/null @@ -1,111 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Reflection; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - /// - /// Used to enable app-local assembly unification. - /// - internal static class AssemblyResolver - { - static AssemblyResolver() - { - AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; - } - - /// - /// Call to enable the assembly resolver for the current AppDomain. - /// - public static void Enable() - { - // intentionally empty. This is just meant to ensure the static constructor - // has run. - } - - [UnconditionalSuppressMessage("SingleFile", "IL3000:Avoid accessing Assembly file path when publishing as a single file", - Justification = "The code has a fallback to use AppDomain.CurrentDomain.BaseDirectory so it will work correctly in single-file")] - private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) - { - // apply any existing policy - AssemblyName referenceName = new AssemblyName(AppDomain.CurrentDomain.ApplyPolicy(args.Name)); - - string fileName = referenceName.Name + ".dll"; - string assemblyPath; - string probingPath; - Assembly assm; - - // look next to requesting assembly - assemblyPath = args.RequestingAssembly?.Location; - if (!string.IsNullOrEmpty(assemblyPath)) - { - probingPath = Path.Combine(Path.GetDirectoryName(assemblyPath), fileName); - Debug.WriteLine($"Considering {probingPath} based on RequestingAssembly"); - if (Probe(probingPath, referenceName.Version, out assm)) - { - return assm; - } - } - - // look next to the executing assembly - assemblyPath = Assembly.GetExecutingAssembly().Location; - if (!string.IsNullOrEmpty(assemblyPath)) - { - probingPath = Path.Combine(Path.GetDirectoryName(assemblyPath), fileName); - - Debug.WriteLine($"Considering {probingPath} based on ExecutingAssembly"); - if (Probe(probingPath, referenceName.Version, out assm)) - { - return assm; - } - } - - // look in AppDomain base directory - probingPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); - Debug.WriteLine($"Considering {probingPath} based on BaseDirectory"); - if (Probe(probingPath, referenceName.Version, out assm)) - { - return assm; - } - - // look in current directory - Debug.WriteLine($"Considering {fileName}"); - if (Probe(fileName, referenceName.Version, out assm)) - { - return assm; - } - - return null; - } - - /// - /// Considers a path to load for satisfying an assembly ref and loads it - /// if the file exists and version is sufficient. - /// - /// Path to consider for load - /// Minimum version to consider - /// loaded assembly - /// true if assembly was loaded - private static bool Probe(string filePath, Version minimumVersion, out Assembly assembly) - { - if (File.Exists(filePath)) - { - AssemblyName name = AssemblyName.GetAssemblyName(filePath); - - if (name.Version >= minimumVersion) - { - assembly = Assembly.Load(name); - return true; - } - } - - assembly = null; - return false; - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs b/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs deleted file mode 100644 index 29af5f186cfb4..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.Desktop.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public partial class BuildTask - { - static BuildTask() - { - AssemblyResolver.Enable(); - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs b/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs deleted file mode 100644 index 98e17c3b0c566..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/BuildTask.cs +++ /dev/null @@ -1,151 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using System; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public abstract partial class BuildTask : ITask - { - private Log _log; - - internal Log Log - { - get { return _log ??= new Log(new TaskLoggingHelper(this)); } - } - - public BuildTask() - { - } - - public IBuildEngine BuildEngine - { - get; - set; - } - - public ITaskHost HostObject - { - get; - set; - } - - public abstract bool Execute(); - } - - internal sealed class Log : ILog - { - private readonly TaskLoggingHelper _logger; - public Log(TaskLoggingHelper logger) - { - _logger = logger; - } - - public void LogError(string message, params object[] messageArgs) - { - _logger.LogError(message, messageArgs); - } - - public void LogErrorFromException(Exception exception, bool showStackTrace) - { - _logger.LogErrorFromException(exception, showStackTrace); - } - - public void LogMessage(string message, params object[] messageArgs) - { - _logger.LogMessage(message, messageArgs); - } - - public void LogMessage(LogImportance importance, string message, params object[] messageArgs) - { - _logger.LogMessage((MessageImportance)importance, message, messageArgs); - } - - public void LogWarning(string message, params object[] messageArgs) - { - _logger.LogWarning(message, messageArgs); - } - - public bool HasLoggedErrors { get { return _logger.HasLoggedErrors; } } - } - - public enum LogImportance - { - Low = MessageImportance.Low, - Normal = MessageImportance.Normal, - High = MessageImportance.High - } - - - public interface ILog - { - // - // Summary: - // Logs an error with the specified message. - // - // Parameters: - // message: - // The message. - // - // messageArgs: - // Optional arguments for formatting the message string. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogError(string message, params object[] messageArgs); - - // - // Summary: - // Logs a message with the specified string. - // - // Parameters: - // message: - // The message. - // - // messageArgs: - // The arguments for formatting the message. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogMessage(string message, params object[] messageArgs); - - // - // Summary: - // Logs a message with the specified string and importance. - // - // Parameters: - // importance: - // One of the enumeration values that specifies the importance of the message. - // - // message: - // The message. - // - // messageArgs: - // The arguments for formatting the message. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogMessage(LogImportance importance, string message, params object[] messageArgs); - - // - // Summary: - // Logs a warning with the specified message. - // - // Parameters: - // message: - // The message. - // - // messageArgs: - // Optional arguments for formatting the message string. - // - // Exceptions: - // T:System.ArgumentNullException: - // message is null. - void LogWarning(string message, params object[] messageArgs); - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props b/src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props new file mode 100644 index 0000000000000..75e6b0abd56ae --- /dev/null +++ b/src/libraries/Microsoft.NETCore.Platforms/src/Directory.Build.props @@ -0,0 +1,9 @@ + + + + false + + + + + \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs b/src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs deleted file mode 100644 index 2456407d682e7..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/Extensions.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Generic; -using System.Linq; -using Microsoft.Build.Framework; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public static class Extensions - { - public static string GetString(this ITaskItem taskItem, string metadataName) - { - var metadataValue = taskItem.GetMetadata(metadataName)?.Trim(); - return string.IsNullOrEmpty(metadataValue) ? null : metadataValue; - } - - public static bool GetBoolean(this ITaskItem taskItem, string metadataName, bool defaultValue = false) - { - bool result; - var metadataValue = taskItem.GetMetadata(metadataName); - if (!bool.TryParse(metadataValue, out result)) - { - result = defaultValue; - } - return result; - } - - public static IEnumerable GetStrings(this ITaskItem taskItem, string metadataName) - { - var metadataValue = taskItem.GetMetadata(metadataName)?.Trim(); - if (!string.IsNullOrEmpty(metadataValue)) - { - return metadataValue.Split(';').Where(v => !string.IsNullOrEmpty(v.Trim())).ToArray(); - } - - return Enumerable.Empty(); - } - - public static IEnumerable NullAsEmpty(this IEnumerable source) - { - return source ?? Enumerable.Empty(); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs b/src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs deleted file mode 100644 index f431e274e8dca..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/GenerateRuntimeGraph.cs +++ /dev/null @@ -1,427 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml.Linq; -using Microsoft.Build.Framework; -using Newtonsoft.Json; -using NuGet.RuntimeModel; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class GenerateRuntimeGraph : BuildTask - { - - /// - /// A set of RuntimeGroups that can be used to generate a runtime graph - /// Identity: the base string for the RID, without version architecture, or qualifiers. - /// Parent: the base string for the parent of this RID. This RID will be imported by the baseRID, architecture-specific, - /// and qualifier-specific RIDs (with the latter two appending appropriate architecture and qualifiers). - /// Versions: A list of strings delimited by semi-colons that represent the versions for this RID. - /// TreatVersionsAsCompatible: Default is true. When true, version-specific RIDs will import the previous - /// version-specific RID in the Versions list, with the first version importing the version-less RID. - /// When false all version-specific RIDs will import the version-less RID (bypassing previous version-specific RIDs) - /// OmitVersionDelimiter: Default is false. When true no characters will separate the base RID and version (EG: win7). - /// When false a '.' will separate the base RID and version (EG: osx.10.12). - /// ApplyVersionsToParent: Default is false. When true, version-specific RIDs will import version-specific Parent RIDs - /// similar to is done for architecture and qualifier (see Parent above). - /// Architectures: A list of strings delimited by semi-colons that represent the architectures for this RID. - /// AdditionalQualifiers: A list of strings delimited by semi-colons that represent the additional qualifiers for this RID. - /// Additional qualifers do not stack, each only applies to the qualifier-less RIDs (so as not to cause combinatorial - /// exponential growth of RIDs). - /// - /// The following options can be used under special circumstances but break the normal precedence rules we try to establish - /// by generating the RID graph from common logic. These options make it possible to create a RID fallback chain that doesn't - /// match the rest of the RIDs and therefore is hard for developers/package authors to reason about. - /// Only use these options for cases where you know what you are doing and have carefully reviewed the resulting RID fallbacks - /// using the CompatibliltyMap. - /// OmitRIDs: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup that should - /// be omitted from the RuntimeGraph. These RIDs will not be referenced nor defined. - /// OmitRIDDefinitions: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup - /// that should be omitted from the RuntimeGraph. These RIDs will not be defined by this RuntimeGroup, but will be - /// referenced: useful in case some other RuntimeGroup (or runtime.json template) defines them. - /// OmitRIDReferences: A list of strings delimited by semi-colons that represent RIDs calculated from this RuntimeGroup - /// that should be omitted from the RuntimeGraph. These RIDs will be defined but not referenced by this RuntimeGroup. - /// - public ITaskItem[] RuntimeGroups - { - get; - set; - } - - /// - /// Additional runtime identifiers to add to the graph. - /// - public string[] AdditionalRuntimeIdentifiers - { - get; - set; - } - - /// - /// Parent RID to use for any unknown AdditionalRuntimeIdentifier. - /// - public string AdditionalRuntimeIdentifierParent - { - get; - set; - } - - /// - /// Optional source Runtime.json to use as a starting point when merging additional RuntimeGroups - /// - public string SourceRuntimeJson - { - get; - set; - } - - /// - /// Where to write the final runtime.json - /// - public string RuntimeJson - { - get; - set; - } - - /// - /// Optionally, other runtime.jsons which may contain imported RIDs - /// - public string[] ExternalRuntimeJsons - { - get; - set; - } - - /// - /// When defined, specifies the file to write compatibility precedence for each RID in the graph. - /// - public string CompatibilityMap - { - get; - set; - } - - - /// - /// True to write the generated runtime.json to RuntimeJson and compatibility map to CompatibilityMap, otherwise files are read and diffed - /// with generated versions and an error is emitted if they differ. - /// Setting UpdateRuntimeFiles will overwrite files even when the file is marked ReadOnly. - /// - public bool UpdateRuntimeFiles - { - get; - set; - } - - /// - /// When defined, specifies the file to write a DGML representation of the runtime graph. - /// - public string RuntimeDirectedGraph - { - get; - set; - } - - public override bool Execute() - { - if (RuntimeGroups != null && RuntimeGroups.Length != 0 && RuntimeJson == null) - { - Log.LogError($"{nameof(RuntimeJson)} argument must be specified when {nameof(RuntimeGroups)} is specified."); - return false; - } - - RuntimeGraph runtimeGraph; - if (!string.IsNullOrEmpty(SourceRuntimeJson)) - { - if (!File.Exists(SourceRuntimeJson)) - { - Log.LogError($"{nameof(SourceRuntimeJson)} did not exist at {SourceRuntimeJson}."); - return false; - } - - runtimeGraph = JsonRuntimeFormat.ReadRuntimeGraph(SourceRuntimeJson); - } - else - { - runtimeGraph = new RuntimeGraph(); - } - - List runtimeGroups = RuntimeGroups.NullAsEmpty().Select(i => new RuntimeGroup(i)).ToList(); - - AddRuntimeIdentifiers(runtimeGroups); - - foreach (var runtimeGroup in runtimeGroups) - { - runtimeGraph = SafeMerge(runtimeGraph, runtimeGroup); - } - - Dictionary externalRids = new Dictionary(); - if (ExternalRuntimeJsons != null) - { - foreach (var externalRuntimeJson in ExternalRuntimeJsons) - { - RuntimeGraph externalRuntimeGraph = JsonRuntimeFormat.ReadRuntimeGraph(externalRuntimeJson); - - foreach (var runtime in externalRuntimeGraph.Runtimes.Keys) - { - // don't check for duplicates, we merely care what is external - externalRids.Add(runtime, externalRuntimeJson); - } - } - } - - ValidateImports(runtimeGraph, externalRids); - - if (!string.IsNullOrEmpty(RuntimeJson)) - { - if (UpdateRuntimeFiles) - { - EnsureWritable(RuntimeJson); - WriteRuntimeGraph(RuntimeJson, runtimeGraph); - - } - else - { - // validate that existing file matches generated file - if (!File.Exists(RuntimeJson)) - { - Log.LogError($"{nameof(RuntimeJson)} did not exist at {RuntimeJson} and {nameof(UpdateRuntimeFiles)} was not specified."); - } - else - { - var existingRuntimeGraph = JsonRuntimeFormat.ReadRuntimeGraph(RuntimeJson); - - if (!existingRuntimeGraph.Equals(runtimeGraph)) - { - Log.LogError($"The generated {nameof(RuntimeJson)} differs from {RuntimeJson} and {nameof(UpdateRuntimeFiles)} was not specified. Please specify {nameof(UpdateRuntimeFiles)}=true to commit the changes."); - } - } - } - } - - if (!string.IsNullOrEmpty(CompatibilityMap)) - { - var compatibilityMap = GetCompatibilityMap(runtimeGraph); - if (UpdateRuntimeFiles) - { - EnsureWritable(CompatibilityMap); - WriteCompatibilityMap(compatibilityMap, CompatibilityMap); - } - else - { - // validate that existing file matches generated file - if (!File.Exists(CompatibilityMap)) - { - Log.LogError($"{nameof(CompatibilityMap)} did not exist at {CompatibilityMap} and {nameof(UpdateRuntimeFiles)} was not specified."); - } - else - { - var existingCompatibilityMap = ReadCompatibilityMap(CompatibilityMap); - - if (!CompatibilityMapEquals(existingCompatibilityMap, compatibilityMap)) - { - Log.LogError($"The generated {nameof(CompatibilityMap)} differs from {CompatibilityMap} and {nameof(UpdateRuntimeFiles)} was not specified. Please specify {nameof(UpdateRuntimeFiles)}=true to commit the changes."); - } - } - } - } - - if (!string.IsNullOrEmpty(RuntimeDirectedGraph)) - { - WriteRuntimeGraph(runtimeGraph, RuntimeDirectedGraph); - } - - return !Log.HasLoggedErrors; - } - - private static void EnsureWritable(string file) - { - if (File.Exists(file)) - { - var existingAttributes = File.GetAttributes(file); - - if ((existingAttributes & FileAttributes.ReadOnly) != 0) - { - File.SetAttributes(file, existingAttributes &= ~FileAttributes.ReadOnly); - } - } - } - - public static void WriteRuntimeGraph(string filePath, RuntimeGraph runtimeGraph) - { - using (var fileStream = new FileStream(filePath, FileMode.Create)) - using (var textWriter = new StreamWriter(fileStream)) - using (var jsonWriter = new JsonTextWriter(textWriter)) - using (var writer = new JsonObjectWriter(jsonWriter)) - { - jsonWriter.Formatting = Formatting.Indented; - - // workaround https://github.com/NuGet/Home/issues/9532 - writer.WriteObjectStart(); - - JsonRuntimeFormat.WriteRuntimeGraph(writer, runtimeGraph); - - writer.WriteObjectEnd(); - } - } - - private RuntimeGraph SafeMerge(RuntimeGraph existingGraph, RuntimeGroup runtimeGroup) - { - var runtimeGraph = runtimeGroup.GetRuntimeGraph(); - - foreach (var existingRuntimeDescription in existingGraph.Runtimes.Values) - { - RuntimeDescription newRuntimeDescription; - - if (runtimeGraph.Runtimes.TryGetValue(existingRuntimeDescription.RuntimeIdentifier, out newRuntimeDescription)) - { - // overlapping RID, ensure that the imports match (same ordering and content) - if (!existingRuntimeDescription.InheritedRuntimes.SequenceEqual(newRuntimeDescription.InheritedRuntimes)) - { - Log.LogError($"RuntimeGroup {runtimeGroup.BaseRID} defines RID {newRuntimeDescription.RuntimeIdentifier} with imports {string.Join(";", newRuntimeDescription.InheritedRuntimes)} which differ from existing imports {string.Join(";", existingRuntimeDescription.InheritedRuntimes)}. You may avoid this by specifying {nameof(RuntimeGroup.OmitRIDDefinitions)} metadata with {newRuntimeDescription.RuntimeIdentifier}."); - } - } - } - - return RuntimeGraph.Merge(existingGraph, runtimeGraph); - } - - private void ValidateImports(RuntimeGraph runtimeGraph, Dictionary externalRIDs) - { - foreach (var runtimeDescription in runtimeGraph.Runtimes.Values) - { - string externalRuntimeJson; - - if (externalRIDs.TryGetValue(runtimeDescription.RuntimeIdentifier, out externalRuntimeJson)) - { - Log.LogError($"Runtime {runtimeDescription.RuntimeIdentifier} is defined in both this RuntimeGraph and {externalRuntimeJson}."); - } - - foreach (var import in runtimeDescription.InheritedRuntimes) - { - if (!runtimeGraph.Runtimes.ContainsKey(import) && !externalRIDs.ContainsKey(import)) - { - Log.LogError($"Runtime {runtimeDescription.RuntimeIdentifier} imports {import} which is not defined."); - } - } - } - } - - private void AddRuntimeIdentifiers(ICollection runtimeGroups) - { - if (AdditionalRuntimeIdentifiers == null || AdditionalRuntimeIdentifiers.Length == 0) - { - return; - } - - RuntimeGroupCollection runtimeGroupCollection = new RuntimeGroupCollection(runtimeGroups); - - foreach (string additionalRuntimeIdentifier in AdditionalRuntimeIdentifiers) - { - runtimeGroupCollection.AddRuntimeIdentifier(additionalRuntimeIdentifier, AdditionalRuntimeIdentifierParent); - } - } - - private static Dictionary> GetCompatibilityMap(RuntimeGraph graph) - { - Dictionary> compatibilityMap = new Dictionary>(); - - foreach (var rid in graph.Runtimes.Keys.OrderBy(rid => rid, StringComparer.Ordinal)) - { - compatibilityMap.Add(rid, graph.ExpandRuntime(rid)); - } - - return compatibilityMap; - } - - private static IDictionary> ReadCompatibilityMap(string mapFile) - { - var serializer = new JsonSerializer(); - using (var file = File.OpenText(mapFile)) - using (var jsonTextReader = new JsonTextReader(file) { MaxDepth = null }) - { - return serializer.Deserialize>>(jsonTextReader); - } - } - - private static void WriteCompatibilityMap(Dictionary> compatibilityMap, string mapFile) - { - var serializer = new JsonSerializer() - { - Formatting = Formatting.Indented, - StringEscapeHandling = StringEscapeHandling.EscapeNonAscii - }; - - string directory = Path.GetDirectoryName(mapFile); - if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) - { - Directory.CreateDirectory(directory); - } - - using (var file = File.CreateText(mapFile)) - { - serializer.Serialize(file, compatibilityMap); - } - } - - private static bool CompatibilityMapEquals(IDictionary> left, Dictionary> right) - { - if (left.Count != right.Count) - { - return false; - } - - foreach (var leftPair in left) - { - IEnumerable rightValue; - - if (!right.TryGetValue(leftPair.Key, out rightValue)) - { - return false; - } - - if (!rightValue.SequenceEqual(leftPair.Value)) - { - return false; - } - } - - return true; - } - - private static readonly XNamespace s_dgmlns = @"http://schemas.microsoft.com/vs/2009/dgml"; - private static void WriteRuntimeGraph(RuntimeGraph graph, string dependencyGraphFilePath) - { - - var doc = new XDocument(new XElement(s_dgmlns + "DirectedGraph")); - var nodesElement = new XElement(s_dgmlns + "Nodes"); - var linksElement = new XElement(s_dgmlns + "Links"); - doc.Root.Add(nodesElement); - doc.Root.Add(linksElement); - - foreach (var runtimeDescription in graph.Runtimes.Values) - { - nodesElement.Add(new XElement(s_dgmlns + "Node", - new XAttribute("Id", runtimeDescription.RuntimeIdentifier))); - - foreach (var import in runtimeDescription.InheritedRuntimes) - { - linksElement.Add(new XElement(s_dgmlns + "Link", - new XAttribute("Source", runtimeDescription.RuntimeIdentifier), - new XAttribute("Target", import))); - } - } - - using (var file = File.Create(dependencyGraphFilePath)) - { - doc.Save(file); - } - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj b/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj index 86e98f21dbb1e..958cf0e65df49 100644 --- a/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj +++ b/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj @@ -1,86 +1,63 @@ + $(NetCoreAppToolCurrent);$(NetFrameworkToolCurrent) - Microsoft.NETCore.Platforms.BuildTasks + true + false + true + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NET packages. + $(NoWarn);NU5128 - disable false false false false - false - - true - false - $(MSBuildProjectName) - true - Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. - $(NoWarn);NU5128 - true - - $(MSBuildProjectName) - UpdateRuntimeJson;$(BeforePack) <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' == 'core'">$(NetCoreAppToolCurrent) - <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' != 'core'">net472 + <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' != 'core'">$(NetFrameworkToolCurrent) <_generateRuntimeGraphTask>$([MSBuild]::NormalizePath('$(BaseOutputPath)', $(Configuration), '$(_generateRuntimeGraphTargetFramework)', '$(AssemblyName).dll')) - - $(AdditionalRuntimeIdentifiers);$(OutputRID) - - - - + + + + - - - - - - - + - - - - + + + + + + + + - - - - - - - - - - - - - - + + + + + + + diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json b/src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json new file mode 100644 index 0000000000000..f6f7fbf597cfb --- /dev/null +++ b/src/libraries/Microsoft.NETCore.Platforms/src/PortableRuntimeIdentifierGraph.json @@ -0,0 +1,475 @@ +{ + "runtimes": { + "android": { + "#import": [ + "linux-bionic" + ] + }, + "android-arm": { + "#import": [ + "android", + "linux-bionic-arm" + ] + }, + "android-arm64": { + "#import": [ + "android", + "linux-bionic-arm64" + ] + }, + "android-x64": { + "#import": [ + "android", + "linux-bionic-x64" + ] + }, + "android-x86": { + "#import": [ + "android", + "linux-bionic-x86" + ] + }, + "any": { + "#import": [ + "base" + ] + }, + "base": { + "#import": [] + }, + "browser": { + "#import": [ + "any" + ] + }, + "browser-wasm": { + "#import": [ + "browser" + ] + }, + "freebsd": { + "#import": [ + "unix" + ] + }, + "freebsd-arm64": { + "#import": [ + "freebsd", + "unix-arm64" + ] + }, + "freebsd-x64": { + "#import": [ + "freebsd", + "unix-x64" + ] + }, + "haiku": { + "#import": [ + "unix" + ] + }, + "haiku-x64": { + "#import": [ + "haiku", + "unix-x64" + ] + }, + "illumos": { + "#import": [ + "unix" + ] + }, + "illumos-x64": { + "#import": [ + "illumos", + "unix-x64" + ] + }, + "ios": { + "#import": [ + "unix" + ] + }, + "ios-arm": { + "#import": [ + "ios", + "unix-arm" + ] + }, + "ios-arm64": { + "#import": [ + "ios", + "unix-arm64" + ] + }, + "ios-x64": { + "#import": [ + "ios", + "unix-x64" + ] + }, + "ios-x86": { + "#import": [ + "ios", + "unix-x86" + ] + }, + "iossimulator": { + "#import": [ + "ios" + ] + }, + "iossimulator-arm64": { + "#import": [ + "iossimulator", + "ios-arm64" + ] + }, + "iossimulator-x64": { + "#import": [ + "iossimulator", + "ios-x64" + ] + }, + "iossimulator-x86": { + "#import": [ + "iossimulator", + "ios-x86" + ] + }, + "linux": { + "#import": [ + "unix" + ] + }, + "linux-arm": { + "#import": [ + "linux", + "unix-arm" + ] + }, + "linux-arm64": { + "#import": [ + "linux", + "unix-arm64" + ] + }, + "linux-armel": { + "#import": [ + "linux", + "unix-armel" + ] + }, + "linux-armv6": { + "#import": [ + "linux", + "unix-armv6" + ] + }, + "linux-bionic": { + "#import": [ + "linux" + ] + }, + "linux-bionic-arm": { + "#import": [ + "linux-bionic", + "linux-arm" + ] + }, + "linux-bionic-arm64": { + "#import": [ + "linux-bionic", + "linux-arm64" + ] + }, + "linux-bionic-x64": { + "#import": [ + "linux-bionic", + "linux-x64" + ] + }, + "linux-bionic-x86": { + "#import": [ + "linux-bionic", + "linux-x86" + ] + }, + "linux-loongarch64": { + "#import": [ + "linux", + "unix-loongarch64" + ] + }, + "linux-mips64": { + "#import": [ + "linux", + "unix-mips64" + ] + }, + "linux-musl": { + "#import": [ + "linux" + ] + }, + "linux-musl-arm": { + "#import": [ + "linux-musl", + "linux-arm" + ] + }, + "linux-musl-arm64": { + "#import": [ + "linux-musl", + "linux-arm64" + ] + }, + "linux-musl-armel": { + "#import": [ + "linux-musl", + "linux-armel" + ] + }, + "linux-musl-armv6": { + "#import": [ + "linux-musl", + "linux-armv6" + ] + }, + "linux-musl-ppc64le": { + "#import": [ + "linux-musl", + "linux-ppc64le" + ] + }, + "linux-musl-riscv64": { + "#import": [ + "linux-musl", + "linux-riscv64" + ] + }, + "linux-musl-s390x": { + "#import": [ + "linux-musl", + "linux-s390x" + ] + }, + "linux-musl-x64": { + "#import": [ + "linux-musl", + "linux-x64" + ] + }, + "linux-musl-x86": { + "#import": [ + "linux-musl", + "linux-x86" + ] + }, + "linux-ppc64le": { + "#import": [ + "linux", + "unix-ppc64le" + ] + }, + "linux-riscv64": { + "#import": [ + "linux", + "unix-riscv64" + ] + }, + "linux-s390x": { + "#import": [ + "linux", + "unix-s390x" + ] + }, + "linux-x64": { + "#import": [ + "linux", + "unix-x64" + ] + }, + "linux-x86": { + "#import": [ + "linux", + "unix-x86" + ] + }, + "maccatalyst": { + "#import": [ + "ios" + ] + }, + "maccatalyst-arm64": { + "#import": [ + "maccatalyst", + "ios-arm64" + ] + }, + "maccatalyst-x64": { + "#import": [ + "maccatalyst", + "ios-x64" + ] + }, + "osx": { + "#import": [ + "unix" + ] + }, + "osx-arm64": { + "#import": [ + "osx", + "unix-arm64" + ] + }, + "osx-x64": { + "#import": [ + "osx", + "unix-x64" + ] + }, + "solaris": { + "#import": [ + "unix" + ] + }, + "solaris-x64": { + "#import": [ + "solaris", + "unix-x64" + ] + }, + "tvos": { + "#import": [ + "unix" + ] + }, + "tvos-arm64": { + "#import": [ + "tvos", + "unix-arm64" + ] + }, + "tvos-x64": { + "#import": [ + "tvos", + "unix-x64" + ] + }, + "tvossimulator": { + "#import": [ + "tvos" + ] + }, + "tvossimulator-arm64": { + "#import": [ + "tvossimulator", + "tvos-arm64" + ] + }, + "tvossimulator-x64": { + "#import": [ + "tvossimulator", + "tvos-x64" + ] + }, + "unix": { + "#import": [ + "any" + ] + }, + "unix-arm": { + "#import": [ + "unix" + ] + }, + "unix-arm64": { + "#import": [ + "unix" + ] + }, + "unix-armel": { + "#import": [ + "unix" + ] + }, + "unix-armv6": { + "#import": [ + "unix" + ] + }, + "unix-loongarch64": { + "#import": [ + "unix" + ] + }, + "unix-mips64": { + "#import": [ + "unix" + ] + }, + "unix-ppc64le": { + "#import": [ + "unix" + ] + }, + "unix-riscv64": { + "#import": [ + "unix" + ] + }, + "unix-s390x": { + "#import": [ + "unix" + ] + }, + "unix-x64": { + "#import": [ + "unix" + ] + }, + "unix-x86": { + "#import": [ + "unix" + ] + }, + "wasi": { + "#import": [ + "any" + ] + }, + "wasi-wasm": { + "#import": [ + "wasi" + ] + }, + "win": { + "#import": [ + "any" + ] + }, + "win-arm": { + "#import": [ + "win" + ] + }, + "win-arm64": { + "#import": [ + "win" + ] + }, + "win-x64": { + "#import": [ + "win" + ] + }, + "win-x86": { + "#import": [ + "win" + ] + } + } + } \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs deleted file mode 100644 index b464d5f0f54e3..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs +++ /dev/null @@ -1,208 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Diagnostics; -using System.Text; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class RID - { - internal const char VersionDelimiter = '.'; - internal const char ArchitectureDelimiter = '-'; - internal const char QualifierDelimiter = '-'; - - public string BaseRID { get; set; } - public bool OmitVersionDelimiter { get; set; } - public RuntimeVersion Version { get; set; } - public string Architecture { get; set; } - public string Qualifier { get; set; } - - public override string ToString() - { - StringBuilder builder = new StringBuilder(BaseRID); - - if (HasVersion) - { - if (!OmitVersionDelimiter) - { - builder.Append(VersionDelimiter); - } - builder.Append(Version); - } - - if (HasArchitecture) - { - builder.Append(ArchitectureDelimiter); - builder.Append(Architecture); - } - - if (HasQualifier) - { - builder.Append(QualifierDelimiter); - builder.Append(Qualifier); - } - - return builder.ToString(); - } - - private enum RIDPart : int - { - Base = 0, - Version, - Architecture, - Qualifier, - Max = Qualifier - } - - public static RID Parse(string runtimeIdentifier, bool noQualifier) - { - string[] parts = new string[(int)RIDPart.Max + 1]; - bool omitVersionDelimiter = true; - RIDPart parseState = RIDPart.Base; - - int partStart = 0, partLength; - - // qualifier is indistinguishable from arch so we cannot distinguish it for parsing purposes - Debug.Assert(ArchitectureDelimiter == QualifierDelimiter); - - for (int i = 0; i < runtimeIdentifier.Length; i++) - { - char current = runtimeIdentifier[i]; - partLength = i - partStart; - - switch (parseState) - { - case RIDPart.Base: - // treat any number as the start of the version - if (current == VersionDelimiter || (current >= '0' && current <= '9')) - { - SetPart(); - partStart = i; - if (current == VersionDelimiter) - { - omitVersionDelimiter = false; - partStart = i + 1; - } - parseState = RIDPart.Version; - } - // version might be omitted - else if (current == ArchitectureDelimiter) - { - // The qualifier delimiter and architecture delimiter are the same. - // When there is no qualifier, there will be one delimiter past the base part - // for the architecture. - // So if we see another delimiter later in the string (for the architecture), - // extend the base part instead of starting the architecture part. - if (noQualifier && runtimeIdentifier.IndexOf(ArchitectureDelimiter, i + 1) != -1) - { - break; - } - // ensure there's no version later in the string - if (runtimeIdentifier.IndexOf(VersionDelimiter, i) != -1) - { - break; - } - SetPart(); - partStart = i + 1; // skip delimiter - parseState = RIDPart.Architecture; - } - break; - case RIDPart.Version: - if (current == ArchitectureDelimiter) - { - SetPart(); - partStart = i + 1; // skip delimiter - parseState = RIDPart.Architecture; - } - break; - case RIDPart.Architecture: - if (current == QualifierDelimiter) - { - SetPart(); - partStart = i + 1; // skip delimiter - parseState = RIDPart.Qualifier; - } - break; - default: - break; - } - } - - partLength = runtimeIdentifier.Length - partStart; - if (partLength > 0) - { - SetPart(); - } - - string GetPart(RIDPart part) - { - return parts[(int)part]; - } - - void SetPart() - { - if (partLength == 0) - { - throw new ArgumentException($"Unexpected delimiter at position {partStart} in \"{runtimeIdentifier}\""); - } - - parts[(int)parseState] = runtimeIdentifier.Substring(partStart, partLength); - } - - string version = GetPart(RIDPart.Version); - - if (version == null) - { - omitVersionDelimiter = false; - } - - return new RID() - { - BaseRID = GetPart(RIDPart.Base), - OmitVersionDelimiter = omitVersionDelimiter, - Version = version == null ? null : new RuntimeVersion(version), - Architecture = GetPart(RIDPart.Architecture), - Qualifier = GetPart(RIDPart.Qualifier) - }; - } - - public bool HasVersion => Version != null; - - public bool HasArchitecture => Architecture != null; - - public bool HasQualifier => Qualifier != null; - - public override bool Equals(object obj) - { - return Equals(obj as RID); - } - - public bool Equals(RID obj) - { - return object.ReferenceEquals(obj, this) || - (obj is not null && - BaseRID == obj.BaseRID && - (Version == null || OmitVersionDelimiter == obj.OmitVersionDelimiter) && - Version == obj.Version && - Architecture == obj.Architecture && - Qualifier == obj.Qualifier); - - } - - public override int GetHashCode() - { -#if NETFRAMEWORK - return BaseRID.GetHashCode(); -#else - HashCode hashCode = default; - hashCode.Add(BaseRID); - hashCode.Add(Version); - hashCode.Add(Architecture); - hashCode.Add(Qualifier); - return hashCode.ToHashCode(); -#endif - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs deleted file mode 100644 index 9d5c169cb526d..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroup.cs +++ /dev/null @@ -1,298 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using NuGet.RuntimeModel; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class RuntimeGroup - { - private const string rootRID = "any"; - - public RuntimeGroup(ITaskItem item) - { - BaseRID = item.ItemSpec; - Parent = item.GetString(nameof(Parent)); - Versions = new HashSet(item.GetStrings(nameof(Versions)).Select(v => new RuntimeVersion(v))); - TreatVersionsAsCompatible = item.GetBoolean(nameof(TreatVersionsAsCompatible), true); - OmitVersionDelimiter = item.GetBoolean(nameof(OmitVersionDelimiter)); - ApplyVersionsToParent = item.GetBoolean(nameof(ApplyVersionsToParent)); - Architectures = new HashSet(item.GetStrings(nameof(Architectures))); - AdditionalQualifiers = new HashSet(item.GetStrings(nameof(AdditionalQualifiers))); - OmitRIDs = new HashSet(item.GetStrings(nameof(OmitRIDs))); - OmitRIDDefinitions = new HashSet(item.GetStrings(nameof(OmitRIDDefinitions))); - OmitRIDReferences = new HashSet(item.GetStrings(nameof(OmitRIDReferences))); - } - - public RuntimeGroup(string baseRID, string parent, bool treatVersionsAsCompatible = true, bool omitVersionDelimiter = false, bool applyVersionsToParent = false, IEnumerable additionalQualifiers = null) - { - BaseRID = baseRID; - Parent = parent; - Versions = new HashSet(); - TreatVersionsAsCompatible = treatVersionsAsCompatible; - OmitVersionDelimiter = omitVersionDelimiter; - ApplyVersionsToParent = applyVersionsToParent; - Architectures = new HashSet(); - AdditionalQualifiers = new HashSet(additionalQualifiers.NullAsEmpty()); - OmitRIDs = new HashSet(); - OmitRIDDefinitions = new HashSet(); - OmitRIDReferences = new HashSet(); - } - - public string BaseRID { get; } - public string Parent { get; } - public ICollection Versions { get; } - public bool TreatVersionsAsCompatible { get; } - public bool OmitVersionDelimiter { get; } - public bool ApplyVersionsToParent { get; } - public ICollection Architectures { get; } - public ICollection AdditionalQualifiers { get; } - public ICollection OmitRIDs { get; } - public ICollection OmitRIDDefinitions { get; } - public ICollection OmitRIDReferences { get; } - - public void ApplyRid(RID rid) - { - if (!rid.BaseRID.Equals(BaseRID, StringComparison.Ordinal)) - { - throw new ArgumentException($"Cannot apply {nameof(RID)} with {nameof(RID.BaseRID)} {rid.BaseRID} to {nameof(RuntimeGroup)} with {nameof(RuntimeGroup.BaseRID)} {BaseRID}.", nameof(rid)); - } - - if (rid.HasArchitecture) - { - Architectures.Add(rid.Architecture); - } - - if (rid.HasVersion) - { - Versions.Add(rid.Version); - } - - if (rid.HasQualifier) - { - AdditionalQualifiers.Add(rid.Qualifier); - } - } - - internal sealed class RIDMapping - { - public RIDMapping(RID runtimeIdentifier) - { - RuntimeIdentifier = runtimeIdentifier; - Imports = Enumerable.Empty(); - } - - public RIDMapping(RID runtimeIdentifier, IEnumerable imports) - { - RuntimeIdentifier = runtimeIdentifier; - Imports = imports; - } - - public RID RuntimeIdentifier { get; } - - public IEnumerable Imports { get; } - } - - - internal RID CreateRuntime(string baseRid, RuntimeVersion version = null, string architecture = null, string qualifier = null) - { - return new RID() - { - BaseRID = baseRid, - Version = version, - OmitVersionDelimiter = OmitVersionDelimiter, - Architecture = architecture, - Qualifier = qualifier - }; - } - - internal IEnumerable GetRIDMappings() - { - // base => - // Parent - yield return Parent == null ? - new RIDMapping(CreateRuntime(BaseRID)) : - new RIDMapping(CreateRuntime(BaseRID), new[] { CreateRuntime(Parent) }); - - foreach (var architecture in Architectures) - { - // base + arch => - // base, - // parent + arch - var imports = new List() - { - CreateRuntime(BaseRID) - }; - - if (!IsNullOrRoot(Parent)) - { - imports.Add(CreateRuntime(Parent, architecture: architecture)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, architecture: architecture), imports); - } - - RuntimeVersion lastVersion = null; - foreach (var version in Versions) - { - // base + version => - // base + lastVersion, - // parent + version (optionally) - var imports = new List() - { - CreateRuntime(BaseRID, version: lastVersion) - }; - - if (ApplyVersionsToParent) - { - imports.Add(CreateRuntime(Parent, version: version)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version), imports); - - foreach (var architecture in Architectures) - { - // base + version + architecture => - // base + version, - // base + lastVersion + architecture, - // parent + version + architecture (optionally) - var archImports = new List() - { - CreateRuntime(BaseRID, version: version), - CreateRuntime(BaseRID, version: lastVersion, architecture: architecture) - }; - - if (ApplyVersionsToParent) - { - archImports.Add(CreateRuntime(Parent, version: version, architecture: architecture)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version, architecture: architecture), archImports); - } - - if (TreatVersionsAsCompatible) - { - lastVersion = version; - } - } - - foreach (var qualifier in AdditionalQualifiers) - { - // base + qual => - // base, - // parent + qual - yield return new RIDMapping(CreateRuntime(BaseRID, qualifier: qualifier), - new[] - { - CreateRuntime(BaseRID), - IsNullOrRoot(Parent) ? CreateRuntime(qualifier) : CreateRuntime(Parent, qualifier:qualifier) - }); - - foreach (var architecture in Architectures) - { - // base + arch + qualifier => - // base + qualifier, - // base + arch - // parent + arch + qualifier - var imports = new List() - { - CreateRuntime(BaseRID, qualifier: qualifier), - CreateRuntime(BaseRID, architecture: architecture) - }; - - if (!IsNullOrRoot(Parent)) - { - imports.Add(CreateRuntime(Parent, architecture: architecture, qualifier: qualifier)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, architecture: architecture, qualifier: qualifier), imports); - } - - lastVersion = null; - foreach (var version in Versions) - { - // base + version + qualifier => - // base + version, - // base + lastVersion + qualifier - // parent + version + qualifier (optionally) - var imports = new List() - { - CreateRuntime(BaseRID, version: version), - CreateRuntime(BaseRID, version: lastVersion, qualifier: qualifier) - }; - - if (ApplyVersionsToParent) - { - imports.Add(CreateRuntime(Parent, version: version, qualifier: qualifier)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version, qualifier: qualifier), imports); - - foreach (var architecture in Architectures) - { - // base + version + architecture + qualifier => - // base + version + qualifier, - // base + version + architecture, - // base + version, - // base + lastVersion + architecture + qualifier, - // parent + version + architecture + qualifier (optionally) - var archImports = new List() - { - CreateRuntime(BaseRID, version: version, qualifier: qualifier), - CreateRuntime(BaseRID, version: version, architecture: architecture), - CreateRuntime(BaseRID, version: version), - CreateRuntime(BaseRID, version: lastVersion, architecture: architecture, qualifier: qualifier) - }; - - if (ApplyVersionsToParent) - { - imports.Add(CreateRuntime(Parent, version: version, architecture: architecture, qualifier: qualifier)); - } - - yield return new RIDMapping(CreateRuntime(BaseRID, version: version, architecture: architecture, qualifier: qualifier), archImports); - } - - if (TreatVersionsAsCompatible) - { - lastVersion = version; - } - } - } - } - - private static bool IsNullOrRoot(string rid) - { - return rid == null || rid == rootRID; - } - - - public IEnumerable GetRuntimeDescriptions() - { - foreach (var mapping in GetRIDMappings()) - { - var rid = mapping.RuntimeIdentifier.ToString(); - - if (OmitRIDs.Contains(rid) || OmitRIDDefinitions.Contains(rid)) - { - continue; - } - - var imports = mapping.Imports - .Select(i => i.ToString()) - .Where(i => !OmitRIDs.Contains(i) && !OmitRIDReferences.Contains(i)) - .ToArray(); - - yield return new RuntimeDescription(rid, imports); - } - } - - public RuntimeGraph GetRuntimeGraph() - { - return new RuntimeGraph(GetRuntimeDescriptions()); - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs deleted file mode 100644 index ec4762d71424c..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs +++ /dev/null @@ -1,160 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using NuGet.RuntimeModel; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - public class RuntimeGroupCollection - { - private readonly ICollection allRuntimeGroups; - private readonly Dictionary> runtimeGroupsByBaseRID; - private readonly HashSet knownRIDs; - - public RuntimeGroupCollection(ICollection runtimeGroups) - { - allRuntimeGroups = runtimeGroups; - runtimeGroupsByBaseRID = runtimeGroups.GroupBy(rg => rg.BaseRID).ToDictionary(g => g.Key, g => new List(g.AsEnumerable())); - - knownRIDs = new HashSet(allRuntimeGroups.SelectMany(rg => rg.GetRIDMappings()).Select(mapping => mapping.RuntimeIdentifier)); - } - - /// - /// Locate an existing RuntimeGroup to append to. - /// Existing group must have matching baseRID, then we choose based on closest version, - /// and prefer matching arch and qualifier. - /// If no match is found, then a new RID hierarchy is created. - /// - /// - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { - // don't parse qualifier since we don't use them and they are ambiguous with `-` in base RID - RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); - } - - public void AddRuntimeIdentifier(RID rid, string parent) - { - // Do nothing if we already know about the RID - if (knownRIDs.Contains(rid)) - { - return; - } - - RuntimeGroup runtimeGroup = null; - - if (runtimeGroupsByBaseRID.TryGetValue(rid.BaseRID, out var candidateRuntimeGroups)) - { - RuntimeVersion closestVersion = null; - - foreach (var candidate in candidateRuntimeGroups) - { - if (rid.HasVersion) - { - // Find the closest previous version - foreach (var version in candidate.Versions) - { - // a previous version - if (version <= rid.Version) - { - // haven't yet found a match or this is a closer match - if (closestVersion == null || version > closestVersion) - { - closestVersion = version; - runtimeGroup = candidate; - } - else if (version == closestVersion) - { - // found a tie in version, examine other fields - considerCandidate(); - } - } - } - } - - // if we don't have a version, or if we couldn't find any match, consider other fields - if (!rid.HasVersion) - { - considerCandidate(); - } - - // if we don't have a match yet, take this as it matches on baseRID - runtimeGroup ??= candidate; - - void considerCandidate() - { - // is this a better match? - if (!rid.HasArchitecture || candidate.Architectures.Contains(rid.Architecture)) - { - if (!rid.HasQualifier || candidate.AdditionalQualifiers.Contains(rid.Qualifier)) - { - // matched on arch and qualifier. - runtimeGroup = candidate; - } - else if (rid.HasArchitecture && !runtimeGroup.Architectures.Contains(rid.Architecture)) - { - // matched only on arch and existing match doesn't match arch - runtimeGroup = candidate; - } - } - } - } - - Debug.Assert(runtimeGroup != null, "Empty candidates?"); - } - else - { - // This is an unknown base RID, we'll need to add a new group. - if (string.IsNullOrEmpty(parent)) - { - throw new InvalidOperationException($"AdditionalRuntimeIdentifier {rid} was specified, which could not be found in any existing {nameof(RuntimeGroup)}, and no {nameof(parent)} was specified."); - } - - runtimeGroup = new RuntimeGroup(rid.BaseRID, parent); - - AddRuntimeGroup(runtimeGroup); - } - - runtimeGroup.ApplyRid(rid); - - // Compute the portion of the RID graph produced from this modified RuntimeGroup - var ridMappings = runtimeGroup.GetRIDMappings(); - - // Record any newly defined RIDs in our set of known RIDs - foreach (RID definedRID in ridMappings.Select(mapping => mapping.RuntimeIdentifier)) - { - knownRIDs.Add(definedRID); - } - - // Make sure that any RID imported is added as well. This allows users to specify - // a single new RID and we'll add any new RIDs up the parent chain that might be needed. - foreach (RID importedRID in ridMappings.SelectMany(mapping => mapping.Imports)) - { - // This should not introduce any new RuntimeGroups, so we specify parent as null - AddRuntimeIdentifier(importedRID, null); - } - - } - - private void AddRuntimeGroup(RuntimeGroup runtimeGroup) - { - List baseRuntimeGroups; - - if (!runtimeGroupsByBaseRID.TryGetValue(runtimeGroup.BaseRID, out baseRuntimeGroups)) - { - runtimeGroupsByBaseRID[runtimeGroup.BaseRID] = baseRuntimeGroups = new List(); - } - - baseRuntimeGroups.Add(runtimeGroup); - allRuntimeGroups.Add(runtimeGroup); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs b/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs deleted file mode 100644 index ca7b1dbd47406..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeVersion.cs +++ /dev/null @@ -1,140 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; - -namespace Microsoft.NETCore.Platforms.BuildTasks -{ - - /// - /// A Version class that also supports a single integer (major only) - /// - public sealed class RuntimeVersion : IComparable, IComparable, IEquatable - { - private readonly string versionString; - private readonly Version version; - private readonly bool hasMinor; - - public RuntimeVersion(string versionString) - { - // intentionally don't support the type of version that omits the separators as it is abiguous. - // for example Windows 8.1 was encoded as win81, where as Windows 10.0 was encoded as win10 - this.versionString = versionString; - string toParse = versionString; -#if NETCOREAPP - if (!toParse.Contains('.')) -#else - if (toParse.IndexOf('.') == -1) -#endif - { - toParse += ".0"; - hasMinor = false; - } - else - { - hasMinor = true; - } - version = Version.Parse(toParse); - } - - public int CompareTo(object obj) - { - if (obj == null) - { - return 1; - } - - if (obj is RuntimeVersion version) - { - return CompareTo(version); - } - - throw new ArgumentException($"Cannot compare {nameof(RuntimeVersion)} to object of type {obj.GetType()}.", nameof(obj)); - } - - public int CompareTo(RuntimeVersion other) - { - if (other == null) - { - return 1; - } - - int versionResult = version.CompareTo(other?.version); - - if (versionResult == 0) - { - if (!hasMinor && other.hasMinor) - { - return -1; - } - - if (hasMinor && !other.hasMinor) - { - return 1; - } - - return string.CompareOrdinal(versionString, other.versionString); - } - - return versionResult; - } - - public bool Equals(RuntimeVersion other) - { - return object.ReferenceEquals(other, this) || - (other != null && - versionString.Equals(other.versionString, StringComparison.Ordinal)); - } - - public override bool Equals(object obj) - { - return Equals(obj as RuntimeVersion); - } - - public override int GetHashCode() - { - return versionString.GetHashCode(); - } - - public override string ToString() - { - return versionString; - } - - public static bool operator ==(RuntimeVersion v1, RuntimeVersion v2) - { - if (v2 is null) - { - return (v1 is null) ? true : false; - } - - return ReferenceEquals(v2, v1) ? true : v2.Equals(v1); - } - - public static bool operator !=(RuntimeVersion v1, RuntimeVersion v2) => !(v1 == v2); - - public static bool operator <(RuntimeVersion v1, RuntimeVersion v2) - { - if (v1 is null) - { - return !(v2 is null); - } - - return v1.CompareTo(v2) < 0; - } - - public static bool operator <=(RuntimeVersion v1, RuntimeVersion v2) - { - if (v1 is null) - { - return true; - } - - return v1.CompareTo(v2) <= 0; - } - - public static bool operator >(RuntimeVersion v1, RuntimeVersion v2) => v2 < v1; - - public static bool operator >=(RuntimeVersion v1, RuntimeVersion v2) => v2 <= v1; - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs b/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs new file mode 100644 index 0000000000000..867da09df9b67 --- /dev/null +++ b/src/libraries/Microsoft.NETCore.Platforms/src/UpdateRuntimeIdentifierGraph.cs @@ -0,0 +1,54 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.IO; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace Microsoft.NETCore.Platforms +{ + public class UpdateRuntimeIdentifierGraph : Task + { + [Required] + public string? InputFile { get; set; } + + [Required] + public string? OutputFile { get; set; } + + // ItemSpec should be a RID, and "Imports" metadata should be a semicolon-separated list of RIDs that the ItemSpec RID imports + [Required] + public ITaskItem[]? AdditionalRuntimeIdentifiers { get; set; } + + public override bool Execute() + { + JToken json; + + using (StreamReader streamReader = File.OpenText(InputFile!)) + using (JsonTextReader jsonReader = new JsonTextReader(streamReader)) + { + json = JObject.ReadFrom(jsonReader); + } + + JObject runtimes = (JObject)json["runtimes"]!; + foreach (ITaskItem rid in AdditionalRuntimeIdentifiers!) + { + // Skip the RID if it's already in the graph + if (runtimes.ContainsKey(rid.ItemSpec)) + { + continue; + } + + string[] importedRids = rid.GetMetadata("Imports").Split(';'); + runtimes.Add(rid.ItemSpec, new JObject(new JProperty("#import", new JArray(importedRids)))); + } + + using StreamWriter streamWriter = File.CreateText(OutputFile!); + using JsonTextWriter jsonWriter = new(streamWriter) { Formatting = Formatting.Indented }; + json.WriteTo(jsonWriter); + + return true; + } + } +} diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json deleted file mode 100644 index 085cb7b518ff7..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json +++ /dev/null @@ -1,11768 +0,0 @@ -{ - "alpine": [ - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine-arm": [ - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine-arm64": [ - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine-armv6": [ - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine-ppc64le": [ - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine-s390x": [ - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine-x64": [ - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine-x86": [ - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.10": [ - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.10-arm": [ - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.10-arm64": [ - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.10-armv6": [ - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.10-ppc64le": [ - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.10-s390x": [ - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.10-x64": [ - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.10-x86": [ - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.11": [ - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.11-arm": [ - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.11-arm64": [ - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.11-armv6": [ - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.11-ppc64le": [ - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.11-s390x": [ - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.11-x64": [ - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.11-x86": [ - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.12": [ - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.12-arm": [ - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.12-arm64": [ - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.12-armv6": [ - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.12-ppc64le": [ - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.12-s390x": [ - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.12-x64": [ - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.12-x86": [ - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.13": [ - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.13-arm": [ - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.13-arm64": [ - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.13-armv6": [ - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.13-ppc64le": [ - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.13-s390x": [ - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.13-x64": [ - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.13-x86": [ - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.14": [ - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.14-arm": [ - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.14-arm64": [ - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.14-armv6": [ - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.14-ppc64le": [ - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.14-s390x": [ - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.14-x64": [ - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.14-x86": [ - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.15": [ - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.15-arm": [ - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.15-arm64": [ - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.15-armv6": [ - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.15-ppc64le": [ - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.15-s390x": [ - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.15-x64": [ - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.15-x86": [ - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.16": [ - "alpine.3.16", - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.16-arm": [ - "alpine.3.16-arm", - "alpine.3.16", - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.16-arm64": [ - "alpine.3.16-arm64", - "alpine.3.16", - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.16-armv6": [ - "alpine.3.16-armv6", - "alpine.3.16", - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.16-ppc64le": [ - "alpine.3.16-ppc64le", - "alpine.3.16", - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.16-s390x": [ - "alpine.3.16-s390x", - "alpine.3.16", - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.16-x64": [ - "alpine.3.16-x64", - "alpine.3.16", - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.16-x86": [ - "alpine.3.16-x86", - "alpine.3.16", - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.17": [ - "alpine.3.17", - "alpine.3.16", - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.17-arm": [ - "alpine.3.17-arm", - "alpine.3.17", - "alpine.3.16-arm", - "alpine.3.16", - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.17-arm64": [ - "alpine.3.17-arm64", - "alpine.3.17", - "alpine.3.16-arm64", - "alpine.3.16", - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.17-armv6": [ - "alpine.3.17-armv6", - "alpine.3.17", - "alpine.3.16-armv6", - "alpine.3.16", - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.17-ppc64le": [ - "alpine.3.17-ppc64le", - "alpine.3.17", - "alpine.3.16-ppc64le", - "alpine.3.16", - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.17-s390x": [ - "alpine.3.17-s390x", - "alpine.3.17", - "alpine.3.16-s390x", - "alpine.3.16", - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.17-x64": [ - "alpine.3.17-x64", - "alpine.3.17", - "alpine.3.16-x64", - "alpine.3.16", - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.17-x86": [ - "alpine.3.17-x86", - "alpine.3.17", - "alpine.3.16-x86", - "alpine.3.16", - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.18": [ - "alpine.3.18", - "alpine.3.17", - "alpine.3.16", - "alpine.3.15", - "alpine.3.14", - "alpine.3.13", - "alpine.3.12", - "alpine.3.11", - "alpine.3.10", - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.18-arm": [ - "alpine.3.18-arm", - "alpine.3.18", - "alpine.3.17-arm", - "alpine.3.17", - "alpine.3.16-arm", - "alpine.3.16", - "alpine.3.15-arm", - "alpine.3.15", - "alpine.3.14-arm", - "alpine.3.14", - "alpine.3.13-arm", - "alpine.3.13", - "alpine.3.12-arm", - "alpine.3.12", - "alpine.3.11-arm", - "alpine.3.11", - "alpine.3.10-arm", - "alpine.3.10", - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.18-arm64": [ - "alpine.3.18-arm64", - "alpine.3.18", - "alpine.3.17-arm64", - "alpine.3.17", - "alpine.3.16-arm64", - "alpine.3.16", - "alpine.3.15-arm64", - "alpine.3.15", - "alpine.3.14-arm64", - "alpine.3.14", - "alpine.3.13-arm64", - "alpine.3.13", - "alpine.3.12-arm64", - "alpine.3.12", - "alpine.3.11-arm64", - "alpine.3.11", - "alpine.3.10-arm64", - "alpine.3.10", - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.18-armv6": [ - "alpine.3.18-armv6", - "alpine.3.18", - "alpine.3.17-armv6", - "alpine.3.17", - "alpine.3.16-armv6", - "alpine.3.16", - "alpine.3.15-armv6", - "alpine.3.15", - "alpine.3.14-armv6", - "alpine.3.14", - "alpine.3.13-armv6", - "alpine.3.13", - "alpine.3.12-armv6", - "alpine.3.12", - "alpine.3.11-armv6", - "alpine.3.11", - "alpine.3.10-armv6", - "alpine.3.10", - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.18-ppc64le": [ - "alpine.3.18-ppc64le", - "alpine.3.18", - "alpine.3.17-ppc64le", - "alpine.3.17", - "alpine.3.16-ppc64le", - "alpine.3.16", - "alpine.3.15-ppc64le", - "alpine.3.15", - "alpine.3.14-ppc64le", - "alpine.3.14", - "alpine.3.13-ppc64le", - "alpine.3.13", - "alpine.3.12-ppc64le", - "alpine.3.12", - "alpine.3.11-ppc64le", - "alpine.3.11", - "alpine.3.10-ppc64le", - "alpine.3.10", - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.18-s390x": [ - "alpine.3.18-s390x", - "alpine.3.18", - "alpine.3.17-s390x", - "alpine.3.17", - "alpine.3.16-s390x", - "alpine.3.16", - "alpine.3.15-s390x", - "alpine.3.15", - "alpine.3.14-s390x", - "alpine.3.14", - "alpine.3.13-s390x", - "alpine.3.13", - "alpine.3.12-s390x", - "alpine.3.12", - "alpine.3.11-s390x", - "alpine.3.11", - "alpine.3.10-s390x", - "alpine.3.10", - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.18-x64": [ - "alpine.3.18-x64", - "alpine.3.18", - "alpine.3.17-x64", - "alpine.3.17", - "alpine.3.16-x64", - "alpine.3.16", - "alpine.3.15-x64", - "alpine.3.15", - "alpine.3.14-x64", - "alpine.3.14", - "alpine.3.13-x64", - "alpine.3.13", - "alpine.3.12-x64", - "alpine.3.12", - "alpine.3.11-x64", - "alpine.3.11", - "alpine.3.10-x64", - "alpine.3.10", - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.18-x86": [ - "alpine.3.18-x86", - "alpine.3.18", - "alpine.3.17-x86", - "alpine.3.17", - "alpine.3.16-x86", - "alpine.3.16", - "alpine.3.15-x86", - "alpine.3.15", - "alpine.3.14-x86", - "alpine.3.14", - "alpine.3.13-x86", - "alpine.3.13", - "alpine.3.12-x86", - "alpine.3.12", - "alpine.3.11-x86", - "alpine.3.11", - "alpine.3.10-x86", - "alpine.3.10", - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.6": [ - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.6-arm": [ - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.6-arm64": [ - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.6-armv6": [ - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.6-ppc64le": [ - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.6-s390x": [ - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.6-x64": [ - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.6-x86": [ - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.7": [ - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.7-arm": [ - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.7-arm64": [ - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.7-armv6": [ - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.7-ppc64le": [ - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.7-s390x": [ - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.7-x64": [ - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.7-x86": [ - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.8": [ - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.8-arm": [ - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.8-arm64": [ - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.8-armv6": [ - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.8-ppc64le": [ - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.8-s390x": [ - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.8-x64": [ - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.8-x86": [ - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "alpine.3.9": [ - "alpine.3.9", - "alpine.3.8", - "alpine.3.7", - "alpine.3.6", - "alpine", - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "alpine.3.9-arm": [ - "alpine.3.9-arm", - "alpine.3.9", - "alpine.3.8-arm", - "alpine.3.8", - "alpine.3.7-arm", - "alpine.3.7", - "alpine.3.6-arm", - "alpine.3.6", - "alpine-arm", - "alpine", - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "alpine.3.9-arm64": [ - "alpine.3.9-arm64", - "alpine.3.9", - "alpine.3.8-arm64", - "alpine.3.8", - "alpine.3.7-arm64", - "alpine.3.7", - "alpine.3.6-arm64", - "alpine.3.6", - "alpine-arm64", - "alpine", - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "alpine.3.9-armv6": [ - "alpine.3.9-armv6", - "alpine.3.9", - "alpine.3.8-armv6", - "alpine.3.8", - "alpine.3.7-armv6", - "alpine.3.7", - "alpine.3.6-armv6", - "alpine.3.6", - "alpine-armv6", - "alpine", - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "alpine.3.9-ppc64le": [ - "alpine.3.9-ppc64le", - "alpine.3.9", - "alpine.3.8-ppc64le", - "alpine.3.8", - "alpine.3.7-ppc64le", - "alpine.3.7", - "alpine.3.6-ppc64le", - "alpine.3.6", - "alpine-ppc64le", - "alpine", - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "alpine.3.9-s390x": [ - "alpine.3.9-s390x", - "alpine.3.9", - "alpine.3.8-s390x", - "alpine.3.8", - "alpine.3.7-s390x", - "alpine.3.7", - "alpine.3.6-s390x", - "alpine.3.6", - "alpine-s390x", - "alpine", - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "alpine.3.9-x64": [ - "alpine.3.9-x64", - "alpine.3.9", - "alpine.3.8-x64", - "alpine.3.8", - "alpine.3.7-x64", - "alpine.3.7", - "alpine.3.6-x64", - "alpine.3.6", - "alpine-x64", - "alpine", - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "alpine.3.9-x86": [ - "alpine.3.9-x86", - "alpine.3.9", - "alpine.3.8-x86", - "alpine.3.8", - "alpine.3.7-x86", - "alpine.3.7", - "alpine.3.6-x86", - "alpine.3.6", - "alpine-x86", - "alpine", - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android": [ - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android-arm": [ - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android-arm64": [ - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android-x64": [ - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android-x86": [ - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.21": [ - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.21-arm": [ - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.21-arm64": [ - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.21-x64": [ - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.21-x86": [ - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.22": [ - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.22-arm": [ - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.22-arm64": [ - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.22-x64": [ - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.22-x86": [ - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.23": [ - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.23-arm": [ - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.23-arm64": [ - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.23-x64": [ - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.23-x86": [ - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.24": [ - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.24-arm": [ - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.24-arm64": [ - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.24-x64": [ - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.24-x86": [ - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.25": [ - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.25-arm": [ - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.25-arm64": [ - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.25-x64": [ - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.25-x86": [ - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.26": [ - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.26-arm": [ - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.26-arm64": [ - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.26-x64": [ - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.26-x86": [ - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.27": [ - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.27-arm": [ - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.27-arm64": [ - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.27-x64": [ - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.27-x86": [ - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.28": [ - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.28-arm": [ - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.28-arm64": [ - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.28-x64": [ - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.28-x86": [ - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.29": [ - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.29-arm": [ - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.29-arm64": [ - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.29-x64": [ - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.29-x86": [ - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.30": [ - "android.30", - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.30-arm": [ - "android.30-arm", - "android.30", - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.30-arm64": [ - "android.30-arm64", - "android.30", - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.30-x64": [ - "android.30-x64", - "android.30", - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.30-x86": [ - "android.30-x86", - "android.30", - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.31": [ - "android.31", - "android.30", - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.31-arm": [ - "android.31-arm", - "android.31", - "android.30-arm", - "android.30", - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.31-arm64": [ - "android.31-arm64", - "android.31", - "android.30-arm64", - "android.30", - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.31-x64": [ - "android.31-x64", - "android.31", - "android.30-x64", - "android.30", - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.31-x86": [ - "android.31-x86", - "android.31", - "android.30-x86", - "android.30", - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "android.32": [ - "android.32", - "android.31", - "android.30", - "android.29", - "android.28", - "android.27", - "android.26", - "android.25", - "android.24", - "android.23", - "android.22", - "android.21", - "android", - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "android.32-arm": [ - "android.32-arm", - "android.32", - "android.31-arm", - "android.31", - "android.30-arm", - "android.30", - "android.29-arm", - "android.29", - "android.28-arm", - "android.28", - "android.27-arm", - "android.27", - "android.26-arm", - "android.26", - "android.25-arm", - "android.25", - "android.24-arm", - "android.24", - "android.23-arm", - "android.23", - "android.22-arm", - "android.22", - "android.21-arm", - "android.21", - "android-arm", - "android", - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "android.32-arm64": [ - "android.32-arm64", - "android.32", - "android.31-arm64", - "android.31", - "android.30-arm64", - "android.30", - "android.29-arm64", - "android.29", - "android.28-arm64", - "android.28", - "android.27-arm64", - "android.27", - "android.26-arm64", - "android.26", - "android.25-arm64", - "android.25", - "android.24-arm64", - "android.24", - "android.23-arm64", - "android.23", - "android.22-arm64", - "android.22", - "android.21-arm64", - "android.21", - "android-arm64", - "android", - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "android.32-x64": [ - "android.32-x64", - "android.32", - "android.31-x64", - "android.31", - "android.30-x64", - "android.30", - "android.29-x64", - "android.29", - "android.28-x64", - "android.28", - "android.27-x64", - "android.27", - "android.26-x64", - "android.26", - "android.25-x64", - "android.25", - "android.24-x64", - "android.24", - "android.23-x64", - "android.23", - "android.22-x64", - "android.22", - "android.21-x64", - "android.21", - "android-x64", - "android", - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "android.32-x86": [ - "android.32-x86", - "android.32", - "android.31-x86", - "android.31", - "android.30-x86", - "android.30", - "android.29-x86", - "android.29", - "android.28-x86", - "android.28", - "android.27-x86", - "android.27", - "android.26-x86", - "android.26", - "android.25-x86", - "android.25", - "android.24-x86", - "android.24", - "android.23-x86", - "android.23", - "android.22-x86", - "android.22", - "android.21-x86", - "android.21", - "android-x86", - "android", - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "any": [ - "any", - "base" - ], - "aot": [ - "aot", - "any", - "base" - ], - "arch": [ - "arch", - "linux", - "unix", - "any", - "base" - ], - "arch-x64": [ - "arch-x64", - "arch", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "base": [ - "base" - ], - "browser": [ - "browser", - "any", - "base" - ], - "browser-wasm": [ - "browser-wasm", - "browser", - "any", - "base" - ], - "centos": [ - "centos", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos-arm64": [ - "centos-arm64", - "centos", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "centos-x64": [ - "centos-x64", - "centos", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "centos.7": [ - "centos.7", - "centos", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos.7-x64": [ - "centos.7-x64", - "centos.7", - "centos-x64", - "rhel.7-x64", - "centos", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "centos.8": [ - "centos.8", - "centos", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos.8-arm64": [ - "centos.8-arm64", - "centos.8", - "centos-arm64", - "rhel.8-arm64", - "centos", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "centos.8-x64": [ - "centos.8-x64", - "centos.8", - "centos-x64", - "rhel.8-x64", - "centos", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "centos.9": [ - "centos.9", - "centos", - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "centos.9-arm64": [ - "centos.9-arm64", - "centos.9", - "centos-arm64", - "rhel.9-arm64", - "centos", - "rhel.9", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "centos.9-x64": [ - "centos.9-x64", - "centos.9", - "centos-x64", - "rhel.9-x64", - "centos", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian": [ - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian-arm": [ - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian-arm64": [ - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian-armel": [ - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian-x64": [ - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian-x86": [ - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.10": [ - "debian.10", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.10-arm": [ - "debian.10-arm", - "debian.10", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.10-arm64": [ - "debian.10-arm64", - "debian.10", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.10-armel": [ - "debian.10-armel", - "debian.10", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.10-x64": [ - "debian.10-x64", - "debian.10", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.10-x86": [ - "debian.10-x86", - "debian.10", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.11": [ - "debian.11", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.11-arm": [ - "debian.11-arm", - "debian.11", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.11-arm64": [ - "debian.11-arm64", - "debian.11", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.11-armel": [ - "debian.11-armel", - "debian.11", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.11-x64": [ - "debian.11-x64", - "debian.11", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.11-x86": [ - "debian.11-x86", - "debian.11", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.12": [ - "debian.12", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.12-arm": [ - "debian.12-arm", - "debian.12", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.12-arm64": [ - "debian.12-arm64", - "debian.12", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.12-armel": [ - "debian.12-armel", - "debian.12", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.12-x64": [ - "debian.12-x64", - "debian.12", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.12-x86": [ - "debian.12-x86", - "debian.12", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.8": [ - "debian.8", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.8-arm": [ - "debian.8-arm", - "debian.8", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.8-arm64": [ - "debian.8-arm64", - "debian.8", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.8-armel": [ - "debian.8-armel", - "debian.8", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.8-x64": [ - "debian.8-x64", - "debian.8", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.8-x86": [ - "debian.8-x86", - "debian.8", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "debian.9": [ - "debian.9", - "debian", - "linux", - "unix", - "any", - "base" - ], - "debian.9-arm": [ - "debian.9-arm", - "debian.9", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "debian.9-arm64": [ - "debian.9-arm64", - "debian.9", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "debian.9-armel": [ - "debian.9-armel", - "debian.9", - "debian-armel", - "debian", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "debian.9-x64": [ - "debian.9-x64", - "debian.9", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "debian.9-x86": [ - "debian.9-x86", - "debian.9", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "exherbo": [ - "exherbo", - "linux", - "unix", - "any", - "base" - ], - "exherbo-x64": [ - "exherbo-x64", - "exherbo", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora": [ - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora-arm64": [ - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora-x64": [ - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.23": [ - "fedora.23", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.23-arm64": [ - "fedora.23-arm64", - "fedora.23", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.23-x64": [ - "fedora.23-x64", - "fedora.23", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.24": [ - "fedora.24", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.24-arm64": [ - "fedora.24-arm64", - "fedora.24", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.24-x64": [ - "fedora.24-x64", - "fedora.24", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.25": [ - "fedora.25", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.25-arm64": [ - "fedora.25-arm64", - "fedora.25", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.25-x64": [ - "fedora.25-x64", - "fedora.25", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.26": [ - "fedora.26", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.26-arm64": [ - "fedora.26-arm64", - "fedora.26", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.26-x64": [ - "fedora.26-x64", - "fedora.26", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.27": [ - "fedora.27", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.27-arm64": [ - "fedora.27-arm64", - "fedora.27", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.27-x64": [ - "fedora.27-x64", - "fedora.27", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.28": [ - "fedora.28", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.28-arm64": [ - "fedora.28-arm64", - "fedora.28", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.28-x64": [ - "fedora.28-x64", - "fedora.28", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.29": [ - "fedora.29", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.29-arm64": [ - "fedora.29-arm64", - "fedora.29", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.29-x64": [ - "fedora.29-x64", - "fedora.29", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.30": [ - "fedora.30", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.30-arm64": [ - "fedora.30-arm64", - "fedora.30", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.30-x64": [ - "fedora.30-x64", - "fedora.30", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.31": [ - "fedora.31", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.31-arm64": [ - "fedora.31-arm64", - "fedora.31", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.31-x64": [ - "fedora.31-x64", - "fedora.31", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.32": [ - "fedora.32", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.32-arm64": [ - "fedora.32-arm64", - "fedora.32", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.32-x64": [ - "fedora.32-x64", - "fedora.32", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.33": [ - "fedora.33", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.33-arm64": [ - "fedora.33-arm64", - "fedora.33", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.33-x64": [ - "fedora.33-x64", - "fedora.33", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.34": [ - "fedora.34", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.34-arm64": [ - "fedora.34-arm64", - "fedora.34", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.34-x64": [ - "fedora.34-x64", - "fedora.34", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.35": [ - "fedora.35", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.35-arm64": [ - "fedora.35-arm64", - "fedora.35", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.35-x64": [ - "fedora.35-x64", - "fedora.35", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.36": [ - "fedora.36", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.36-arm64": [ - "fedora.36-arm64", - "fedora.36", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.36-x64": [ - "fedora.36-x64", - "fedora.36", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.37": [ - "fedora.37", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.37-arm64": [ - "fedora.37-arm64", - "fedora.37", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.37-x64": [ - "fedora.37-x64", - "fedora.37", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.38": [ - "fedora.38", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.38-arm64": [ - "fedora.38-arm64", - "fedora.38", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.38-x64": [ - "fedora.38-x64", - "fedora.38", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "fedora.39": [ - "fedora.39", - "fedora", - "linux", - "unix", - "any", - "base" - ], - "fedora.39-arm64": [ - "fedora.39-arm64", - "fedora.39", - "fedora-arm64", - "fedora", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "fedora.39-x64": [ - "fedora.39-x64", - "fedora.39", - "fedora-x64", - "fedora", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "freebsd": [ - "freebsd", - "unix", - "any", - "base" - ], - "freebsd-arm64": [ - "freebsd-arm64", - "freebsd", - "unix-arm64", - "unix", - "any", - "base" - ], - "freebsd-x64": [ - "freebsd-x64", - "freebsd", - "unix-x64", - "unix", - "any", - "base" - ], - "freebsd.12": [ - "freebsd.12", - "freebsd", - "unix", - "any", - "base" - ], - "freebsd.12-arm64": [ - "freebsd.12-arm64", - "freebsd.12", - "freebsd-arm64", - "freebsd", - "unix-arm64", - "unix", - "any", - "base" - ], - "freebsd.12-x64": [ - "freebsd.12-x64", - "freebsd.12", - "freebsd-x64", - "freebsd", - "unix-x64", - "unix", - "any", - "base" - ], - "freebsd.13": [ - "freebsd.13", - "freebsd.12", - "freebsd", - "unix", - "any", - "base" - ], - "freebsd.13-arm64": [ - "freebsd.13-arm64", - "freebsd.13", - "freebsd.12-arm64", - "freebsd.12", - "freebsd-arm64", - "freebsd", - "unix-arm64", - "unix", - "any", - "base" - ], - "freebsd.13-x64": [ - "freebsd.13-x64", - "freebsd.13", - "freebsd.12-x64", - "freebsd.12", - "freebsd-x64", - "freebsd", - "unix-x64", - "unix", - "any", - "base" - ], - "gentoo": [ - "gentoo", - "linux", - "unix", - "any", - "base" - ], - "gentoo-x64": [ - "gentoo-x64", - "gentoo", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "illumos": [ - "illumos", - "unix", - "any", - "base" - ], - "illumos-x64": [ - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "ios": [ - "ios", - "unix", - "any", - "base" - ], - "ios-arm": [ - "ios-arm", - "ios", - "unix-arm", - "unix", - "any", - "base" - ], - "ios-arm64": [ - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios-x64": [ - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios-x86": [ - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "ios.10": [ - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.10-arm": [ - "ios.10-arm", - "ios.10", - "ios-arm", - "ios", - "unix-arm", - "unix", - "any", - "base" - ], - "ios.10-arm64": [ - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.10-x64": [ - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.10-x86": [ - "ios.10-x86", - "ios.10", - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "ios.11": [ - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.11-arm64": [ - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.11-x64": [ - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.12": [ - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.12-arm64": [ - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.12-x64": [ - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.13": [ - "ios.13", - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.13-arm64": [ - "ios.13-arm64", - "ios.13", - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.13-x64": [ - "ios.13-x64", - "ios.13", - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.14": [ - "ios.14", - "ios.13", - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.14-arm64": [ - "ios.14-arm64", - "ios.14", - "ios.13-arm64", - "ios.13", - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.14-x64": [ - "ios.14-x64", - "ios.14", - "ios.13-x64", - "ios.13", - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "ios.15": [ - "ios.15", - "ios.14", - "ios.13", - "ios.12", - "ios.11", - "ios.10", - "ios", - "unix", - "any", - "base" - ], - "ios.15-arm64": [ - "ios.15-arm64", - "ios.15", - "ios.14-arm64", - "ios.14", - "ios.13-arm64", - "ios.13", - "ios.12-arm64", - "ios.12", - "ios.11-arm64", - "ios.11", - "ios.10-arm64", - "ios.10", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "ios.15-x64": [ - "ios.15-x64", - "ios.15", - "ios.14-x64", - "ios.14", - "ios.13-x64", - "ios.13", - "ios.12-x64", - "ios.12", - "ios.11-x64", - "ios.11", - "ios.10-x64", - "ios.10", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator": [ - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator-arm64": [ - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator-x64": [ - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator-x86": [ - "iossimulator-x86", - "iossimulator", - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "iossimulator.10": [ - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.10-arm64": [ - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.10-x64": [ - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.10-x86": [ - "iossimulator.10-x86", - "iossimulator.10", - "iossimulator-x86", - "iossimulator", - "ios-x86", - "ios", - "unix-x86", - "unix", - "any", - "base" - ], - "iossimulator.11": [ - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.11-arm64": [ - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.11-x64": [ - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.12": [ - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.12-arm64": [ - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.12-x64": [ - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.13": [ - "iossimulator.13", - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.13-arm64": [ - "iossimulator.13-arm64", - "iossimulator.13", - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.13-x64": [ - "iossimulator.13-x64", - "iossimulator.13", - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.14": [ - "iossimulator.14", - "iossimulator.13", - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.14-arm64": [ - "iossimulator.14-arm64", - "iossimulator.14", - "iossimulator.13-arm64", - "iossimulator.13", - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.14-x64": [ - "iossimulator.14-x64", - "iossimulator.14", - "iossimulator.13-x64", - "iossimulator.13", - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "iossimulator.15": [ - "iossimulator.15", - "iossimulator.14", - "iossimulator.13", - "iossimulator.12", - "iossimulator.11", - "iossimulator.10", - "iossimulator", - "ios", - "unix", - "any", - "base" - ], - "iossimulator.15-arm64": [ - "iossimulator.15-arm64", - "iossimulator.15", - "iossimulator.14-arm64", - "iossimulator.14", - "iossimulator.13-arm64", - "iossimulator.13", - "iossimulator.12-arm64", - "iossimulator.12", - "iossimulator.11-arm64", - "iossimulator.11", - "iossimulator.10-arm64", - "iossimulator.10", - "iossimulator-arm64", - "iossimulator", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "iossimulator.15-x64": [ - "iossimulator.15-x64", - "iossimulator.15", - "iossimulator.14-x64", - "iossimulator.14", - "iossimulator.13-x64", - "iossimulator.13", - "iossimulator.12-x64", - "iossimulator.12", - "iossimulator.11-x64", - "iossimulator.11", - "iossimulator.10-x64", - "iossimulator.10", - "iossimulator-x64", - "iossimulator", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "linux": [ - "linux", - "unix", - "any", - "base" - ], - "linux-arm": [ - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "linux-arm64": [ - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "linux-armel": [ - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "linux-armv6": [ - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "linux-bionic": [ - "linux-bionic", - "linux", - "unix", - "any", - "base" - ], - "linux-bionic-arm": [ - "linux-bionic-arm", - "linux-bionic", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "linux-bionic-arm64": [ - "linux-bionic-arm64", - "linux-bionic", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "linux-bionic-x64": [ - "linux-bionic-x64", - "linux-bionic", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linux-bionic-x86": [ - "linux-bionic-x86", - "linux-bionic", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "linux-loongarch64": [ - "linux-loongarch64", - "linux", - "unix-loongarch64", - "unix", - "any", - "base" - ], - "linux-mips64": [ - "linux-mips64", - "linux", - "unix-mips64", - "unix", - "any", - "base" - ], - "linux-musl": [ - "linux-musl", - "linux", - "unix", - "any", - "base" - ], - "linux-musl-arm": [ - "linux-musl-arm", - "linux-musl", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "linux-musl-arm64": [ - "linux-musl-arm64", - "linux-musl", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "linux-musl-armel": [ - "linux-musl-armel", - "linux-musl", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "linux-musl-armv6": [ - "linux-musl-armv6", - "linux-musl", - "linux-armv6", - "linux", - "unix-armv6", - "unix", - "any", - "base" - ], - "linux-musl-ppc64le": [ - "linux-musl-ppc64le", - "linux-musl", - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "linux-musl-riscv64": [ - "linux-musl-riscv64", - "linux-musl", - "linux-riscv64", - "linux", - "unix-riscv64", - "unix", - "any", - "base" - ], - "linux-musl-s390x": [ - "linux-musl-s390x", - "linux-musl", - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "linux-musl-x64": [ - "linux-musl-x64", - "linux-musl", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linux-musl-x86": [ - "linux-musl-x86", - "linux-musl", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "linux-ppc64le": [ - "linux-ppc64le", - "linux", - "unix-ppc64le", - "unix", - "any", - "base" - ], - "linux-riscv64": [ - "linux-riscv64", - "linux", - "unix-riscv64", - "unix", - "any", - "base" - ], - "linux-s390x": [ - "linux-s390x", - "linux", - "unix-s390x", - "unix", - "any", - "base" - ], - "linux-x64": [ - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linux-x86": [ - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "linuxmint.17": [ - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17-x64": [ - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.17.1": [ - "linuxmint.17.1", - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17.1-x64": [ - "linuxmint.17.1-x64", - "linuxmint.17.1", - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.17.2": [ - "linuxmint.17.2", - "linuxmint.17.1", - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17.2-x64": [ - "linuxmint.17.2-x64", - "linuxmint.17.2", - "linuxmint.17.1-x64", - "linuxmint.17.1", - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.17.3": [ - "linuxmint.17.3", - "linuxmint.17.2", - "linuxmint.17.1", - "linuxmint.17", - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.17.3-x64": [ - "linuxmint.17.3-x64", - "linuxmint.17.3", - "linuxmint.17.2-x64", - "linuxmint.17.2", - "linuxmint.17.1-x64", - "linuxmint.17.1", - "linuxmint.17-x64", - "linuxmint.17", - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18": [ - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18-x64": [ - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18.1": [ - "linuxmint.18.1", - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18.1-x64": [ - "linuxmint.18.1-x64", - "linuxmint.18.1", - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18.2": [ - "linuxmint.18.2", - "linuxmint.18.1", - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18.2-x64": [ - "linuxmint.18.2-x64", - "linuxmint.18.2", - "linuxmint.18.1-x64", - "linuxmint.18.1", - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.18.3": [ - "linuxmint.18.3", - "linuxmint.18.2", - "linuxmint.18.1", - "linuxmint.18", - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.18.3-x64": [ - "linuxmint.18.3-x64", - "linuxmint.18.3", - "linuxmint.18.2-x64", - "linuxmint.18.2", - "linuxmint.18.1-x64", - "linuxmint.18.1", - "linuxmint.18-x64", - "linuxmint.18", - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.19": [ - "linuxmint.19", - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.19-x64": [ - "linuxmint.19-x64", - "linuxmint.19", - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.19.1": [ - "linuxmint.19.1", - "linuxmint.19", - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.19.1-x64": [ - "linuxmint.19.1-x64", - "linuxmint.19.1", - "linuxmint.19-x64", - "linuxmint.19", - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "linuxmint.19.2": [ - "linuxmint.19.2", - "linuxmint.19.1", - "linuxmint.19", - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "linuxmint.19.2-x64": [ - "linuxmint.19.2-x64", - "linuxmint.19.2", - "linuxmint.19.1-x64", - "linuxmint.19.1", - "linuxmint.19-x64", - "linuxmint.19", - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst": [ - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst-arm64": [ - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst-x64": [ - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst.13": [ - "maccatalyst.13", - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst.13-arm64": [ - "maccatalyst.13-arm64", - "maccatalyst.13", - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst.13-x64": [ - "maccatalyst.13-x64", - "maccatalyst.13", - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst.14": [ - "maccatalyst.14", - "maccatalyst.13", - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst.14-arm64": [ - "maccatalyst.14-arm64", - "maccatalyst.14", - "maccatalyst.13-arm64", - "maccatalyst.13", - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst.14-x64": [ - "maccatalyst.14-x64", - "maccatalyst.14", - "maccatalyst.13-x64", - "maccatalyst.13", - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "maccatalyst.15": [ - "maccatalyst.15", - "maccatalyst.14", - "maccatalyst.13", - "maccatalyst", - "ios", - "unix", - "any", - "base" - ], - "maccatalyst.15-arm64": [ - "maccatalyst.15-arm64", - "maccatalyst.15", - "maccatalyst.14-arm64", - "maccatalyst.14", - "maccatalyst.13-arm64", - "maccatalyst.13", - "maccatalyst-arm64", - "maccatalyst", - "ios-arm64", - "ios", - "unix-arm64", - "unix", - "any", - "base" - ], - "maccatalyst.15-x64": [ - "maccatalyst.15-x64", - "maccatalyst.15", - "maccatalyst.14-x64", - "maccatalyst.14", - "maccatalyst.13-x64", - "maccatalyst.13", - "maccatalyst-x64", - "maccatalyst", - "ios-x64", - "ios", - "unix-x64", - "unix", - "any", - "base" - ], - "manjaro": [ - "manjaro", - "arch", - "linux", - "unix", - "any", - "base" - ], - "manjaro-x64": [ - "manjaro-x64", - "manjaro", - "arch-x64", - "arch", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "miraclelinux": [ - "miraclelinux", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "miraclelinux-x64": [ - "miraclelinux-x64", - "miraclelinux", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "miraclelinux.8": [ - "miraclelinux.8", - "miraclelinux", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "miraclelinux.8-x64": [ - "miraclelinux.8-x64", - "miraclelinux.8", - "miraclelinux-x64", - "rhel.8-x64", - "miraclelinux", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "miraclelinux.9": [ - "miraclelinux.9", - "miraclelinux", - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "miraclelinux.9-x64": [ - "miraclelinux.9-x64", - "miraclelinux.9", - "miraclelinux-x64", - "rhel.9-x64", - "miraclelinux", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol": [ - "ol", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol-x64": [ - "ol-x64", - "ol", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7": [ - "ol.7", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7-x64": [ - "ol.7-x64", - "ol.7", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.0": [ - "ol.7.0", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.0-x64": [ - "ol.7.0-x64", - "ol.7.0", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.1": [ - "ol.7.1", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.1-x64": [ - "ol.7.1-x64", - "ol.7.1", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.2": [ - "ol.7.2", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.2-x64": [ - "ol.7.2-x64", - "ol.7.2", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.3": [ - "ol.7.3", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.3-x64": [ - "ol.7.3-x64", - "ol.7.3", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.4": [ - "ol.7.4", - "ol.7.3", - "rhel.7.4", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.4-x64": [ - "ol.7.4-x64", - "ol.7.4", - "ol.7.3-x64", - "rhel.7.4-x64", - "ol.7.3", - "rhel.7.4", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.5": [ - "ol.7.5", - "ol.7.4", - "rhel.7.5", - "ol.7.3", - "rhel.7.4", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.5-x64": [ - "ol.7.5-x64", - "ol.7.5", - "ol.7.4-x64", - "rhel.7.5-x64", - "ol.7.4", - "rhel.7.5", - "ol.7.3-x64", - "rhel.7.4-x64", - "ol.7.3", - "rhel.7.4", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.7.6": [ - "ol.7.6", - "ol.7.5", - "rhel.7.6", - "ol.7.4", - "rhel.7.5", - "ol.7.3", - "rhel.7.4", - "ol.7.2", - "rhel.7.3", - "ol.7.1", - "rhel.7.2", - "ol.7.0", - "rhel.7.1", - "ol.7", - "rhel.7.0", - "ol", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.7.6-x64": [ - "ol.7.6-x64", - "ol.7.6", - "ol.7.5-x64", - "rhel.7.6-x64", - "ol.7.5", - "rhel.7.6", - "ol.7.4-x64", - "rhel.7.5-x64", - "ol.7.4", - "rhel.7.5", - "ol.7.3-x64", - "rhel.7.4-x64", - "ol.7.3", - "rhel.7.4", - "ol.7.2-x64", - "rhel.7.3-x64", - "ol.7.2", - "rhel.7.3", - "ol.7.1-x64", - "rhel.7.2-x64", - "ol.7.1", - "rhel.7.2", - "ol.7.0-x64", - "rhel.7.1-x64", - "ol.7.0", - "rhel.7.1", - "ol.7-x64", - "rhel.7.0-x64", - "ol.7", - "rhel.7.0", - "ol-x64", - "rhel.7-x64", - "ol", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.8": [ - "ol.8", - "ol", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.8-x64": [ - "ol.8-x64", - "ol.8", - "ol-x64", - "rhel.8-x64", - "ol", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ol.8.0": [ - "ol.8.0", - "ol.8", - "rhel.8.0", - "ol", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "ol.8.0-x64": [ - "ol.8.0-x64", - "ol.8.0", - "ol.8-x64", - "rhel.8.0-x64", - "ol.8", - "rhel.8.0", - "ol-x64", - "rhel.8-x64", - "ol", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "omnios": [ - "omnios", - "illumos", - "unix", - "any", - "base" - ], - "omnios-x64": [ - "omnios-x64", - "omnios", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "omnios.15": [ - "omnios.15", - "omnios", - "illumos", - "unix", - "any", - "base" - ], - "omnios.15-x64": [ - "omnios.15-x64", - "omnios.15", - "omnios-x64", - "omnios", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "openindiana": [ - "openindiana", - "illumos", - "unix", - "any", - "base" - ], - "openindiana-x64": [ - "openindiana-x64", - "openindiana", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse": [ - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse-x64": [ - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.13.2": [ - "opensuse.13.2", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.13.2-x64": [ - "opensuse.13.2-x64", - "opensuse.13.2", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.15.0": [ - "opensuse.15.0", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.15.0-x64": [ - "opensuse.15.0-x64", - "opensuse.15.0", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.15.1": [ - "opensuse.15.1", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.15.1-x64": [ - "opensuse.15.1-x64", - "opensuse.15.1", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.42.1": [ - "opensuse.42.1", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.42.1-x64": [ - "opensuse.42.1-x64", - "opensuse.42.1", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.42.2": [ - "opensuse.42.2", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.42.2-x64": [ - "opensuse.42.2-x64", - "opensuse.42.2", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "opensuse.42.3": [ - "opensuse.42.3", - "opensuse", - "linux", - "unix", - "any", - "base" - ], - "opensuse.42.3-x64": [ - "opensuse.42.3-x64", - "opensuse.42.3", - "opensuse-x64", - "opensuse", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "osx": [ - "osx", - "unix", - "any", - "base" - ], - "osx-arm64": [ - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx-x64": [ - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.10": [ - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.10-arm64": [ - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.10-x64": [ - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.11": [ - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.11-arm64": [ - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.11-x64": [ - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.12": [ - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.12-arm64": [ - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.12-x64": [ - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.13": [ - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.13-arm64": [ - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.13-x64": [ - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.14": [ - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.14-arm64": [ - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.14-x64": [ - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.15": [ - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.15-arm64": [ - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.15-x64": [ - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.10.16": [ - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.10.16-arm64": [ - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.10.16-x64": [ - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.11.0": [ - "osx.11.0", - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.11.0-arm64": [ - "osx.11.0-arm64", - "osx.11.0", - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.11.0-x64": [ - "osx.11.0-x64", - "osx.11.0", - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.12": [ - "osx.12", - "osx.11.0", - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.12-arm64": [ - "osx.12-arm64", - "osx.12", - "osx.11.0-arm64", - "osx.11.0", - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.12-x64": [ - "osx.12-x64", - "osx.12", - "osx.11.0-x64", - "osx.11.0", - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "osx.13": [ - "osx.13", - "osx.12", - "osx.11.0", - "osx.10.16", - "osx.10.15", - "osx.10.14", - "osx.10.13", - "osx.10.12", - "osx.10.11", - "osx.10.10", - "osx", - "unix", - "any", - "base" - ], - "osx.13-arm64": [ - "osx.13-arm64", - "osx.13", - "osx.12-arm64", - "osx.12", - "osx.11.0-arm64", - "osx.11.0", - "osx.10.16-arm64", - "osx.10.16", - "osx.10.15-arm64", - "osx.10.15", - "osx.10.14-arm64", - "osx.10.14", - "osx.10.13-arm64", - "osx.10.13", - "osx.10.12-arm64", - "osx.10.12", - "osx.10.11-arm64", - "osx.10.11", - "osx.10.10-arm64", - "osx.10.10", - "osx-arm64", - "osx", - "unix-arm64", - "unix", - "any", - "base" - ], - "osx.13-x64": [ - "osx.13-x64", - "osx.13", - "osx.12-x64", - "osx.12", - "osx.11.0-x64", - "osx.11.0", - "osx.10.16-x64", - "osx.10.16", - "osx.10.15-x64", - "osx.10.15", - "osx.10.14-x64", - "osx.10.14", - "osx.10.13-x64", - "osx.10.13", - "osx.10.12-x64", - "osx.10.12", - "osx.10.11-x64", - "osx.10.11", - "osx.10.10-x64", - "osx.10.10", - "osx-x64", - "osx", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel": [ - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel-arm64": [ - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel-x64": [ - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.6": [ - "rhel.6", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.6-x64": [ - "rhel.6-x64", - "rhel.6", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7": [ - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7-x64": [ - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.0": [ - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.0-x64": [ - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.1": [ - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.1-x64": [ - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.2": [ - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.2-x64": [ - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.3": [ - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.3-x64": [ - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.4": [ - "rhel.7.4", - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.4-x64": [ - "rhel.7.4-x64", - "rhel.7.4", - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.5": [ - "rhel.7.5", - "rhel.7.4", - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.5-x64": [ - "rhel.7.5-x64", - "rhel.7.5", - "rhel.7.4-x64", - "rhel.7.4", - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.7.6": [ - "rhel.7.6", - "rhel.7.5", - "rhel.7.4", - "rhel.7.3", - "rhel.7.2", - "rhel.7.1", - "rhel.7.0", - "rhel.7", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.7.6-x64": [ - "rhel.7.6-x64", - "rhel.7.6", - "rhel.7.5-x64", - "rhel.7.5", - "rhel.7.4-x64", - "rhel.7.4", - "rhel.7.3-x64", - "rhel.7.3", - "rhel.7.2-x64", - "rhel.7.2", - "rhel.7.1-x64", - "rhel.7.1", - "rhel.7.0-x64", - "rhel.7.0", - "rhel.7-x64", - "rhel.7", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.8": [ - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.8-arm64": [ - "rhel.8-arm64", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.8-x64": [ - "rhel.8-x64", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.8.0": [ - "rhel.8.0", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.8.0-arm64": [ - "rhel.8.0-arm64", - "rhel.8.0", - "rhel.8-arm64", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.8.0-x64": [ - "rhel.8.0-x64", - "rhel.8.0", - "rhel.8-x64", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.8.1": [ - "rhel.8.1", - "rhel.8.0", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.8.1-arm64": [ - "rhel.8.1-arm64", - "rhel.8.1", - "rhel.8.0-arm64", - "rhel.8.0", - "rhel.8-arm64", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.8.1-x64": [ - "rhel.8.1-x64", - "rhel.8.1", - "rhel.8.0-x64", - "rhel.8.0", - "rhel.8-x64", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rhel.9": [ - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rhel.9-arm64": [ - "rhel.9-arm64", - "rhel.9", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rhel.9-x64": [ - "rhel.9-x64", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rocky": [ - "rocky", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rocky-arm64": [ - "rocky-arm64", - "rocky", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rocky-x64": [ - "rocky-x64", - "rocky", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rocky.8": [ - "rocky.8", - "rocky", - "rhel.8", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rocky.8-arm64": [ - "rocky.8-arm64", - "rocky.8", - "rocky-arm64", - "rhel.8-arm64", - "rocky", - "rhel.8", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rocky.8-x64": [ - "rocky.8-x64", - "rocky.8", - "rocky-x64", - "rhel.8-x64", - "rocky", - "rhel.8", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "rocky.9": [ - "rocky.9", - "rocky", - "rhel.9", - "rhel", - "linux", - "unix", - "any", - "base" - ], - "rocky.9-arm64": [ - "rocky.9-arm64", - "rocky.9", - "rocky-arm64", - "rhel.9-arm64", - "rocky", - "rhel.9", - "rhel-arm64", - "rhel", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "rocky.9-x64": [ - "rocky.9-x64", - "rocky.9", - "rocky-x64", - "rhel.9-x64", - "rocky", - "rhel.9", - "rhel-x64", - "rhel", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles": [ - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles-x64": [ - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12": [ - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12-x64": [ - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.1": [ - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.1-x64": [ - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.2": [ - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.2-x64": [ - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.3": [ - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.3-x64": [ - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.12.4": [ - "sles.12.4", - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.12.4-x64": [ - "sles.12.4-x64", - "sles.12.4", - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.15": [ - "sles.15", - "sles.12.4", - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.15-x64": [ - "sles.15-x64", - "sles.15", - "sles.12.4-x64", - "sles.12.4", - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "sles.15.1": [ - "sles.15.1", - "sles.15", - "sles.12.4", - "sles.12.3", - "sles.12.2", - "sles.12.1", - "sles.12", - "sles", - "linux", - "unix", - "any", - "base" - ], - "sles.15.1-x64": [ - "sles.15.1-x64", - "sles.15.1", - "sles.15-x64", - "sles.15", - "sles.12.4-x64", - "sles.12.4", - "sles.12.3-x64", - "sles.12.3", - "sles.12.2-x64", - "sles.12.2", - "sles.12.1-x64", - "sles.12.1", - "sles.12-x64", - "sles.12", - "sles-x64", - "sles", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "smartos": [ - "smartos", - "illumos", - "unix", - "any", - "base" - ], - "smartos-x64": [ - "smartos-x64", - "smartos", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "smartos.2020": [ - "smartos.2020", - "smartos", - "illumos", - "unix", - "any", - "base" - ], - "smartos.2020-x64": [ - "smartos.2020-x64", - "smartos.2020", - "smartos-x64", - "smartos", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "smartos.2021": [ - "smartos.2021", - "smartos.2020", - "smartos", - "illumos", - "unix", - "any", - "base" - ], - "smartos.2021-x64": [ - "smartos.2021-x64", - "smartos.2021", - "smartos.2020-x64", - "smartos.2020", - "smartos-x64", - "smartos", - "illumos-x64", - "illumos", - "unix-x64", - "unix", - "any", - "base" - ], - "solaris": [ - "solaris", - "unix", - "any", - "base" - ], - "solaris-x64": [ - "solaris-x64", - "solaris", - "unix-x64", - "unix", - "any", - "base" - ], - "solaris.11": [ - "solaris.11", - "solaris", - "unix", - "any", - "base" - ], - "solaris.11-x64": [ - "solaris.11-x64", - "solaris.11", - "solaris-x64", - "solaris", - "unix-x64", - "unix", - "any", - "base" - ], - "tizen": [ - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen-arm64": [ - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen-armel": [ - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen-x86": [ - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.4.0.0": [ - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.4.0.0-arm64": [ - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.4.0.0-armel": [ - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.4.0.0-x86": [ - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.5.0.0": [ - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.5.0.0-arm64": [ - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.5.0.0-armel": [ - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.5.0.0-x86": [ - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.5.5.0": [ - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.5.5.0-arm64": [ - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.5.5.0-armel": [ - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.5.5.0-x86": [ - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.6.0.0": [ - "tizen.6.0.0", - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.6.0.0-arm64": [ - "tizen.6.0.0-arm64", - "tizen.6.0.0", - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.6.0.0-armel": [ - "tizen.6.0.0-armel", - "tizen.6.0.0", - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.6.0.0-x86": [ - "tizen.6.0.0-x86", - "tizen.6.0.0", - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.6.5.0": [ - "tizen.6.5.0", - "tizen.6.0.0", - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.6.5.0-arm64": [ - "tizen.6.5.0-arm64", - "tizen.6.5.0", - "tizen.6.0.0-arm64", - "tizen.6.0.0", - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.6.5.0-armel": [ - "tizen.6.5.0-armel", - "tizen.6.5.0", - "tizen.6.0.0-armel", - "tizen.6.0.0", - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.6.5.0-x86": [ - "tizen.6.5.0-x86", - "tizen.6.5.0", - "tizen.6.0.0-x86", - "tizen.6.0.0", - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tizen.7.0.0": [ - "tizen.7.0.0", - "tizen.6.5.0", - "tizen.6.0.0", - "tizen.5.5.0", - "tizen.5.0.0", - "tizen.4.0.0", - "tizen", - "linux", - "unix", - "any", - "base" - ], - "tizen.7.0.0-arm64": [ - "tizen.7.0.0-arm64", - "tizen.7.0.0", - "tizen.6.5.0-arm64", - "tizen.6.5.0", - "tizen.6.0.0-arm64", - "tizen.6.0.0", - "tizen.5.5.0-arm64", - "tizen.5.5.0", - "tizen.5.0.0-arm64", - "tizen.5.0.0", - "tizen.4.0.0-arm64", - "tizen.4.0.0", - "tizen-arm64", - "tizen", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "tizen.7.0.0-armel": [ - "tizen.7.0.0-armel", - "tizen.7.0.0", - "tizen.6.5.0-armel", - "tizen.6.5.0", - "tizen.6.0.0-armel", - "tizen.6.0.0", - "tizen.5.5.0-armel", - "tizen.5.5.0", - "tizen.5.0.0-armel", - "tizen.5.0.0", - "tizen.4.0.0-armel", - "tizen.4.0.0", - "tizen-armel", - "tizen", - "linux-armel", - "linux", - "unix-armel", - "unix", - "any", - "base" - ], - "tizen.7.0.0-x86": [ - "tizen.7.0.0-x86", - "tizen.7.0.0", - "tizen.6.5.0-x86", - "tizen.6.5.0", - "tizen.6.0.0-x86", - "tizen.6.0.0", - "tizen.5.5.0-x86", - "tizen.5.5.0", - "tizen.5.0.0-x86", - "tizen.5.0.0", - "tizen.4.0.0-x86", - "tizen.4.0.0", - "tizen-x86", - "tizen", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "tvos": [ - "tvos", - "unix", - "any", - "base" - ], - "tvos-arm64": [ - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos-x64": [ - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.10": [ - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.10-arm64": [ - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.10-x64": [ - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.11": [ - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.11-arm64": [ - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.11-x64": [ - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.12": [ - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.12-arm64": [ - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.12-x64": [ - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.13": [ - "tvos.13", - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.13-arm64": [ - "tvos.13-arm64", - "tvos.13", - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.13-x64": [ - "tvos.13-x64", - "tvos.13", - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.14": [ - "tvos.14", - "tvos.13", - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.14-arm64": [ - "tvos.14-arm64", - "tvos.14", - "tvos.13-arm64", - "tvos.13", - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.14-x64": [ - "tvos.14-x64", - "tvos.14", - "tvos.13-x64", - "tvos.13", - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvos.15": [ - "tvos.15", - "tvos.14", - "tvos.13", - "tvos.12", - "tvos.11", - "tvos.10", - "tvos", - "unix", - "any", - "base" - ], - "tvos.15-arm64": [ - "tvos.15-arm64", - "tvos.15", - "tvos.14-arm64", - "tvos.14", - "tvos.13-arm64", - "tvos.13", - "tvos.12-arm64", - "tvos.12", - "tvos.11-arm64", - "tvos.11", - "tvos.10-arm64", - "tvos.10", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvos.15-x64": [ - "tvos.15-x64", - "tvos.15", - "tvos.14-x64", - "tvos.14", - "tvos.13-x64", - "tvos.13", - "tvos.12-x64", - "tvos.12", - "tvos.11-x64", - "tvos.11", - "tvos.10-x64", - "tvos.10", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator": [ - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator-arm64": [ - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator-x64": [ - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.10": [ - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.10-arm64": [ - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.10-x64": [ - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.11": [ - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.11-arm64": [ - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.11-x64": [ - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.12": [ - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.12-arm64": [ - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.12-x64": [ - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.13": [ - "tvossimulator.13", - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.13-arm64": [ - "tvossimulator.13-arm64", - "tvossimulator.13", - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.13-x64": [ - "tvossimulator.13-x64", - "tvossimulator.13", - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.14": [ - "tvossimulator.14", - "tvossimulator.13", - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.14-arm64": [ - "tvossimulator.14-arm64", - "tvossimulator.14", - "tvossimulator.13-arm64", - "tvossimulator.13", - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.14-x64": [ - "tvossimulator.14-x64", - "tvossimulator.14", - "tvossimulator.13-x64", - "tvossimulator.13", - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "tvossimulator.15": [ - "tvossimulator.15", - "tvossimulator.14", - "tvossimulator.13", - "tvossimulator.12", - "tvossimulator.11", - "tvossimulator.10", - "tvossimulator", - "tvos", - "unix", - "any", - "base" - ], - "tvossimulator.15-arm64": [ - "tvossimulator.15-arm64", - "tvossimulator.15", - "tvossimulator.14-arm64", - "tvossimulator.14", - "tvossimulator.13-arm64", - "tvossimulator.13", - "tvossimulator.12-arm64", - "tvossimulator.12", - "tvossimulator.11-arm64", - "tvossimulator.11", - "tvossimulator.10-arm64", - "tvossimulator.10", - "tvossimulator-arm64", - "tvossimulator", - "tvos-arm64", - "tvos", - "unix-arm64", - "unix", - "any", - "base" - ], - "tvossimulator.15-x64": [ - "tvossimulator.15-x64", - "tvossimulator.15", - "tvossimulator.14-x64", - "tvossimulator.14", - "tvossimulator.13-x64", - "tvossimulator.13", - "tvossimulator.12-x64", - "tvossimulator.12", - "tvossimulator.11-x64", - "tvossimulator.11", - "tvossimulator.10-x64", - "tvossimulator.10", - "tvossimulator-x64", - "tvossimulator", - "tvos-x64", - "tvos", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu": [ - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu-arm": [ - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu-arm64": [ - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu-x64": [ - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu-x86": [ - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.14.04": [ - "ubuntu.14.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.14.04-arm": [ - "ubuntu.14.04-arm", - "ubuntu.14.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.14.04-x64": [ - "ubuntu.14.04-x64", - "ubuntu.14.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.14.04-x86": [ - "ubuntu.14.04-x86", - "ubuntu.14.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.14.10": [ - "ubuntu.14.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.14.10-arm": [ - "ubuntu.14.10-arm", - "ubuntu.14.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.14.10-x64": [ - "ubuntu.14.10-x64", - "ubuntu.14.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.14.10-x86": [ - "ubuntu.14.10-x86", - "ubuntu.14.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.15.04": [ - "ubuntu.15.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.15.04-arm": [ - "ubuntu.15.04-arm", - "ubuntu.15.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.15.04-x64": [ - "ubuntu.15.04-x64", - "ubuntu.15.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.15.04-x86": [ - "ubuntu.15.04-x86", - "ubuntu.15.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.15.10": [ - "ubuntu.15.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.15.10-arm": [ - "ubuntu.15.10-arm", - "ubuntu.15.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.15.10-x64": [ - "ubuntu.15.10-x64", - "ubuntu.15.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.15.10-x86": [ - "ubuntu.15.10-x86", - "ubuntu.15.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.16.04": [ - "ubuntu.16.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.16.04-arm": [ - "ubuntu.16.04-arm", - "ubuntu.16.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.16.04-arm64": [ - "ubuntu.16.04-arm64", - "ubuntu.16.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.16.04-x64": [ - "ubuntu.16.04-x64", - "ubuntu.16.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.16.04-x86": [ - "ubuntu.16.04-x86", - "ubuntu.16.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.16.10": [ - "ubuntu.16.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.16.10-arm": [ - "ubuntu.16.10-arm", - "ubuntu.16.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.16.10-arm64": [ - "ubuntu.16.10-arm64", - "ubuntu.16.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.16.10-x64": [ - "ubuntu.16.10-x64", - "ubuntu.16.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.16.10-x86": [ - "ubuntu.16.10-x86", - "ubuntu.16.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.17.04": [ - "ubuntu.17.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.17.04-arm": [ - "ubuntu.17.04-arm", - "ubuntu.17.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.17.04-arm64": [ - "ubuntu.17.04-arm64", - "ubuntu.17.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.17.04-x64": [ - "ubuntu.17.04-x64", - "ubuntu.17.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.17.04-x86": [ - "ubuntu.17.04-x86", - "ubuntu.17.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.17.10": [ - "ubuntu.17.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.17.10-arm": [ - "ubuntu.17.10-arm", - "ubuntu.17.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.17.10-arm64": [ - "ubuntu.17.10-arm64", - "ubuntu.17.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.17.10-x64": [ - "ubuntu.17.10-x64", - "ubuntu.17.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.17.10-x86": [ - "ubuntu.17.10-x86", - "ubuntu.17.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.18.04": [ - "ubuntu.18.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.18.04-arm": [ - "ubuntu.18.04-arm", - "ubuntu.18.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.18.04-arm64": [ - "ubuntu.18.04-arm64", - "ubuntu.18.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.18.04-x64": [ - "ubuntu.18.04-x64", - "ubuntu.18.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.18.04-x86": [ - "ubuntu.18.04-x86", - "ubuntu.18.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.18.10": [ - "ubuntu.18.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.18.10-arm": [ - "ubuntu.18.10-arm", - "ubuntu.18.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.18.10-arm64": [ - "ubuntu.18.10-arm64", - "ubuntu.18.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.18.10-x64": [ - "ubuntu.18.10-x64", - "ubuntu.18.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.18.10-x86": [ - "ubuntu.18.10-x86", - "ubuntu.18.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.19.04": [ - "ubuntu.19.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.19.04-arm": [ - "ubuntu.19.04-arm", - "ubuntu.19.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.19.04-arm64": [ - "ubuntu.19.04-arm64", - "ubuntu.19.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.19.04-x64": [ - "ubuntu.19.04-x64", - "ubuntu.19.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.19.04-x86": [ - "ubuntu.19.04-x86", - "ubuntu.19.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.19.10": [ - "ubuntu.19.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.19.10-arm": [ - "ubuntu.19.10-arm", - "ubuntu.19.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.19.10-arm64": [ - "ubuntu.19.10-arm64", - "ubuntu.19.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.19.10-x64": [ - "ubuntu.19.10-x64", - "ubuntu.19.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.19.10-x86": [ - "ubuntu.19.10-x86", - "ubuntu.19.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.20.04": [ - "ubuntu.20.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.20.04-arm": [ - "ubuntu.20.04-arm", - "ubuntu.20.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.20.04-arm64": [ - "ubuntu.20.04-arm64", - "ubuntu.20.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.20.04-x64": [ - "ubuntu.20.04-x64", - "ubuntu.20.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.20.04-x86": [ - "ubuntu.20.04-x86", - "ubuntu.20.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.20.10": [ - "ubuntu.20.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.20.10-arm": [ - "ubuntu.20.10-arm", - "ubuntu.20.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.20.10-arm64": [ - "ubuntu.20.10-arm64", - "ubuntu.20.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.20.10-x64": [ - "ubuntu.20.10-x64", - "ubuntu.20.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.20.10-x86": [ - "ubuntu.20.10-x86", - "ubuntu.20.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.21.04": [ - "ubuntu.21.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.21.04-arm": [ - "ubuntu.21.04-arm", - "ubuntu.21.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.21.04-arm64": [ - "ubuntu.21.04-arm64", - "ubuntu.21.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.21.04-x64": [ - "ubuntu.21.04-x64", - "ubuntu.21.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.21.04-x86": [ - "ubuntu.21.04-x86", - "ubuntu.21.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.21.10": [ - "ubuntu.21.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.21.10-arm": [ - "ubuntu.21.10-arm", - "ubuntu.21.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.21.10-arm64": [ - "ubuntu.21.10-arm64", - "ubuntu.21.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.21.10-x64": [ - "ubuntu.21.10-x64", - "ubuntu.21.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.21.10-x86": [ - "ubuntu.21.10-x86", - "ubuntu.21.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.22.04": [ - "ubuntu.22.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.22.04-arm": [ - "ubuntu.22.04-arm", - "ubuntu.22.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.22.04-arm64": [ - "ubuntu.22.04-arm64", - "ubuntu.22.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.22.04-x64": [ - "ubuntu.22.04-x64", - "ubuntu.22.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.22.04-x86": [ - "ubuntu.22.04-x86", - "ubuntu.22.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.22.10": [ - "ubuntu.22.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.22.10-arm": [ - "ubuntu.22.10-arm", - "ubuntu.22.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.22.10-arm64": [ - "ubuntu.22.10-arm64", - "ubuntu.22.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.22.10-x64": [ - "ubuntu.22.10-x64", - "ubuntu.22.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.22.10-x86": [ - "ubuntu.22.10-x86", - "ubuntu.22.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.23.04": [ - "ubuntu.23.04", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.23.04-arm": [ - "ubuntu.23.04-arm", - "ubuntu.23.04", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.23.04-arm64": [ - "ubuntu.23.04-arm64", - "ubuntu.23.04", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.23.04-x64": [ - "ubuntu.23.04-x64", - "ubuntu.23.04", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.23.04-x86": [ - "ubuntu.23.04-x86", - "ubuntu.23.04", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "ubuntu.23.10": [ - "ubuntu.23.10", - "ubuntu", - "debian", - "linux", - "unix", - "any", - "base" - ], - "ubuntu.23.10-arm": [ - "ubuntu.23.10-arm", - "ubuntu.23.10", - "ubuntu-arm", - "ubuntu", - "debian-arm", - "debian", - "linux-arm", - "linux", - "unix-arm", - "unix", - "any", - "base" - ], - "ubuntu.23.10-arm64": [ - "ubuntu.23.10-arm64", - "ubuntu.23.10", - "ubuntu-arm64", - "ubuntu", - "debian-arm64", - "debian", - "linux-arm64", - "linux", - "unix-arm64", - "unix", - "any", - "base" - ], - "ubuntu.23.10-x64": [ - "ubuntu.23.10-x64", - "ubuntu.23.10", - "ubuntu-x64", - "ubuntu", - "debian-x64", - "debian", - "linux-x64", - "linux", - "unix-x64", - "unix", - "any", - "base" - ], - "ubuntu.23.10-x86": [ - "ubuntu.23.10-x86", - "ubuntu.23.10", - "ubuntu-x86", - "ubuntu", - "debian-x86", - "debian", - "linux-x86", - "linux", - "unix-x86", - "unix", - "any", - "base" - ], - "unix": [ - "unix", - "any", - "base" - ], - "unix-arm": [ - "unix-arm", - "unix", - "any", - "base" - ], - "unix-arm64": [ - "unix-arm64", - "unix", - "any", - "base" - ], - "unix-armel": [ - "unix-armel", - "unix", - "any", - "base" - ], - "unix-armv6": [ - "unix-armv6", - "unix", - "any", - "base" - ], - "unix-loongarch64": [ - "unix-loongarch64", - "unix", - "any", - "base" - ], - "unix-mips64": [ - "unix-mips64", - "unix", - "any", - "base" - ], - "unix-ppc64le": [ - "unix-ppc64le", - "unix", - "any", - "base" - ], - "unix-riscv64": [ - "unix-riscv64", - "unix", - "any", - "base" - ], - "unix-s390x": [ - "unix-s390x", - "unix", - "any", - "base" - ], - "unix-x64": [ - "unix-x64", - "unix", - "any", - "base" - ], - "unix-x86": [ - "unix-x86", - "unix", - "any", - "base" - ], - "wasi": [ - "wasi", - "any", - "base" - ], - "wasi-wasm": [ - "wasi-wasm", - "wasi", - "any", - "base" - ], - "win": [ - "win", - "any", - "base" - ], - "win-aot": [ - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win-arm": [ - "win-arm", - "win", - "any", - "base" - ], - "win-arm-aot": [ - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win-arm64": [ - "win-arm64", - "win", - "any", - "base" - ], - "win-arm64-aot": [ - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win-x64": [ - "win-x64", - "win", - "any", - "base" - ], - "win-x64-aot": [ - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win-x86": [ - "win-x86", - "win", - "any", - "base" - ], - "win-x86-aot": [ - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win10": [ - "win10", - "win81", - "win8", - "win7", - "win", - "any", - "base" - ], - "win10-aot": [ - "win10-aot", - "win10", - "win81-aot", - "win81", - "win8-aot", - "win8", - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win10-arm": [ - "win10-arm", - "win10", - "win81-arm", - "win81", - "win8-arm", - "win8", - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win10-arm-aot": [ - "win10-arm-aot", - "win10-aot", - "win10-arm", - "win10", - "win81-arm-aot", - "win81-aot", - "win81-arm", - "win81", - "win8-arm-aot", - "win8-aot", - "win8-arm", - "win8", - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win10-arm64": [ - "win10-arm64", - "win10", - "win81-arm64", - "win81", - "win8-arm64", - "win8", - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win10-arm64-aot": [ - "win10-arm64-aot", - "win10-aot", - "win10-arm64", - "win10", - "win81-arm64-aot", - "win81-aot", - "win81-arm64", - "win81", - "win8-arm64-aot", - "win8-aot", - "win8-arm64", - "win8", - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win10-x64": [ - "win10-x64", - "win10", - "win81-x64", - "win81", - "win8-x64", - "win8", - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win10-x64-aot": [ - "win10-x64-aot", - "win10-aot", - "win10-x64", - "win10", - "win81-x64-aot", - "win81-aot", - "win81-x64", - "win81", - "win8-x64-aot", - "win8-aot", - "win8-x64", - "win8", - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win10-x86": [ - "win10-x86", - "win10", - "win81-x86", - "win81", - "win8-x86", - "win8", - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win10-x86-aot": [ - "win10-x86-aot", - "win10-aot", - "win10-x86", - "win10", - "win81-x86-aot", - "win81-aot", - "win81-x86", - "win81", - "win8-x86-aot", - "win8-aot", - "win8-x86", - "win8", - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win7": [ - "win7", - "win", - "any", - "base" - ], - "win7-aot": [ - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win7-arm": [ - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win7-arm-aot": [ - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win7-arm64": [ - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win7-arm64-aot": [ - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win7-x64": [ - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win7-x64-aot": [ - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win7-x86": [ - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win7-x86-aot": [ - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win8": [ - "win8", - "win7", - "win", - "any", - "base" - ], - "win8-aot": [ - "win8-aot", - "win8", - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win8-arm": [ - "win8-arm", - "win8", - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win8-arm-aot": [ - "win8-arm-aot", - "win8-aot", - "win8-arm", - "win8", - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win8-arm64": [ - "win8-arm64", - "win8", - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win8-arm64-aot": [ - "win8-arm64-aot", - "win8-aot", - "win8-arm64", - "win8", - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win8-x64": [ - "win8-x64", - "win8", - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win8-x64-aot": [ - "win8-x64-aot", - "win8-aot", - "win8-x64", - "win8", - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win8-x86": [ - "win8-x86", - "win8", - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win8-x86-aot": [ - "win8-x86-aot", - "win8-aot", - "win8-x86", - "win8", - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ], - "win81": [ - "win81", - "win8", - "win7", - "win", - "any", - "base" - ], - "win81-aot": [ - "win81-aot", - "win81", - "win8-aot", - "win8", - "win7-aot", - "win7", - "win-aot", - "win", - "aot", - "any", - "base" - ], - "win81-arm": [ - "win81-arm", - "win81", - "win8-arm", - "win8", - "win7-arm", - "win7", - "win-arm", - "win", - "any", - "base" - ], - "win81-arm-aot": [ - "win81-arm-aot", - "win81-aot", - "win81-arm", - "win81", - "win8-arm-aot", - "win8-aot", - "win8-arm", - "win8", - "win7-arm-aot", - "win7-aot", - "win7-arm", - "win7", - "win-arm-aot", - "win-aot", - "win-arm", - "win", - "aot", - "any", - "base" - ], - "win81-arm64": [ - "win81-arm64", - "win81", - "win8-arm64", - "win8", - "win7-arm64", - "win7", - "win-arm64", - "win", - "any", - "base" - ], - "win81-arm64-aot": [ - "win81-arm64-aot", - "win81-aot", - "win81-arm64", - "win81", - "win8-arm64-aot", - "win8-aot", - "win8-arm64", - "win8", - "win7-arm64-aot", - "win7-aot", - "win7-arm64", - "win7", - "win-arm64-aot", - "win-aot", - "win-arm64", - "win", - "aot", - "any", - "base" - ], - "win81-x64": [ - "win81-x64", - "win81", - "win8-x64", - "win8", - "win7-x64", - "win7", - "win-x64", - "win", - "any", - "base" - ], - "win81-x64-aot": [ - "win81-x64-aot", - "win81-aot", - "win81-x64", - "win81", - "win8-x64-aot", - "win8-aot", - "win8-x64", - "win8", - "win7-x64-aot", - "win7-aot", - "win7-x64", - "win7", - "win-x64-aot", - "win-aot", - "win-x64", - "win", - "aot", - "any", - "base" - ], - "win81-x86": [ - "win81-x86", - "win81", - "win8-x86", - "win8", - "win7-x86", - "win7", - "win-x86", - "win", - "any", - "base" - ], - "win81-x86-aot": [ - "win81-x86-aot", - "win81-aot", - "win81-x86", - "win81", - "win8-x86-aot", - "win8-aot", - "win8-x86", - "win8", - "win7-x86-aot", - "win7-aot", - "win7-x86", - "win7", - "win-x86-aot", - "win-aot", - "win-x86", - "win", - "aot", - "any", - "base" - ] -} \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props deleted file mode 100644 index 05bdf782326b5..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props +++ /dev/null @@ -1,296 +0,0 @@ - - - - - any - x64;x86;arm;armv6;armel;arm64;loongarch64;mips64;s390x;ppc64le;riscv64 - - - unix - x64;x86;arm;armv6;armel;arm64;loongarch64;mips64;s390x;ppc64le;riscv64 - - - linux - x64;x86;arm;armv6;armel;arm64;s390x;ppc64le;riscv64 - - - - linux-musl - x64;x86;arm;armv6;arm64;s390x;ppc64le - 3.6;3.7;3.8;3.9;3.10;3.11;3.12;3.13;3.14;3.15;3.16;3.17;3.18 - - - - linux - x64;x86;arm;arm64 - - - linux-bionic - x64;x86;arm;arm64 - 21;22;23;24;25;26;27;28;29;30;31;32 - - - - linux - x64 - - - - arch - x64 - - - - any - wasm - - - - any - wasm - - - - ios - x64;arm64 - 13;14;15 - - - - rhel - x64 - 7 - true - false - - - rhel - x64;arm64 - 8;9 - true - false - - - - linux - x64;x86;arm;armel;arm64 - 8;9;10;11;12 - false - - - - linux - x64 - - - - linux - x64;arm64 - 23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39 - false - - - - linux - x64 - - - - unix - arm;x86 - 10 - - - unix - arm64;x64 - 10;11;12;13;14;15 - - - - ios - x86 - 10 - - - ios - arm64;x64 - 10;11;12;13;14;15 - - - - unix - arm64;x64 - 10;11;12;13;14;15 - - - - tvos - arm64;x64 - 10;11;12;13;14;15 - - - - - ubuntu.14.04 - x64 - 1;2;3 - - - ubuntu.16.04 - x64 - 1;2;3 - - - ubuntu.18.04 - x64 - 1;2 - - - - rhel - x64 - 8;9 - true - false - - - - rhel - x64 - 7;7.0;7.1;7.2;7.3;7.4;7.5;7.6 - true - - - rhel - x64 - 8;8.0 - true - - - - - linux - x64 - 13.2;15.0;15.1;42.1;42.2;42.3 - false - - - - unix - x64;arm64 - 10.10;10.11;10.12;10.13;10.14;10.15;10.16;11.0;12;13 - - - - unix - x64;arm64 - 12;13 - - - - unix - x64 - 11 - - - - unix - x64 - - - - illumos - x64 - 15 - - - - illumos - x64 - - - - illumos - x64 - 2020;2021 - - - - - linux - x64 - 6 - - - - linux - x64 - 7;7.0;7.1;7.2;7.3;7.4;7.5;7.6 - - - linux - x64;arm64 - 8;8.0;8.1 - - - linux - x64;arm64 - 9 - - - - rhel - x64;arm64 - 8;9 - true - false - - - - linux - x64 - 12;12.1;12.2;12.3;12.4;15;15.1 - - - - linux - x86;armel;arm64 - 4.0.0;5.0.0;5.5.0;6.0.0;6.5.0;7.0.0 - - - - debian - x64;x86;arm - 14.04;14.10;15.04;15.10 - false - - - debian - x64;x86;arm;arm64 - 16.04;16.10;17.04;17.10;18.04;18.10;19.04;19.10;20.04;20.10;21.04;21.10;22.04;22.10;23.04;23.10 - false - - - - any - true - aot - x64;x86;arm;arm64 - 7;8;81;10 - - - - - - - - base - - - - - any - - - - diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs deleted file mode 100644 index f5a33895866d5..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/AssemblyInfo.cs +++ /dev/null @@ -1,6 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Xunit; - -[assembly: SkipOnPlatform(TestPlatforms.Browser, "MSBuild is not supported on Browser")] \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs deleted file mode 100644 index 63e83a819bd81..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/GenerateRuntimeGraphTests.cs +++ /dev/null @@ -1,264 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.IO; -using System.Linq; -using System.Runtime.CompilerServices; -using Microsoft.Build.Evaluation; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NuGet.RuntimeModel; -using Xunit; -using Xunit.Abstractions; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - // MSBuild engine is not compatible with single file - [ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.HasAssemblyFiles))] - public class GenerateRuntimeGraphTests - { - private Log _log; - private TestBuildEngine _engine; - - private string defaultRootPath = (PlatformDetection.IsiOS || PlatformDetection.IstvOS) ? Path.GetTempPath() : string.Empty; - private string defaultRuntimeFile = "runtime.json"; - - public GenerateRuntimeGraphTests(ITestOutputHelper output) - { - _log = new Log(output); - _engine = new TestBuildEngine(_log); - - if (PlatformDetection.IsiOS || PlatformDetection.IstvOS) - { - var runtimeJsonPath = Path.Combine(defaultRootPath, defaultRuntimeFile); - File.Copy(defaultRuntimeFile, runtimeJsonPath, true); - - defaultRuntimeFile = runtimeJsonPath; - } - } - - private static ITaskItem[] DefaultRuntimeGroupItems { get; } = GetDefaultRuntimeGroupItems(); - - private static ITaskItem[] GetDefaultRuntimeGroupItems() - { - Project runtimeGroupProps = new Project("runtimeGroups.props"); - - ITaskItem[] runtimeGroups = runtimeGroupProps.GetItems("RuntimeGroupWithQualifiers") - .Select(i => CreateItem(i)).ToArray(); - - Assert.NotEmpty(runtimeGroups); - - return runtimeGroups; - } - - private static ITaskItem CreateItem(ProjectItem projectItem) - { - TaskItem item = new TaskItem(projectItem.EvaluatedInclude); - foreach (var metadatum in projectItem.Metadata) - { - item.SetMetadata(metadatum.Name, metadatum.EvaluatedValue); - } - return item; - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanCreateRuntimeGraph() - { - // will generate and compare to existing file. - GenerateRuntimeGraph task = new GenerateRuntimeGraph() - { - BuildEngine = _engine, - RuntimeGroups = DefaultRuntimeGroupItems, - RuntimeJson = defaultRuntimeFile, - UpdateRuntimeFiles = false - }; - task.Execute(); - - _log.AssertNoErrorsOrWarnings(); - } - - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanIgnoreExistingInferRids() - { - // will generate and compare to existing file. - GenerateRuntimeGraph task = new GenerateRuntimeGraph() - { - BuildEngine = _engine, - RuntimeGroups = DefaultRuntimeGroupItems, - RuntimeJson = defaultRuntimeFile, - AdditionalRuntimeIdentifiers = new[] { "rhel.9-x64", "centos.9-arm64", "win-x64" }, - UpdateRuntimeFiles = false - }; - - _log.Reset(); - task.Execute(); - _log.AssertNoErrorsOrWarnings(); - } - - /// - /// Runs GenerateRuntimeGraph task specifying AdditionalRuntimeIdentifiers then asserts that the - /// generated runtime.json has the expected additions (and no more). - /// - /// additional RIDs - /// entries that are expected to be added to the RuntimeGraph - /// parent to use when adding a new RID - /// a unique prefix to use for the generated - private void AssertRuntimeGraphAdditions(string[] additionalRIDs, RuntimeDescription[] expectedAdditions, string additionalRIDParent = null, [CallerMemberName] string runtimeFilePrefix = null) - { - string runtimeFile = Path.Combine(defaultRootPath, runtimeFilePrefix + ".runtime.json"); - - GenerateRuntimeGraph task = new GenerateRuntimeGraph() - { - BuildEngine = _engine, - RuntimeGroups = DefaultRuntimeGroupItems, - RuntimeJson = runtimeFile, - AdditionalRuntimeIdentifiers = additionalRIDs, - AdditionalRuntimeIdentifierParent = additionalRIDParent, - UpdateRuntimeFiles = true - }; - - _log.Reset(); - task.Execute(); - _log.AssertNoErrorsOrWarnings(); - - RuntimeGraph expected = RuntimeGraph.Merge( - JsonRuntimeFormat.ReadRuntimeGraph(defaultRuntimeFile), - new RuntimeGraph(expectedAdditions)); - - RuntimeGraph actual = JsonRuntimeFormat.ReadRuntimeGraph(runtimeFile); - - // Should this assert fail, it's helpful to diff defaultRuntimeFile and runtimeFile to see the additions. - Assert.Equal(expected, actual); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddVersionsToExistingGroups() - { - var additionalRIDs = new[] { "ubuntu.22.04-arm64" }; - var expectedAdditions = new[] - { - new RuntimeDescription("ubuntu.22.04", new[] { "ubuntu" }), - new RuntimeDescription("ubuntu.22.04-x64", new[] { "ubuntu.22.04", "ubuntu-x64" }), - new RuntimeDescription("ubuntu.22.04-x86", new[] { "ubuntu.22.04", "ubuntu-x86" }), - new RuntimeDescription("ubuntu.22.04-arm", new[] { "ubuntu.22.04", "ubuntu-arm" }), - new RuntimeDescription("ubuntu.22.04-arm64", new[] { "ubuntu.22.04", "ubuntu-arm64" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddParentVersionsToExistingGroups() - { - var additionalRIDs = new[] { "centos.9.2-arm64" }; - var expectedAdditions = new[] - { - new RuntimeDescription("centos.9.2", new[] { "centos", "rhel.9.2" }), - new RuntimeDescription("centos.9.2-x64", new[] { "centos.9.2", "centos-x64", "rhel.9.2-x64" }), - new RuntimeDescription("centos.9.2-arm64", new[] { "centos.9.2", "centos-arm64", "rhel.9.2-arm64" }), - - // rhel RIDs are implicitly created since centos imports versioned RHEL RIDs - new RuntimeDescription("rhel.9.2", new[] { "rhel.9" }), - new RuntimeDescription("rhel.9.2-x64", new[] { "rhel.9.2", "rhel.9-x64" }), - new RuntimeDescription("rhel.9.2-arm64", new[] { "rhel.9.2", "rhel.9-arm64" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddMajorVersionsToExistingGroups() - { - - var additionalRIDs = new[] { "rhel.10-x64" }; - var expectedAdditions = new[] - { - // Note that rhel doesn't treat major versions as compatible, however we do since it's closest and we don't represent this policy in the RuntimeGroups explicitly. - // We could add a rule that wouldn't insert a new major version if we see existing groups are split by major version. - new RuntimeDescription("rhel.10", new[] { "rhel.9" }), - new RuntimeDescription("rhel.10-x64", new[] { "rhel.10", "rhel.9-x64" }), - new RuntimeDescription("rhel.10-arm64", new[] { "rhel.10", "rhel.9-arm64" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddArchitectureToExistingGroups() - { - var additionalRIDs = new[] { "win10-x128" }; - var expectedAdditions = new[] - { - new RuntimeDescription("win10-x128", new[] { "win10", "win81-x128" }), - new RuntimeDescription("win10-x128-aot", new[] { "win10-aot", "win10-x128", "win10", "win81-x128-aot" }), - new RuntimeDescription("win81-x128-aot", new[] { "win81-aot", "win81-x128", "win81", "win8-x128-aot" }), - new RuntimeDescription("win81-x128", new[] { "win81", "win8-x128" }), - new RuntimeDescription("win8-x128-aot", new[] { "win8-aot", "win8-x128", "win8", "win7-x128-aot" }), - new RuntimeDescription("win8-x128", new[] { "win8", "win7-x128" }), - new RuntimeDescription("win7-x128-aot", new[] { "win7-aot", "win7-x128", "win7", "win-x128-aot" }), - new RuntimeDescription("win7-x128", new[] { "win7", "win-x128" }), - new RuntimeDescription("win-x128-aot", new[] { "win-aot", "win-x128" }), - new RuntimeDescription("win-x128", new[] { "win" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddArchitectureAndVersionToExistingGroups() - { - var additionalRIDs = new[] { "osx.13-powerpc" }; - var expectedAdditions = new[] - { - new RuntimeDescription("osx.13-powerpc", new[] { "osx.13", "osx.12-powerpc" }), - new RuntimeDescription("osx.13-arm64", new[] { "osx.13", "osx.12-arm64" }), - new RuntimeDescription("osx.13-x64", new[] { "osx.13", "osx.12-x64" }), - new RuntimeDescription("osx.13", new[] { "osx.12" }), - // our RID model doesn't give priority to architecture, so the new architecture is applied to all past versions - new RuntimeDescription("osx.12-powerpc", new[] { "osx.12", "osx.11.0-powerpc" }), - new RuntimeDescription("osx.11.0-powerpc", new[] { "osx.11.0", "osx.10.16-powerpc" }), - new RuntimeDescription("osx.10.16-powerpc", new[] { "osx.10.16", "osx.10.15-powerpc" }), - new RuntimeDescription("osx.10.15-powerpc", new[] { "osx.10.15", "osx.10.14-powerpc" }), - new RuntimeDescription("osx.10.14-powerpc", new[] { "osx.10.14", "osx.10.13-powerpc" }), - new RuntimeDescription("osx.10.13-powerpc", new[] { "osx.10.13", "osx.10.12-powerpc" }), - new RuntimeDescription("osx.10.12-powerpc", new[] { "osx.10.12", "osx.10.11-powerpc" }), - new RuntimeDescription("osx.10.11-powerpc", new[] { "osx.10.11", "osx.10.10-powerpc" }), - new RuntimeDescription("osx.10.10-powerpc", new[] { "osx.10.10", "osx-powerpc" }), - new RuntimeDescription("unix-powerpc", new[] { "unix" }), - new RuntimeDescription("osx-powerpc", new[] { "osx", "unix-powerpc" }), - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions); - } - - [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/77889", TestPlatforms.iOS | TestPlatforms.tvOS)] - public void CanAddNewGroups() - { - var additionalRIDs = new[] { "yolinux.42.0-quantum" }; - var expectedAdditions = new[] - { - new RuntimeDescription("unix-quantum", new[] { "unix" }), - new RuntimeDescription("linux-quantum", new[] { "linux", "unix-quantum" }), - new RuntimeDescription("linux-musl-quantum", new[] { "linux-musl", "linux-quantum" }), - new RuntimeDescription("yolinux", new[] { "linux-musl" }), - new RuntimeDescription("yolinux-quantum", new[] { "yolinux", "linux-musl-quantum" }), - new RuntimeDescription("yolinux.42.0", new[] { "yolinux" }), - new RuntimeDescription("yolinux.42.0-quantum", new[] { "yolinux.42.0", "yolinux-quantum" }) - }; - - AssertRuntimeGraphAdditions(additionalRIDs, expectedAdditions, "linux-musl"); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs deleted file mode 100644 index d1e7368ec0882..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/Log.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Xunit; -using Xunit.Abstractions; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - internal class Log : ILog - { - private readonly ITestOutputHelper _output; - - public Log(ITestOutputHelper output) - { - _output = output; - Reset(); - } - - public int ErrorsLogged { get; set; } - public int WarningsLogged { get; set; } - - public void LogError(string message, params object[] messageArgs) - { - ErrorsLogged++; - _output.WriteLine("Error: " + message, messageArgs); - } - - public void LogMessage(string message, params object[] messageArgs) - { - _output.WriteLine(message, messageArgs); - } - - public void LogMessage(LogImportance importance, string message, params object[] messageArgs) - { - _output.WriteLine(message, messageArgs); - } - - public void LogWarning(string message, params object[] messageArgs) - { - WarningsLogged++; - _output.WriteLine("Warning: " + message, messageArgs); - } - - public void Reset() - { - ErrorsLogged = 0; - WarningsLogged = 0; - } - - public void AssertNoErrorsOrWarnings() - { - Assert.Equal(0, ErrorsLogged); - Assert.Equal(0, WarningsLogged); - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj b/src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj deleted file mode 100644 index d4b11af0a96d6..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/Microsoft.NETCore.Platforms.Tests.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - $(NetCoreAppCurrent);$(NetFrameworkToolCurrent) - true - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs deleted file mode 100644 index 8dee0ebeda17a..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Generic; -using Xunit; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - public class RidTests - { - public static IEnumerable ValidRIDData() - { - yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; - yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")}, null }; - yield return new object[] { "linux", new RID() { BaseRID = "linux" }, null }; - yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; - yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; - yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; - yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" }, null }; - yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" }, null }; - yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" }, null }; - yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" }, // demonstrates ambiguity, avoid using `-` in base - new RID() { BaseRID = "foo-bar", Architecture = "arm" } }; - yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" }, // yes, we already have ambiguous RIDs - new RID() { BaseRID = "linux-musl", Architecture = "x64" } }; - } - - [Theory] - [MemberData(nameof(ValidRIDData))] - internal void ParseCorrectly(string input, RID expected, RID? expectedNoQualifier) - { - _ = expectedNoQualifier; // unused - - RID actual = RID.Parse(input, noQualifier: false); - - Assert.Equal(expected, actual); - } - - [Theory] - [MemberData(nameof(ValidRIDData))] - internal void ParseCorrectlyNoQualifier(string input, RID expected, RID? expectedNoQualifier) - { - expectedNoQualifier ??= expected; - - RID actual = RID.Parse(input, noQualifier: true); - - Assert.Equal(expectedNoQualifier, actual); - } - - [Theory] - [MemberData(nameof(ValidRIDData))] - internal void ToStringAsExpected(string expected, RID rid, RID? expectedNoQualifierRid) - { - string actual = rid.ToString(); - - Assert.Equal(expected, actual); - - if (expectedNoQualifierRid is not null) - { - actual = expectedNoQualifierRid.ToString(); - - Assert.Equal(expected, actual); - } - } - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs deleted file mode 100644 index 2822974acfacc..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/RuntimeVersionTests.cs +++ /dev/null @@ -1,233 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Generic; -using Xunit; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - public class RuntimeVersionTests - { - public enum Comparison - { - LessThan, - Equal, - GreaterThan - } - - public static IEnumerable ComparisonData() - { - yield return new object[] { "0.0", "00.0", Comparison.LessThan }; - yield return new object[] { "2.0", "1.0", Comparison.GreaterThan }; - yield return new object[] { "2", "1.0", Comparison.GreaterThan }; - yield return new object[] { "2", "1", Comparison.GreaterThan }; - yield return new object[] { "10", "10.0", Comparison.LessThan }; - yield return new object[] { "10", "10.00", Comparison.LessThan }; - yield return new object[] { "10.0", "10.0", Comparison.Equal }; - yield return new object[] { "10.0", null, Comparison.GreaterThan }; - yield return new object[] { "8", "8", Comparison.Equal }; - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void CompareTo(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - int actual = v1.CompareTo(v2); - int invActual = v2?.CompareTo(v1) ?? -1; - - switch (expected) - { - case Comparison.LessThan: - Assert.True(actual < 0); - Assert.True(invActual > 0); - break; - case Comparison.Equal: - Assert.Equal(0, actual); - Assert.Equal(0, invActual); - break; - case Comparison.GreaterThan: - Assert.True(actual > 0); - Assert.True(invActual < 0); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void GreaterThan(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 > v2; - bool invActual = v2 > v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.False(actual); - Assert.True(invActual); - break; - case Comparison.Equal: - Assert.False(actual); - Assert.False(invActual); - break; - case Comparison.GreaterThan: - Assert.True(actual); - Assert.False(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void GreaterThanOrEqual(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 >= v2; - bool invActual = v2 >= v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.False(actual); - Assert.True(invActual); - break; - case Comparison.Equal: - Assert.True(actual); - Assert.True(invActual); - break; - case Comparison.GreaterThan: - Assert.True(actual); - Assert.False(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void LessThan(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 < v2; - bool invActual = v2 < v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.True(actual); - Assert.False(invActual); - break; - case Comparison.Equal: - Assert.False(actual); - Assert.False(invActual); - break; - case Comparison.GreaterThan: - Assert.False(actual); - Assert.True(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void LessThanOrEqual(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 <= v2; - bool invActual = v2 <= v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.True(actual); - Assert.False(invActual); - break; - case Comparison.Equal: - Assert.True(actual); - Assert.True(invActual); - break; - case Comparison.GreaterThan: - Assert.False(actual); - Assert.True(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void Equal(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - bool actual = v1 == v2; - bool invActual = v2 == v1; - - switch (expected) - { - case Comparison.LessThan: - Assert.False(actual); - Assert.False(invActual); - break; - case Comparison.Equal: - Assert.True(actual); - Assert.True(invActual); - break; - case Comparison.GreaterThan: - Assert.False(actual); - Assert.False(invActual); - break; - } - } - - [MemberData(nameof(ComparisonData))] - [Theory] - public static void GetHashCodeUnique(string vs1, string vs2, Comparison expected) - { - RuntimeVersion v1 = new RuntimeVersion(vs1); - RuntimeVersion v2 = vs2 == null ? null : new RuntimeVersion(vs2); - int h1 = v1.GetHashCode(); - int h2 = v2?.GetHashCode() ?? 0; - - switch (expected) - { - case Comparison.LessThan: - Assert.NotEqual(h1, h2); - break; - case Comparison.Equal: - Assert.Equal(h1, h2); - break; - case Comparison.GreaterThan: - Assert.NotEqual(h1, h2); - break; - } - } - public static IEnumerable ValidVersions() - { - yield return new object[] { "0" }; - yield return new object[] { "00" }; - yield return new object[] { "000" }; - yield return new object[] { "1" }; - yield return new object[] { "1.0" }; - yield return new object[] { "1.1" }; - yield return new object[] { "1.01" }; - yield return new object[] { "1.2.3.4" }; - yield return new object[] { "1.02.03.04" }; - } - - - [MemberData(nameof(ValidVersions))] - [Theory] - public static void RoundTripToString(string expected) - { - RuntimeVersion version = new RuntimeVersion(expected); - string actual = version.ToString(); - Assert.Equal(expected, actual); - } - - } -} diff --git a/src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs b/src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs deleted file mode 100644 index 67dfefbe8c8c9..0000000000000 --- a/src/libraries/Microsoft.NETCore.Platforms/tests/TestBuildEngine.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.Build.Framework; -using System; -using System.Collections; - -namespace Microsoft.NETCore.Platforms.BuildTasks.Tests -{ - public class TestBuildEngine : IBuildEngine - { - private ILog _log; - - public TestBuildEngine(ILog log) - { - ColumnNumberOfTaskNode = 0; - ContinueOnError = true; - LineNumberOfTaskNode = 0; - ProjectFileOfTaskNode = "test"; - _log = log; - } - - public int ColumnNumberOfTaskNode { get; set; } - - public bool ContinueOnError { get; set; } - - public int LineNumberOfTaskNode { get; set; } - - public string ProjectFileOfTaskNode { get; set; } - - public bool BuildProjectFile(string projectFileName, string[] targetNames, IDictionary globalProperties, IDictionary targetOutputs) - { - throw new NotImplementedException(); - } - - public void LogCustomEvent(CustomBuildEventArgs e) - { - _log.LogMessage(e.Message); - } - - public void LogErrorEvent(BuildErrorEventArgs e) - { - _log.LogError(e.Message); - } - - public void LogMessageEvent(BuildMessageEventArgs e) - { - _log.LogMessage((LogImportance)e.Importance, e.Message); - } - - public void LogWarningEvent(BuildWarningEventArgs e) - { - _log.LogWarning(e.Message); - } - } -} diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/BaseConfigurationRecord.cs b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/BaseConfigurationRecord.cs index c0495b2aee27f..f72769050e513 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/BaseConfigurationRecord.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/BaseConfigurationRecord.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Buffers; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; @@ -18,6 +19,12 @@ namespace System.Configuration [DebuggerDisplay("ConfigPath = {ConfigPath}")] internal abstract class BaseConfigurationRecord : IInternalConfigRecord { +#if NET8_0_OR_GREATER + private static readonly SearchValues s_invalidSubPathChars = SearchValues.Create(InvalidSubPathCharactersString); +#else + private static ReadOnlySpan s_invalidSubPathChars => InvalidSubPathCharactersString.AsSpan(); +#endif + protected const string NewLine = "\r\n"; internal const string KeywordTrue = "true"; @@ -128,7 +135,6 @@ internal abstract class BaseConfigurationRecord : IInternalConfigRecord // Comparer used in sorting IndirectInputs. private static readonly IComparer s_indirectInputsComparer = new IndirectLocationInputComparer(); - private static readonly char[] s_invalidSubPathCharactersArray = InvalidSubPathCharactersString.ToCharArray(); protected Hashtable _children; // configName -> record private object _configContext; // Context for config level @@ -3090,7 +3096,7 @@ internal static string NormalizeLocationSubPath(string subPath, IConfigErrorInfo throw new ConfigurationErrorsException(SR.Config_location_path_invalid_last_character, errorInfo); // combination of URI reserved characters and OS invalid filename characters, minus / (allowed reserved character) - if (subPath.IndexOfAny(s_invalidSubPathCharactersArray) != -1) + if (subPath.AsSpan().IndexOfAny(s_invalidSubPathChars) >= 0) throw new ConfigurationErrorsException(SR.Config_location_path_invalid_character, errorInfo); return subPath; diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs index f1117a5fa7cd7..3b49667e9b32a 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs @@ -382,6 +382,9 @@ public async ValueTask OpenOutboundStreamAsync(QuicStreamType type, { await stream.DisposeAsync().ConfigureAwait(false); } + + // Propagate ODE if disposed in the meantime. + ObjectDisposedException.ThrowIf(_disposed == 1, this); // Propagate connection error if present. if (_acceptQueue.Reader.Completion.IsFaulted) { @@ -485,7 +488,7 @@ private unsafe int HandleEventShutdownInitiatedByPeer(ref SHUTDOWN_INITIATED_BY_ } private unsafe int HandleEventShutdownComplete() { - Exception exception = ExceptionDispatchInfo.SetCurrentStackTrace(ThrowHelper.GetOperationAbortedException()); + Exception exception = ExceptionDispatchInfo.SetCurrentStackTrace(_disposed == 1 ? new ObjectDisposedException(GetType().FullName) : ThrowHelper.GetOperationAbortedException()); _acceptQueue.Writer.TryComplete(exception); _connectedTcs.TrySetException(exception); _shutdownTcs.TrySetResult(); @@ -622,7 +625,7 @@ public async ValueTask DisposeAsync() } // Flush the queue and dispose all remaining streams. - _acceptQueue.Writer.TryComplete(ExceptionDispatchInfo.SetCurrentStackTrace(ThrowHelper.GetOperationAbortedException())); + _acceptQueue.Writer.TryComplete(ExceptionDispatchInfo.SetCurrentStackTrace(new ObjectDisposedException(GetType().FullName))); while (_acceptQueue.Reader.TryRead(out QuicStream? stream)) { await stream.DisposeAsync().ConfigureAwait(false); diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicListener.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicListener.cs index 8a9eb59d3f178..8ecbfb9901eb2 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicListener.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicListener.cs @@ -377,8 +377,8 @@ public async ValueTask DisposeAsync() _handle.Dispose(); // Flush the queue and dispose all remaining connections. - _disposeCts.Cancel(); - _acceptQueue.Writer.TryComplete(ExceptionDispatchInfo.SetCurrentStackTrace(ThrowHelper.GetOperationAbortedException())); + await _disposeCts.CancelAsync().ConfigureAwait(false); + _acceptQueue.Writer.TryComplete(ExceptionDispatchInfo.SetCurrentStackTrace(new ObjectDisposedException(GetType().FullName))); while (_acceptQueue.Reader.TryRead(out object? item)) { if (item is QuicConnection connection) diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs index dba45d813945f..61d42b2525480 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicConnectionTests.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Net.Sockets; using System.Security.Cryptography.X509Certificates; using System.Threading; @@ -88,7 +87,6 @@ await RunClientServer( await AssertThrowsQuicExceptionAsync(QuicError.OperationAborted, () => connectTask); // Subsequent attempts should fail - // TODO: Which exception is correct? await AssertThrowsQuicExceptionAsync(QuicError.OperationAborted, async () => await serverConnection.AcceptInboundStreamAsync()); await Assert.ThrowsAsync(() => OpenAndUseStreamAsync(serverConnection)); }); @@ -117,11 +115,10 @@ await RunClientServer( sync.Release(); // Pending ops should fail - await AssertThrowsQuicExceptionAsync(QuicError.OperationAborted, () => acceptTask); - await AssertThrowsQuicExceptionAsync(QuicError.OperationAborted, () => connectTask); + await Assert.ThrowsAsync(async () => await acceptTask); + await Assert.ThrowsAsync(async () => await connectTask); // Subsequent attempts should fail - // TODO: Should these be QuicOperationAbortedException, to match above? Or vice-versa? await Assert.ThrowsAsync(async () => await serverConnection.AcceptInboundStreamAsync()); await Assert.ThrowsAsync(async () => await OpenAndUseStreamAsync(serverConnection)); }); @@ -312,6 +309,21 @@ await RunClientServer( _ => Task.CompletedTask); } + [Fact] + public async Task AcceptStreamAsync_ConnectionDisposed_Throws() + { + (QuicConnection clientConnection, QuicConnection serverConnection) = await CreateConnectedQuicConnection(); + + // One task issues before the disposal. + ValueTask acceptTask1 = serverConnection.AcceptInboundStreamAsync(); + await serverConnection.DisposeAsync(); + // Another task issued after the disposal. + ValueTask acceptTask2 = serverConnection.AcceptInboundStreamAsync(); + + var accept1Exception = await Assert.ThrowsAsync(async () => await acceptTask1); + var accept2Exception = await Assert.ThrowsAsync(async () => await acceptTask2); + } + [Theory] [InlineData(true)] [InlineData(false)] diff --git a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs index 94fbf03fe7ea5..cda0b06a03888 100644 --- a/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs +++ b/src/libraries/System.Net.Quic/tests/FunctionalTests/QuicListenerTests.cs @@ -196,10 +196,8 @@ public async Task AcceptConnectionAsync_ListenerDisposed_Throws() await listener.DisposeAsync(); serverDisposed.SetResult(); - var accept1Exception = await AssertThrowsQuicExceptionAsync(QuicError.OperationAborted, async () => await acceptTask1); - var accept2Exception = await AssertThrowsQuicExceptionAsync(QuicError.OperationAborted, async () => await acceptTask2); - - Assert.Equal(accept1Exception, accept2Exception); + var accept1Exception = await Assert.ThrowsAsync(async () => await acceptTask1); + var accept2Exception = await Assert.ThrowsAsync(async () => await acceptTask2); // Connect attempt should be stopped with "UserCanceled". var connectException = await Assert.ThrowsAsync(async () => await connectTask); diff --git a/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.csproj b/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.csproj index 89bdef6ea38ed..a8090a6f6995d 100644 --- a/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.csproj +++ b/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.csproj @@ -2,13 +2,14 @@ $(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) + $(TargetFrameworks);net7.0;net6.0 - + diff --git a/src/libraries/System.Numerics.Tensors/src/System.Numerics.Tensors.csproj b/src/libraries/System.Numerics.Tensors/src/System.Numerics.Tensors.csproj index 097fa244ad491..b0449170860b4 100644 --- a/src/libraries/System.Numerics.Tensors/src/System.Numerics.Tensors.csproj +++ b/src/libraries/System.Numerics.Tensors/src/System.Numerics.Tensors.csproj @@ -2,6 +2,7 @@ $(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) + $(TargetFrameworks);net7.0;net6.0 true true Provides support for operating over tensors. @@ -16,11 +17,11 @@ - + - + diff --git a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs index 4f40aa31494c9..ae5af404ac1af 100644 --- a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs +++ b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs @@ -1159,7 +1159,9 @@ public static float Invoke(Vector512 x) public static float Invoke(float x) => -x; public static Vector128 Invoke(Vector128 x) => -x; public static Vector256 Invoke(Vector256 x) => -x; +#if NET8_0_OR_GREATER public static Vector512 Invoke(Vector512 x) => -x; +#endif } private readonly struct AddMultiplyOperator : ITernaryOperator @@ -1167,7 +1169,9 @@ public static float Invoke(Vector512 x) public static float Invoke(float x, float y, float z) => (x + y) * z; public static Vector128 Invoke(Vector128 x, Vector128 y, Vector128 z) => (x + y) * z; public static Vector256 Invoke(Vector256 x, Vector256 y, Vector256 z) => (x + y) * z; +#if NET8_0_OR_GREATER public static Vector512 Invoke(Vector512 x, Vector512 y, Vector512 z) => (x + y) * z; +#endif } private readonly struct MultiplyAddOperator : ITernaryOperator @@ -1175,7 +1179,9 @@ public static float Invoke(Vector512 x) public static float Invoke(float x, float y, float z) => (x * y) + z; public static Vector128 Invoke(Vector128 x, Vector128 y, Vector128 z) => (x * y) + z; public static Vector256 Invoke(Vector256 x, Vector256 y, Vector256 z) => (x * y) + z; +#if NET8_0_OR_GREATER public static Vector512 Invoke(Vector512 x, Vector512 y, Vector512 z) => (x * y) + z; +#endif } private readonly struct LoadIdentity : IUnaryOperator diff --git a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs index 134364708b8e5..ba3fc69bab527 100644 --- a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs +++ b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs @@ -69,8 +69,8 @@ private static float CosineSimilarityCore(ReadOnlySpan x, ReadOnlySpan( float identityValue, ReadOnlySpan x, TLoad load = default, TAggregate aggregate = default) - where TLoad : IUnaryOperator - where TAggregate : IBinaryOperator + where TLoad : struct, IUnaryOperator + where TAggregate : struct, IBinaryOperator { // Initialize the result to the identity value float result = identityValue; @@ -112,8 +112,8 @@ private static float Aggregate( private static float Aggregate( float identityValue, ReadOnlySpan x, ReadOnlySpan y, TBinary binary = default, TAggregate aggregate = default) - where TBinary : IBinaryOperator - where TAggregate : IBinaryOperator + where TBinary : struct, IBinaryOperator + where TAggregate : struct, IBinaryOperator { // Initialize the result to the identity value float result = identityValue; @@ -156,7 +156,7 @@ private static float Aggregate( private static void InvokeSpanIntoSpan( ReadOnlySpan x, Span destination, TUnaryOperator op = default) - where TUnaryOperator : IUnaryOperator + where TUnaryOperator : struct, IUnaryOperator { if (x.Length > destination.Length) { @@ -203,7 +203,7 @@ private static void InvokeSpanIntoSpan( private static void InvokeSpanSpanIntoSpan( ReadOnlySpan x, ReadOnlySpan y, Span destination, TBinaryOperator op = default) - where TBinaryOperator : IBinaryOperator + where TBinaryOperator : struct, IBinaryOperator { if (x.Length != y.Length) { @@ -258,7 +258,7 @@ private static void InvokeSpanSpanIntoSpan( private static void InvokeSpanScalarIntoSpan( ReadOnlySpan x, float y, Span destination, TBinaryOperator op = default) - where TBinaryOperator : IBinaryOperator + where TBinaryOperator : struct, IBinaryOperator { if (x.Length > destination.Length) { @@ -309,7 +309,7 @@ private static void InvokeSpanScalarIntoSpan( private static void InvokeSpanSpanSpanIntoSpan( ReadOnlySpan x, ReadOnlySpan y, ReadOnlySpan z, Span destination, TTernaryOperator op = default) - where TTernaryOperator : ITernaryOperator + where TTernaryOperator : struct, ITernaryOperator { if (x.Length != y.Length || x.Length != z.Length) { @@ -369,7 +369,7 @@ private static void InvokeSpanSpanSpanIntoSpan( private static void InvokeSpanSpanScalarIntoSpan( ReadOnlySpan x, ReadOnlySpan y, float z, Span destination, TTernaryOperator op = default) - where TTernaryOperator : ITernaryOperator + where TTernaryOperator : struct, ITernaryOperator { if (x.Length != y.Length) { @@ -430,7 +430,7 @@ private static void InvokeSpanSpanScalarIntoSpan( private static void InvokeSpanScalarSpanIntoSpan( ReadOnlySpan x, float y, ReadOnlySpan z, Span destination, TTernaryOperator op = default) - where TTernaryOperator : ITernaryOperator + where TTernaryOperator : struct, ITernaryOperator { if (x.Length != z.Length) { diff --git a/src/libraries/System.Reflection.MetadataLoadContext/src/System/Reflection/TypeLoading/General/Helpers.cs b/src/libraries/System.Reflection.MetadataLoadContext/src/System/Reflection/TypeLoading/General/Helpers.cs index 147259b5cde42..d172f20f1cb06 100644 --- a/src/libraries/System.Reflection.MetadataLoadContext/src/System/Reflection/TypeLoading/General/Helpers.cs +++ b/src/libraries/System.Reflection.MetadataLoadContext/src/System/Reflection/TypeLoading/General/Helpers.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Buffers; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; @@ -11,6 +12,12 @@ namespace System.Reflection.TypeLoading { internal static class Helpers { +#if NET8_0_OR_GREATER + private static readonly SearchValues s_charsToEscape = SearchValues.Create("\\[]+*&,"); +#else + private static ReadOnlySpan s_charsToEscape => "\\[]+*&,".AsSpan(); +#endif + [return: NotNullIfNotNull(nameof(original))] public static T[]? CloneArray(this T[]? original) { @@ -96,7 +103,7 @@ public static string ComputeArraySuffix(int rank, bool multiDim) public static string EscapeTypeNameIdentifier(this string identifier) { // Some characters in a type name need to be escaped - if (identifier.IndexOfAny(s_charsToEscape) != -1) + if (TypeNameContainsTypeParserMetacharacters(identifier)) { StringBuilder sbEscapedName = new StringBuilder(identifier.Length); foreach (char c in identifier) @@ -113,12 +120,16 @@ public static string EscapeTypeNameIdentifier(this string identifier) public static bool TypeNameContainsTypeParserMetacharacters(this string identifier) { - return identifier.IndexOfAny(s_charsToEscape) != -1; + return identifier.AsSpan().IndexOfAny(s_charsToEscape) >= 0; } public static bool NeedsEscapingInTypeName(this char c) { - return Array.IndexOf(s_charsToEscape, c) >= 0; +#if NET8_0_OR_GREATER + return s_charsToEscape.Contains(c); +#else + return s_charsToEscape.IndexOf(c) >= 0; +#endif } public static string UnescapeTypeNameIdentifier(this string identifier) @@ -145,8 +156,6 @@ public static string UnescapeTypeNameIdentifier(this string identifier) return identifier; } - private static readonly char[] s_charsToEscape = new char[] { '\\', '[', ']', '+', '*', '&', ',' }; - /// /// For AssemblyReferences, convert "unspecified" components from the ECMA format (0xffff) to the in-memory System.Version format (0xffffffff). /// diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/BaseJSGenerator.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/BaseJSGenerator.cs index 97d158bb319de..798be15bc45df 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/BaseJSGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/BaseJSGenerator.cs @@ -22,7 +22,6 @@ protected BaseJSGenerator(MarshalerType marshalerType, IMarshallingGenerator inn } public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _inner.AsNativeType(info); - public bool IsSupported(TargetFramework target, Version version) => _inner.IsSupported(target, version); public virtual bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _inner.UsesNativeIdentifier(info, context); public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => _inner.GetNativeSignatureBehavior(info); public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => _inner.GetValueBoundaryBehavior(info, context); diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/EmptyJSGenerator.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/EmptyJSGenerator.cs index 075d464b2bde7..060902fc1098a 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/EmptyJSGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/Marshaling/EmptyJSGenerator.cs @@ -14,7 +14,6 @@ internal sealed class EmptyJSGenerator : IJSMarshallingGenerator public IEnumerable GenerateBind(TypePositionInfo info, StubCodeContext context) => Array.Empty(); public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.ManagedTypeAndAttributes; public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier; - public bool IsSupported(TargetFramework target, Version version) => false; public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) => ByValueMarshalKindSupportDescriptor.Default.GetSupport(marshalKind, info, context, out diagnostic); public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => false; diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ComInterfaceDispatchMarshallerFactory.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ComInterfaceDispatchMarshallerFactory.cs index a75cd8cad7726..86c67cbd4dadc 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ComInterfaceDispatchMarshallerFactory.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ComInterfaceDispatchMarshallerFactory.cs @@ -59,8 +59,6 @@ public IEnumerable Generate(TypePositionInfo info, StubCodeCont public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.NativeIdentifier; - public bool IsSupported(TargetFramework target, Version version) - => target == TargetFramework.Net && version >= new Version(5, 0); public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) => ByValueMarshalKindSupportDescriptor.Default.GetSupport(marshalKind, info, context, out diagnostic); public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ManagedHResultExceptionMarshallerFactory.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ManagedHResultExceptionMarshallerFactory.cs index 0e6b17bd2ee43..c2f02efffeac1 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ManagedHResultExceptionMarshallerFactory.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ManagedHResultExceptionMarshallerFactory.cs @@ -68,7 +68,6 @@ public IEnumerable Generate(TypePositionInfo info, StubCodeCont public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier; - public bool IsSupported(TargetFramework target, Version version) => true; public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) => ByValueMarshalKindSupportDescriptor.Default.GetSupport(marshalKind, info, context, out diagnostic); public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => false; @@ -106,7 +105,6 @@ public IEnumerable Generate(TypePositionInfo info, StubCodeCont public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier; - public bool IsSupported(TargetFramework target, Version version) => true; public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) => ByValueMarshalKindSupportDescriptor.Default.GetSupport(marshalKind, info, context, out diagnostic); public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => false; diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ObjectUnwrapperMarshallerFactory.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ObjectUnwrapperMarshallerFactory.cs index 75a7aa5064b73..2ca351cf53827 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ObjectUnwrapperMarshallerFactory.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/ObjectUnwrapperMarshallerFactory.cs @@ -54,7 +54,6 @@ public IEnumerable Generate(TypePositionInfo info, StubCodeCont public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.NativeIdentifier; - public bool IsSupported(TargetFramework target, Version version) => true; public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) => ByValueMarshalKindSupportDescriptor.Default.GetSupport(marshalKind, info, context, out diagnostic); public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/StructAsHResultMarshallerFactory.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/StructAsHResultMarshallerFactory.cs index e6eb9627b5acc..d8b41ca6e3732 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/StructAsHResultMarshallerFactory.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Marshallers/StructAsHResultMarshallerFactory.cs @@ -98,8 +98,6 @@ public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, Stu return ValueBoundaryBehavior.NativeIdentifier; } - public bool IsSupported(TargetFramework target, Version version) => target == TargetFramework.Net && version.Major >= 8; - public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) => ByValueMarshalKindSupportDescriptor.Default.GetSupport(marshalKind, info, context, out diagnostic); diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/Strings.resx b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/Strings.resx index 2da298e8a7b0d..bce2c5ae18804 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/Strings.resx +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/Strings.resx @@ -1,17 +1,17 @@  - @@ -144,9 +144,6 @@ Marshalling string or char without explicit marshalling information is not supported. Specify '{0}.StringMarshalling', '{0}.StringMarshallingCustomType', 'MarshalUsingAttribute' or 'MarshalAsAttribute'. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - This element cannot depend on '{0}' for collection size information without creating a dependency cycle diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.cs.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.cs.xlf index 48a9bc03b73a6..9f769d6c35c06 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.cs.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.cs.xlf @@ -1022,11 +1022,6 @@ Aby se povolilo zařazování tohoto typu, musí se v tomto projektu zakázat zařazování modulu runtime použitím atributu System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute u sestavení. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Abstraktní typ odvozený ze SafeHandle nelze zařadit pomocí odkazu. Poskytnutý typ musí být konkrétní. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. Při volání metody musí být definována velikost parametru{0}, která je zařazena do volané metody, ale parametr count {1} je parametr out. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.de.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.de.xlf index 3135aa3bbe7ea..a23a817897757 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.de.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.de.xlf @@ -1022,11 +1022,6 @@ Das Runtime-Marshalling muss in diesem Projekt deaktiviert werden, indem „System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute“ auf die Assembly angewendet wird, um das Marshalling dieses Typs zu ermöglichen. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Ein abstrakter Typ, der von \"SafeHandle\" abgeleitet wird, kann nicht als Verweis gemarshallt werden. Der angegebene Typ muss ein konkretes Element sein. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. Die Größe des Parameters "{0}", der an den Aufgerufenen gemarshallt wird, muss definiert werden, wenn die Methode aufgerufen wird. Der Count-Parameter "{1}" ist jedoch ein "Out"-Parameter. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.es.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.es.xlf index f0e4701f345cc..7d4da3d239110 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.es.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.es.xlf @@ -1022,11 +1022,6 @@ La serialización en tiempo de ejecución debe deshabilitarse en este proyecto aplicando \"System.Runtime.CompilerServices.DisableRuntimeMars contosoingAttribute\" al ensamblado para habilitar la serialización de este tipo. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Un tipo abstracto derivado de “SafeHandle” no se puede serializar por referencia. El tipo proporcionado debe ser concreto. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. El tamaño del parámetro "{0}" que se serializa al destinatario debe definirse cuando se llama al método, pero el parámetro de recuento "{1}" es un parámetro "out". diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.fr.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.fr.xlf index 228abb0f43b9c..467413d83f430 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.fr.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.fr.xlf @@ -1022,11 +1022,6 @@ Le marshaling du runtime doit être désactivé dans ce projet en appliquant « System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute » à l’assembly pour activer le marshaling de ce type. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Un type abstrait dérivé de « SafeHandle » ne peut pas être marshalé par référence. Le type fourni doit être concret. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. La taille du paramètre '{0}' qui est marshalé à l'appelé doit être définie lorsque la méthode est appelée, mais le paramètre count '{1}' est un paramètre 'out'. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.it.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.it.xlf index 58c83094b063b..7af807ca8b6f6 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.it.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.it.xlf @@ -1022,11 +1022,6 @@ Il marshalling di runtime in questo progetto deve essere disabilitato applicando 'System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute' all'assembly per abilitare il marshalling di questo tipo. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Non è possibile effettuare il marshalling per riferimento di un tipo astratto derivato da 'SafeHandle'. Il tipo specificato deve essere concreto. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. Le dimensioni del parametro '{0}' di cui viene eseguito il marshalling al destinatario della chiamata devono essere definite quando viene chiamato il metodo, ma il parametro conteggio '{1}' è un parametro 'out'. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ja.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ja.xlf index 331eb28eaa414..900871e573895 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ja.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ja.xlf @@ -1022,11 +1022,6 @@ このプロジェクトでは、アセンブリに 'System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute' を適用してランタイム マーシャリングを無効にし、この型のマーシャリングを有効にする必要があります。 - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - 'SafeHandle' から派生した抽象型は、参照でマーシャリングできません。指定される型は具象型である必要があります。 - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. 呼び出し先にマーシャリングされるパラメーター '{0}' のサイズは、メソッドが呼び出されたときに定義する必要がありますが、count パラメーター '{1}' は 'out' パラメーターです。 diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ko.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ko.xlf index aedf84c829c06..c2061f1c47ed0 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ko.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ko.xlf @@ -1022,11 +1022,6 @@ 이 형식의 마샬링을 활성화하려면 어셈블리에 'System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute'를 적용하여 이 프로젝트에서 런타임 마샬링을 비활성화해야 합니다. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - 'SafeHandle'에서 파생된 추상 형식은 참조로 마샬링할 수 없습니다. 제공된 형식은 구체적이어야 합니다. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. 메서드를 호출할 때 호출 수신자로 마샬링되는 매개 변수 '{0}'의 크기를 정의해야 하지만 count 매개 변수 '{1}'은(는) 'out' 매개 변수입니다. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pl.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pl.xlf index f051d95f3b9c9..4a5bed01000cb 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pl.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pl.xlf @@ -1022,11 +1022,6 @@ Marshalling środowiska uruchomieniowego musi być wyłączony w tym projekcie przez zastosowanie do zestawu atrybutu „System.Runtime.InteropServices.DisableRuntimeMarshallingAttribute”, aby umożliwić marshalling tego typu. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Typ abstrakcyjny pochodzący od elementu „SafeHandle” nie może być skierowany przez odwołanie. Podany typ musi być konkretny. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. Rozmiar parametru „{0}”, który jest kierowany do obiektu wywołującego, musi być zdefiniowany podczas wywoływania metody, ale parametr ILE.LICZB „{1}” jest parametrem „out”. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pt-BR.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pt-BR.xlf index c1bc60315bc05..a2dcb00fc8aa2 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pt-BR.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.pt-BR.xlf @@ -1022,11 +1022,6 @@ O marshalling de tempo de execução deve ser desabilitado neste projeto aplicando o 'System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute' ao assembly para habilitar o marshalling desse tipo. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Um tipo abstrato derivado de 'SafeHandle' não pode ser marshalled por referência. O tipo fornecido deve ser concreto. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. O tamanho do parâmetro '{0}' que é empacotado para o receptor deve ser definido quando o método é chamado, mas o parâmetro de contagem '{1}' é um parâmetro 'out'. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ru.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ru.xlf index 891ef9d077eb6..9631d6c981aac 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ru.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.ru.xlf @@ -1022,11 +1022,6 @@ В этом проекте следует отключить маршализацию среды выполнения путем применения к сборке атрибута \"System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute\" для включения маршализации этого типа. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - Абстрактный тип, производный от \"SafeHandle\", нельзя маршализировать по ссылке. Указанный тип должен быть конкретным. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. При вызове метода должен быть определен размер параметра "{0}", который был маршалирован вызываемому абоненту, но исчисляемый параметр "{1}" является выходным. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.tr.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.tr.xlf index 6748b1305030b..06f7c1279e14a 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.tr.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.tr.xlf @@ -1022,11 +1022,6 @@ Bu türü sıralamayı etkinleştirmek için derlemeye 'System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute' uygulanarak bu projede çalışma zamanı sıralaması devre dışı bırakılmalıdır. - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - 'SafeHandle' özelliğinden türetilen soyut türler, başvuruya göre sıralanamaz. Sağlanan tür somut olmalıdır. - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. Aramanın alıcısına hazırlanan '{0}' parametresinin boyutu yöntem çağrıldığında tanımlanmalıdır ancak '{1}' sayı parametresi bir ‘çıkış’ parametresidir. diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hans.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hans.xlf index de0d085a227a7..9cf9ccbc906f5 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hans.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hans.xlf @@ -1022,11 +1022,6 @@ 必须通过将 \"System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute\" 应用到程序集来在此项目中禁用运行时封送,以启用此类型的封送处理。 - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - 无法通过引用封送派生自 “SafeHandle” 的抽象类型。提供的类型必须是具体的。 - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. 调用方法时,必须定义封送给被调用方的参数“{0}”的大小,但计数参数“{1}”是一个 "out" 参数。 diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hant.xlf b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hant.xlf index 408df3131a3be..08a0d9ac8eb54 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hant.xlf +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/Resources/xlf/Strings.zh-Hant.xlf @@ -1022,11 +1022,6 @@ 必須將 'System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute' 套用到組件,以停用此專案中的執行階段封送處理,以啟用此類型的封送處理。 - - An abstract type derived from 'SafeHandle' cannot be marshalled by reference. The provided type must be concrete. - 衍生自 'SafeHandle' 的抽象類型無法依參考排列。提供的類型必須是實體。 - - The size of parameter '{0}' that is marshalled to the callee must be defined when the method is called, but count parameter '{1}' is an 'out' parameter. 呼叫方法時,必須定義封送處理給被呼叫者的參數 '{0}' 的大小,但 count 參數 '{1}' 是 'out' 參數。 diff --git a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs index 6b3bd18466497..b3fdc79bdec95 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs @@ -313,6 +313,20 @@ private static (MemberDeclarationSyntax, ImmutableArray) Generat return (PrintForwarderStub(pinvokeStub.StubMethodSyntaxTemplate, explicitForwarding: true, pinvokeStub, diagnostics), pinvokeStub.Diagnostics.Array.AddRange(diagnostics.Diagnostics)); } + bool supportsTargetFramework = !pinvokeStub.LibraryImportData.SetLastError + || options.GenerateForwarders + || (pinvokeStub.GeneratorFactoryKey.Key.TargetFramework == TargetFramework.Net + && pinvokeStub.GeneratorFactoryKey.Key.Version.Major >= 6); + + foreach (TypePositionInfo typeInfo in pinvokeStub.SignatureContext.ElementTypeInformation) + { + if (typeInfo.MarshallingAttributeInfo is MissingSupportMarshallingInfo) + { + supportsTargetFramework = false; + break; + } + } + // Generate stub code var stubGenerator = new PInvokeStubCodeGenerator( pinvokeStub.GeneratorFactoryKey.Key.TargetFramework, @@ -325,9 +339,9 @@ private static (MemberDeclarationSyntax, ImmutableArray) Generat // Check if the generator should produce a forwarder stub - regular DllImport. // This is done if the signature is blittable or the target framework is not supported. if (stubGenerator.StubIsBasicForwarder - || !stubGenerator.SupportsTargetFramework) + || !supportsTargetFramework) { - return (PrintForwarderStub(pinvokeStub.StubMethodSyntaxTemplate, !stubGenerator.SupportsTargetFramework, pinvokeStub, diagnostics), pinvokeStub.Diagnostics.Array.AddRange(diagnostics.Diagnostics)); + return (PrintForwarderStub(pinvokeStub.StubMethodSyntaxTemplate, !supportsTargetFramework, pinvokeStub, diagnostics), pinvokeStub.Diagnostics.Array.AddRange(diagnostics.Diagnostics)); } ImmutableArray forwardedAttributes = pinvokeStub.ForwardedAttributes.Array; diff --git a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs index d07d101732b04..44e316c419ff2 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs @@ -48,17 +48,20 @@ internal static class LibraryImportGeneratorHelpers InteropGenerationOptions interopGenerationOptions = new(options.UseMarshalType); generatorFactory = new MarshalAsMarshallingGeneratorFactory(interopGenerationOptions, generatorFactory); - IMarshallingGeneratorFactory elementFactory = new AttributedMarshallingModelGeneratorFactory( - // Since the char type in an array will not be part of the P/Invoke signature, we can - // use the regular blittable marshaller in all cases. - new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: true, TypeNames.LibraryImportAttribute_ShortName), - new AttributedMarshallingModelOptions(runtimeMarshallingDisabled, MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); - // We don't need to include the later generator factories for collection elements - // as the later generator factories only apply to parameters. - generatorFactory = new AttributedMarshallingModelGeneratorFactory( - generatorFactory, - elementFactory, - new AttributedMarshallingModelOptions(runtimeMarshallingDisabled, MarshalMode.ManagedToUnmanagedIn, MarshalMode.ManagedToUnmanagedRef, MarshalMode.ManagedToUnmanagedOut)); + if (env.TargetFramework == TargetFramework.Net || env.TargetFrameworkVersion.Major >= 7) + { + IMarshallingGeneratorFactory elementFactory = new AttributedMarshallingModelGeneratorFactory( + // Since the char type in an array will not be part of the P/Invoke signature, we can + // use the regular blittable marshaller in all cases. + new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: true, TypeNames.LibraryImportAttribute_ShortName), + new AttributedMarshallingModelOptions(runtimeMarshallingDisabled, MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); + // We don't need to include the later generator factories for collection elements + // as the later generator factories only apply to parameters. + generatorFactory = new AttributedMarshallingModelGeneratorFactory( + generatorFactory, + elementFactory, + new AttributedMarshallingModelOptions(runtimeMarshallingDisabled, MarshalMode.ManagedToUnmanagedIn, MarshalMode.ManagedToUnmanagedRef, MarshalMode.ManagedToUnmanagedOut)); + } generatorFactory = new ByValueContentsMarshalKindValidator(generatorFactory); } diff --git a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/PInvokeStubCodeGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/PInvokeStubCodeGenerator.cs index 2a1ac3921188c..ec9283cc46598 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/PInvokeStubCodeGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/PInvokeStubCodeGenerator.cs @@ -28,8 +28,6 @@ namespace Microsoft.Interop /// internal sealed class PInvokeStubCodeGenerator { - public bool SupportsTargetFramework { get; } - public bool StubIsBasicForwarder { get; } /// @@ -57,18 +55,6 @@ public PInvokeStubCodeGenerator( { _setLastError = setLastError; - // Support for SetLastError logic requires .NET 6+. Initialize the - // supports target framework value with this value. - if (_setLastError) - { - SupportsTargetFramework = targetFramework == TargetFramework.Net - && targetFrameworkVersion.Major >= 6; - } - else - { - SupportsTargetFramework = true; - } - _context = new ManagedToNativeStubCodeContext(targetFramework, targetFrameworkVersion, ReturnIdentifier, ReturnIdentifier); _marshallers = BoundGenerators.Create(argTypes, generatorFactory, _context, new Forwarder(), out var bindingDiagnostics); @@ -84,17 +70,13 @@ public PInvokeStubCodeGenerator( foreach (BoundGenerator generator in _marshallers.SignatureMarshallers) { - // Check if marshalling info and generator support the current target framework. - SupportsTargetFramework &= generator.TypeInfo.MarshallingAttributeInfo is not MissingSupportMarshallingInfo - && generator.Generator.IsSupported(targetFramework, targetFrameworkVersion); - // Check if generator is either blittable or just a forwarder. noMarshallingNeeded &= generator is { Generator: BlittableMarshaller, TypeInfo.IsByRef: false } or { Generator: Forwarder }; } StubIsBasicForwarder = !setLastError - && _marshallers.ManagedNativeSameReturn // If the managed return has native return position, then it's the return for both. + && _marshallers.ManagedNativeSameReturn && noMarshallingNeeded; } diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BlittableMarshaller.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BlittableMarshaller.cs index ef2542dd87bc8..76577d497cb82 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BlittableMarshaller.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BlittableMarshaller.cs @@ -11,8 +11,6 @@ namespace Microsoft.Interop { public sealed class BlittableMarshaller : IMarshallingGenerator { - public bool IsSupported(TargetFramework target, Version version) => true; - public ManagedTypeInfo AsNativeType(TypePositionInfo info) { return info.ManagedType; diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BoolMarshaller.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BoolMarshaller.cs index a86df409e84a7..dbb1b3ee08c91 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BoolMarshaller.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/BoolMarshaller.cs @@ -26,8 +26,6 @@ protected BoolMarshallerBase(ManagedTypeInfo nativeType, int trueValue, int fals _compareToTrue = compareToTrue; } - public bool IsSupported(TargetFramework target, Version version) => true; - public ManagedTypeInfo AsNativeType(TypePositionInfo info) { Debug.Assert(info.ManagedType is SpecialTypeInfo(_, _, SpecialType.System_Boolean)); diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CharMarshaller.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CharMarshaller.cs index 3357dc86fa333..e02bf7826a85d 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CharMarshaller.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CharMarshaller.cs @@ -15,12 +15,6 @@ public sealed class Utf16CharMarshaller : IMarshallingGenerator { private static readonly ManagedTypeInfo s_nativeType = new SpecialTypeInfo("ushort", "ushort", SpecialType.System_UInt16); - public Utf16CharMarshaller() - { - } - - public bool IsSupported(TargetFramework target, Version version) => true; - public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) { if (IsPinningPathSupported(info, context)) diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CustomTypeMarshallingGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CustomTypeMarshallingGenerator.cs index 30f333d59540e..9c65fdc5e7c50 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CustomTypeMarshallingGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/CustomTypeMarshallingGenerator.cs @@ -23,11 +23,6 @@ public CustomTypeMarshallingGenerator(ICustomTypeMarshallingStrategy nativeTypeM _isPinned = isPinned; } - public bool IsSupported(TargetFramework target, Version version) - { - return target is TargetFramework.Net && version.Major >= 6; - } - public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) { return info.IsByRef ? ValueBoundaryBehavior.AddressOfNativeIdentifier : ValueBoundaryBehavior.NativeIdentifier; diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/DelegateMarshaller.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/DelegateMarshaller.cs index 4dddd38948c6d..5f52ad6e4e730 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/DelegateMarshaller.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/DelegateMarshaller.cs @@ -12,8 +12,6 @@ namespace Microsoft.Interop { public sealed class DelegateMarshaller : IMarshallingGenerator { - public bool IsSupported(TargetFramework target, Version version) => true; - public ManagedTypeInfo AsNativeType(TypePositionInfo info) { return SpecialTypeInfo.IntPtr; diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/Forwarder.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/Forwarder.cs index 79c2fd999f00a..9679a2e7449c9 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/Forwarder.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/Forwarder.cs @@ -9,8 +9,6 @@ namespace Microsoft.Interop { public sealed class Forwarder : IMarshallingGenerator { - public bool IsSupported(TargetFramework target, Version version) => true; - public ManagedTypeInfo AsNativeType(TypePositionInfo info) { return info.ManagedType; diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshalAsMarshallingGeneratorFactory.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshalAsMarshallingGeneratorFactory.cs index 1aa0d96779f9c..a79f14c02ed12 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshalAsMarshallingGeneratorFactory.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshalAsMarshallingGeneratorFactory.cs @@ -18,7 +18,6 @@ public sealed class MarshalAsMarshallingGeneratorFactory : IMarshallingGenerator private static readonly Forwarder s_forwarder = new(); private static readonly BlittableMarshaller s_blittable = new(); private static readonly DelegateMarshaller s_delegate = new(); - private static readonly SafeHandleMarshaller s_safeHandle = new(); private InteropGenerationOptions Options { get; } private IMarshallingGeneratorFactory InnerFactory { get; } @@ -90,21 +89,6 @@ public ResolvedGenerator Create( case { ManagedType: DelegateTypeInfo, MarshallingAttributeInfo: NoMarshallingInfo or MarshalAsInfo(UnmanagedType.FunctionPtr, _) }: return ResolvedGenerator.Resolved(s_delegate); - // SafeHandle types with source-generator-emitted marshalling - case { MarshallingAttributeInfo: SafeHandleMarshallingInfo(_, bool isAbstract) }: - if (!context.AdditionalTemporaryStateLivesAcrossStages || context.Direction != MarshalDirection.ManagedToUnmanaged) - { - return ResolvedGenerator.NotSupported(new(info, context)); - } - if (info.IsByRef && isAbstract) - { - return ResolvedGenerator.NotSupported(new(info, context) - { - NotSupportedDetails = SR.SafeHandleByRefMustBeConcrete - }); - } - return ResolvedGenerator.Resolved(s_safeHandle); - // void case { ManagedType: SpecialTypeInfo { SpecialType: SpecialType.System_Void } }: return ResolvedGenerator.Resolved(s_forwarder); diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshallingGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshallingGenerator.cs index 598ba38002894..d320624651f00 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshallingGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshallingGenerator.cs @@ -94,14 +94,6 @@ public enum ByValueMarshalKindSupport /// public interface IMarshallingGenerator { - /// - /// Determine if the generator is supported for the supplied version of the framework. - /// - /// The framework to target. - /// The version of the framework. - /// True if the marshaller is supported, otherwise false. - bool IsSupported(TargetFramework target, Version version); - /// /// Get the native type syntax for /// diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/SafeHandleMarshaller.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/SafeHandleMarshaller.cs deleted file mode 100644 index 3f813787e61e5..0000000000000 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/SafeHandleMarshaller.cs +++ /dev/null @@ -1,192 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory; -using static Microsoft.Interop.SyntaxFactoryExtensions; - -namespace Microsoft.Interop -{ - public sealed class SafeHandleMarshaller : IMarshallingGenerator - { - public bool IsSupported(TargetFramework target, Version version) - { - return target is TargetFramework.Net && version.Major >= 6; - } - - public ManagedTypeInfo AsNativeType(TypePositionInfo info) - { - return SpecialTypeInfo.IntPtr; - } - - public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) - { - return info.IsByRef ? SignatureBehavior.PointerToNativeType : SignatureBehavior.NativeType; - } - - public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) - { - return info.IsByRef ? ValueBoundaryBehavior.AddressOfNativeIdentifier : ValueBoundaryBehavior.NativeIdentifier; - } - - public IEnumerable Generate(TypePositionInfo info, StubCodeContext context) - { - // The high level logic (note that the parameter may be in, out or both): - // 1) If this is an input parameter we need to AddRef the SafeHandle. - // 2) If this is an output parameter we need to preallocate a SafeHandle to wrap the new native handle value. We - // must allocate this before the native call to avoid a failure point when we already have a native resource - // allocated. We must allocate a new SafeHandle even if we have one on input since both input and output native - // handles need to be tracked and released by a SafeHandle. - // 3) Initialize a local IntPtr that will be passed to the native call. If we have an input SafeHandle the value - // comes from there otherwise we get it from the new SafeHandle (which is guaranteed to be initialized to an - // invalid handle value). - // 4) If this is a out parameter we also store the original handle value (that we just computed above) in a local - // variable. - // 5) If we successfully AddRef'd the incoming SafeHandle, we need to Release it before we return. - // 6) After the native call, if this is an output parameter and the handle value we passed to native differs from - // the local copy we made then the new handle value is written into the output SafeHandle and that SafeHandle - // is propagated back to the caller. - - (string managedIdentifier, string nativeIdentifier) = context.GetIdentifiers(info); - string addRefdIdentifier = $"{managedIdentifier}__addRefd"; - string newHandleObjectIdentifier = info.IsManagedReturnPosition - ? managedIdentifier - : $"{managedIdentifier}__newHandle"; - string handleValueBackupIdentifier = $"{nativeIdentifier}__original"; - switch (context.CurrentStage) - { - case StubCodeContext.Stage.Setup: - if (!info.IsManagedReturnPosition && info.RefKind != RefKind.Out) - { - yield return LocalDeclarationStatement( - VariableDeclaration( - PredefinedType(Token(SyntaxKind.BoolKeyword)), - SingletonSeparatedList( - VariableDeclarator(addRefdIdentifier) - .WithInitializer(EqualsValueClause(LiteralExpression(SyntaxKind.FalseLiteralExpression)))))); - } - - ExpressionSyntax safeHandleCreationExpression = ((SafeHandleMarshallingInfo)info.MarshallingAttributeInfo).AccessibleDefaultConstructor - ? ObjectCreationExpression(info.ManagedType.Syntax, ArgumentList(), initializer: null) - : CastExpression( - info.ManagedType.Syntax, - MethodInvocation( - TypeSyntaxes.System_Activator, - IdentifierName("CreateInstance"), - Argument(TypeOfExpression(info.ManagedType.Syntax)), - Argument(LiteralExpression(SyntaxKind.TrueLiteralExpression)) - .WithNameColon(NameColon(IdentifierName("nonPublic"))))); - - if (info.IsManagedReturnPosition) - { - yield return AssignmentStatement(IdentifierName(managedIdentifier), safeHandleCreationExpression); - } - else if (info.IsByRef && info.RefKind != RefKind.In) - { - // We create the new handle in the Setup phase - // so we eliminate the possible failure points during unmarshalling, where we would - // leak the handle if we failed to create the handle. - yield return Declare(info.ManagedType.Syntax, newHandleObjectIdentifier, safeHandleCreationExpression); - - if (info.RefKind != RefKind.Out) - { - // IntPtr = newHandleObjectIdentifier.DangerousGetHandle(); - yield return Declare( - AsNativeType(info).Syntax, - handleValueBackupIdentifier, - MethodInvocation( - IdentifierName(newHandleObjectIdentifier), - IdentifierName(nameof(SafeHandle.DangerousGetHandle)))); - } - } - break; - case StubCodeContext.Stage.Marshal: - if (!info.IsManagedReturnPosition && info.RefKind != RefKind.Out) - { - // .DangerousAddRef(ref ); - yield return MethodInvocationStatement( - IdentifierName(managedIdentifier), - IdentifierName(nameof(SafeHandle.DangerousAddRef)), - RefArgument(IdentifierName(addRefdIdentifier))); - - - // = .DangerousGetHandle() - ExpressionSyntax assignHandleToNativeExpression = - AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, - IdentifierName(nativeIdentifier), - MethodInvocation( - IdentifierName(managedIdentifier), - IdentifierName(nameof(SafeHandle.DangerousGetHandle)))); - if (info.IsByRef && info.RefKind != RefKind.In) - { - yield return AssignmentStatement(IdentifierName(handleValueBackupIdentifier), assignHandleToNativeExpression); - } - else - { - yield return ExpressionStatement(assignHandleToNativeExpression); - } - } - break; - case StubCodeContext.Stage.GuaranteedUnmarshal: - StatementSyntax unmarshalStatement = MethodInvocationStatement( - TypeSyntaxes.System_Runtime_InteropServices_Marshal, - IdentifierName("InitHandle"), - Argument(IdentifierName(newHandleObjectIdentifier)), - Argument(IdentifierName(nativeIdentifier))); - - if (info.IsManagedReturnPosition) - { - yield return unmarshalStatement; - } - else if (info.RefKind == RefKind.Out) - { - yield return unmarshalStatement; - yield return AssignmentStatement(IdentifierName(managedIdentifier), IdentifierName(newHandleObjectIdentifier)); - } - else if (info.RefKind == RefKind.Ref) - { - // Decrement refcount on original SafeHandle if we addrefd - yield return IfStatement( - IdentifierName(addRefdIdentifier), - MethodInvocationStatement( - IdentifierName(managedIdentifier), - IdentifierName(nameof(SafeHandle.DangerousRelease)))); - - // Do not unmarshal the handle if the value didn't change. - yield return IfStatement( - BinaryExpression(SyntaxKind.NotEqualsExpression, - IdentifierName(handleValueBackupIdentifier), - IdentifierName(nativeIdentifier)), - Block( - unmarshalStatement, - AssignmentStatement( - IdentifierName(managedIdentifier), - IdentifierName(newHandleObjectIdentifier)))); - } - break; - case StubCodeContext.Stage.CleanupCallerAllocated: - if (!info.IsManagedReturnPosition && (!info.IsByRef || info.RefKind == RefKind.In)) - { - yield return IfStatement( - IdentifierName(addRefdIdentifier), - MethodInvocationStatement( - IdentifierName(managedIdentifier), - IdentifierName(nameof(SafeHandle.DangerousRelease)))); - } - break; - default: - break; - } - } - - public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; - - public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) - => ByValueMarshalKindSupportDescriptor.Default.GetSupport(marshalKind, info, context, out diagnostic); - } -} diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/StaticPinnableManagedValueMarshaller.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/StaticPinnableManagedValueMarshaller.cs index 039d78ed35006..07bb36a2edaba 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/StaticPinnableManagedValueMarshaller.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/StaticPinnableManagedValueMarshaller.cs @@ -21,9 +21,6 @@ public StaticPinnableManagedValueMarshaller(IMarshallingGenerator innerMarshalli _getPinnableReferenceType = getPinnableReferenceType; } - public bool IsSupported(TargetFramework target, Version version) - => _innerMarshallingGenerator.IsSupported(target, version); - public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) { if (IsPinningPathSupported(info, context)) diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/UnmanagedToManagedOwnershipTrackingStrategy.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/UnmanagedToManagedOwnershipTrackingStrategy.cs index ba43659536d52..3b41fa0efbfa6 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/UnmanagedToManagedOwnershipTrackingStrategy.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/UnmanagedToManagedOwnershipTrackingStrategy.cs @@ -178,7 +178,6 @@ IEnumerable GenerateStatementsFromInner(StubCodeContext context public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => _inner.GetNativeSignatureBehavior(info); public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => _inner.GetValueBoundaryBehavior(info, context); - public bool IsSupported(TargetFramework target, Version version) => _inner.IsSupported(target, version); public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) => _inner.SupportsByValueMarshalKind(marshalKind, info, context, out diagnostic); public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _inner.UsesNativeIdentifier(info, context); diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/SafeHandleMarshallingInfoProvider.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/SafeHandleMarshallingInfoProvider.cs index a5c2f2a1f93f9..dd30b31b14ff0 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/SafeHandleMarshallingInfoProvider.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/SafeHandleMarshallingInfoProvider.cs @@ -10,11 +10,6 @@ namespace Microsoft.Interop { - /// - /// The type of the element is a SafeHandle-derived type with no marshalling attributes. - /// - public sealed record SafeHandleMarshallingInfo(bool AccessibleDefaultConstructor, bool IsAbstract) : MarshallingInfo; - /// /// This class supports generating marshalling info for SafeHandle-derived types. /// @@ -52,7 +47,6 @@ public bool CanProvideMarshallingInfoForType(ITypeSymbol type) public MarshallingInfo GetMarshallingInfo(ITypeSymbol type, int indirectionDepth, UseSiteAttributeProvider useSiteAttributes, GetMarshallingInfoCallback marshallingInfoCallback) { bool hasDefaultConstructor = false; - bool hasAccessibleDefaultConstructor = false; if (type is INamedTypeSymbol named && !named.IsAbstract && named.InstanceConstructors.Length > 0) { foreach (IMethodSymbol ctor in named.InstanceConstructors) @@ -60,18 +54,16 @@ public MarshallingInfo GetMarshallingInfo(ITypeSymbol type, int indirectionDepth if (ctor.Parameters.Length == 0) { hasDefaultConstructor = ctor.DeclaredAccessibility == Accessibility.Public; - hasAccessibleDefaultConstructor = _compilation.IsSymbolAccessibleWithin(ctor, _containingScope); break; } } } - // If we don't have the SafeHandleMarshaller type, then we'll use the built-in support in the generator. - // This support will be removed when dotnet/runtime doesn't build any packages for platforms below .NET 8 - // as the downlevel support is dotnet/runtime specific. + // If we don't have the SafeHandleMarshaller type, then we'll return a MissingSupportMarshallingInfo + // indicating that we don't support marshalling SafeHandles with source-generated marshalling. if (_safeHandleMarshallerType is null) { - return new SafeHandleMarshallingInfo(hasAccessibleDefaultConstructor, type.IsAbstract); + return new MissingSupportMarshallingInfo(); } INamedTypeSymbol entryPointType = _safeHandleMarshallerType.Construct(type); diff --git a/src/libraries/System.Speech/src/Recognition/SrgsGrammar/SrgsRule.cs b/src/libraries/System.Speech/src/Recognition/SrgsGrammar/SrgsRule.cs index 7709a8f0a4bc5..030fe78a4780b 100644 --- a/src/libraries/System.Speech/src/Recognition/SrgsGrammar/SrgsRule.cs +++ b/src/libraries/System.Speech/src/Recognition/SrgsGrammar/SrgsRule.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Buffers; using System.Collections.ObjectModel; using System.Diagnostics; using System.Speech.Internal; @@ -14,6 +15,8 @@ namespace System.Speech.Recognition.SrgsGrammar [DebuggerTypeProxy(typeof(SrgsRuleDebugDisplay))] public class SrgsRule : IRule { + private static readonly SearchValues s_invalidChars = SearchValues.Create("?*+|()^$/;.=<>[]{}\\ \t\r\n"); + #region Constructors private SrgsRule() { @@ -383,7 +386,7 @@ private void ValidateIdentifier(string s) XmlParser.ThrowSrgsException(SRID.ConstructorNotAllowed, _id); } - if (s != null && (s.IndexOfAny(s_invalidChars) >= 0 || s.Length == 0)) + if (s != null && (s.Length == 0 || s.AsSpan().ContainsAny(s_invalidChars))) { XmlParser.ThrowSrgsException(SRID.InvalidMethodName); } @@ -416,7 +419,6 @@ private void ValidateIdentifier(string s) private string _onError; private string _onRecognition; - private static readonly char[] s_invalidChars = new char[] { '?', '*', '+', '|', '(', ')', '^', '$', '/', ';', '.', '=', '<', '>', '[', ']', '{', '}', '\\', ' ', '\t', '\r', '\n' }; #endregion diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs b/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs index 87e34f4496986..5f9a684701516 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs @@ -93,11 +93,22 @@ public static void ReadWithVerify(this ref Utf8JsonReader reader) /// public static string Utf8GetString(ReadOnlySpan bytes) { - return Encoding.UTF8.GetString(bytes -#if !NETCOREAPP - .ToArray() +#if NETCOREAPP + return Encoding.UTF8.GetString(bytes); +#else + if (bytes.Length == 0) + { + return string.Empty; + } + + unsafe + { + fixed (byte* bytesPtr = bytes) + { + return Encoding.UTF8.GetString(bytesPtr, bytes.Length); + } + } #endif - ); } /// diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonNode.To.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonNode.To.cs index 838b05423912f..0304718c81aa2 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonNode.To.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonNode.To.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Threading; + namespace System.Text.Json.Nodes { public abstract partial class JsonNode @@ -12,8 +14,25 @@ public abstract partial class JsonNode /// JSON representation of current instance. public string ToJsonString(JsonSerializerOptions? options = null) { - using PooledByteBufferWriter output = WriteToPooledBuffer(options, options?.GetWriterOptions() ?? default); - return JsonHelpers.Utf8GetString(output.WrittenMemory.Span); + JsonWriterOptions writerOptions = default; + int defaultBufferSize = JsonSerializerOptions.BufferSizeDefault; + if (options is not null) + { + writerOptions = options.GetWriterOptions(); + defaultBufferSize = options.DefaultBufferSize; + } + + Utf8JsonWriter writer = Utf8JsonWriterCache.RentWriterAndBuffer(writerOptions, defaultBufferSize, out PooledByteBufferWriter output); + try + { + WriteTo(writer, options); + writer.Flush(); + return JsonHelpers.Utf8GetString(output.WrittenMemory.Span); + } + finally + { + Utf8JsonWriterCache.ReturnWriterAndBuffer(writer, output); + } } /// @@ -37,8 +56,17 @@ public override string ToString() } } - using PooledByteBufferWriter output = WriteToPooledBuffer(writerOptions: new JsonWriterOptions { Indented = true }); - return JsonHelpers.Utf8GetString(output.WrittenMemory.Span); + Utf8JsonWriter writer = Utf8JsonWriterCache.RentWriterAndBuffer(new JsonWriterOptions { Indented = true }, JsonSerializerOptions.BufferSizeDefault, out PooledByteBufferWriter output); + try + { + WriteTo(writer); + writer.Flush(); + return JsonHelpers.Utf8GetString(output.WrittenMemory.Span); + } + finally + { + Utf8JsonWriterCache.ReturnWriterAndBuffer(writer, output); + } } /// @@ -50,19 +78,5 @@ public override string ToString() /// /// Options to control the serialization behavior. public abstract void WriteTo(Utf8JsonWriter writer, JsonSerializerOptions? options = null); - - /// - /// Creates a pooled buffer writer instance and serializes all contents to it. - /// - internal PooledByteBufferWriter WriteToPooledBuffer( - JsonSerializerOptions? options = null, - JsonWriterOptions writerOptions = default, - int bufferSize = JsonSerializerOptions.BufferSizeDefault) - { - var bufferWriter = new PooledByteBufferWriter(bufferSize); - using var writer = new Utf8JsonWriter(bufferWriter, writerOptions); - WriteTo(writer, options); - return bufferWriter; - } } } diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonValueOfT.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonValueOfT.cs index 0be2c9517a376..86db69d82cd74 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonValueOfT.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Nodes/JsonValueOfT.cs @@ -72,8 +72,17 @@ internal sealed override JsonValueKind GetValueKindCore() return element.ValueKind; } - using PooledByteBufferWriter output = WriteToPooledBuffer(); - return JsonElement.ParseValue(output.WrittenMemory.Span, options: default).ValueKind; + Utf8JsonWriter writer = Utf8JsonWriterCache.RentWriterAndBuffer(default, JsonSerializerOptions.BufferSizeDefault, out PooledByteBufferWriter output); + try + { + WriteTo(writer); + writer.Flush(); + return JsonElement.ParseValue(output.WrittenMemory.Span, options: default).ValueKind; + } + finally + { + Utf8JsonWriterCache.ReturnWriterAndBuffer(writer, output); + } } internal sealed override bool DeepEqualsCore(JsonNode? otherNode) @@ -107,9 +116,21 @@ internal sealed override bool DeepEqualsCore(JsonNode? otherNode) } } - using PooledByteBufferWriter thisOutput = WriteToPooledBuffer(); - using PooledByteBufferWriter otherOutput = otherNode.WriteToPooledBuffer(); + using PooledByteBufferWriter thisOutput = WriteToPooledBuffer(this); + using PooledByteBufferWriter otherOutput = WriteToPooledBuffer(otherNode); return thisOutput.WrittenMemory.Span.SequenceEqual(otherOutput.WrittenMemory.Span); + + static PooledByteBufferWriter WriteToPooledBuffer( + JsonNode node, + JsonSerializerOptions? options = null, + JsonWriterOptions writerOptions = default, + int bufferSize = JsonSerializerOptions.BufferSizeDefault) + { + var bufferWriter = new PooledByteBufferWriter(bufferSize); + using var writer = new Utf8JsonWriter(bufferWriter, writerOptions); + node.WriteTo(writer, options); + return bufferWriter; + } } internal TypeToConvert ConvertJsonElement() diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriterCache.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriterCache.cs index bff98e9b81649..b0d9528031286 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriterCache.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriterCache.cs @@ -13,7 +13,10 @@ internal static class Utf8JsonWriterCache [ThreadStatic] private static ThreadLocalState? t_threadLocalState; - public static Utf8JsonWriter RentWriterAndBuffer(JsonSerializerOptions options, out PooledByteBufferWriter bufferWriter) + public static Utf8JsonWriter RentWriterAndBuffer(JsonSerializerOptions options, out PooledByteBufferWriter bufferWriter) => + RentWriterAndBuffer(options.GetWriterOptions(), options.DefaultBufferSize, out bufferWriter); + + public static Utf8JsonWriter RentWriterAndBuffer(JsonWriterOptions options, int defaultBufferSize, out PooledByteBufferWriter bufferWriter) { ThreadLocalState state = t_threadLocalState ??= new(); Utf8JsonWriter writer; @@ -24,14 +27,14 @@ public static Utf8JsonWriter RentWriterAndBuffer(JsonSerializerOptions options, bufferWriter = state.BufferWriter; writer = state.Writer; - bufferWriter.InitializeEmptyInstance(options.DefaultBufferSize); - writer.Reset(bufferWriter, options.GetWriterOptions()); + bufferWriter.InitializeEmptyInstance(defaultBufferSize); + writer.Reset(bufferWriter, options); } else { // We're in a recursive JsonSerializer call -- return fresh instances. - bufferWriter = new PooledByteBufferWriter(options.DefaultBufferSize); - writer = new Utf8JsonWriter(bufferWriter, options.GetWriterOptions()); + bufferWriter = new PooledByteBufferWriter(defaultBufferSize); + writer = new Utf8JsonWriter(bufferWriter, options); } return writer; diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 5b1d2ca95cd27..0afc0908b70c4 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -341,7 +341,6 @@ -