[xaprepare] Move Configuration.OperatingSystem.props JDK values to JdkInfo.props#11956
Merged
Merged
Conversation
…kInfo.props The last remaining xaprepare generator (Step_GenerateFiles.Get_Configuration_OperatingSystem_props) substituted six JDK-related placeholders. Since Java.Interop is now in-tree (#11744), its JdkInfo MSBuild task can supply those values directly. * Configuration.props now imports external\Java.Interop\bin\Build$(Configuration)\JdkInfo.props after Configuration.OperatingSystem.props, so downstream projects pick up JavaSdkDirectory, JavaPath, JavaCPath, and JarPath from Java.Interop. * JavaSdkVersion and MinimumSupportedJavaSdkVersion (which JdkInfo.props does not provide) are set directly in Configuration.props alongside the existing MicrosoftOpenJDKVersion property. * The six JDK placeholders (@JAVA_SDK_VERSION@, @MIN_SUPPORTED_JDK_VERSION@, @JavaSdkDirectory@, @javac@, @java@, @jar@) are removed from Configuration.OperatingSystem.props.in and from the Step_GenerateFiles replacements dictionary. * The now-dead Configurables.MicrosoftOpenJDKVersion (const + Version) and MicrosoftMinOpenJDKVersion fields are removed. Grep confirmed zero remaining consumers under build-tools/xaprepare after removing Step_GenerateFiles references. The NDK/OS-info half of the generator (HostOsName, HostOsFlavor, HostOsRelease, HostCpuCount, HostBits, NdkLlvmTag) is intentionally left in place for a follow-up slice. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Moves JDK-related MSBuild properties out of xaprepare’s generated Configuration.OperatingSystem.props and into the Java.Interop-generated JdkInfo.props, reducing xaprepare’s responsibility to OS/NDK-related values while keeping the overall Configuration.props import chain intact.
Changes:
- Import
external/Java.Interop/bin/Build$(Configuration)/JdkInfo.propsfromConfiguration.props(when present) and define JDK policy constants (JavaSdkVersion,MinimumSupportedJavaSdkVersion) directly inConfiguration.props. - Remove JDK placeholders and replacements from the xaprepare
Configuration.OperatingSystem.propstemplate and generator. - Delete now-dead Microsoft OpenJDK version constants from xaprepare configurables.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
Configuration.props |
Imports Java.Interop-generated JdkInfo.props and defines JavaSdkVersion / minimum supported JDK policy. |
build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs |
Stops emitting JDK-related placeholder replacements for the OS props generator. |
build-tools/xaprepare/xaprepare/Resources/Configuration.OperatingSystem.props.in |
Removes JDK-related properties from the generated OS props template. |
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs |
Removes unused JDK version/minimum constants from xaprepare defaults. |
Rubberduck review flagged that removing the six JDK properties from
Configuration.OperatingSystem.props leaves JavaPath, JavaCPath, and JarPath
undefined for consumers that read them directly (e.g.
src/Mono.Android/Mono.Android.targets, build-tools/scripts/JavaCallableWrappers.targets,
src/java-runtime/java-runtime.targets) between the time xaprepare runs and
when PrepareJavaInterop generates JdkInfo.props, or in downstream builds that
skip full Prepare. Pre-slice xaprepare's OS.cs computed these as
$(JavaSdkDirectory)\bin\{tool}{.exe on Windows}; mirror that logic in
Configuration.props so the properties are always defined. JdkInfo.props still
supplies its own conditional values that win when it's imported.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
simonrozsival
approved these changes
Jul 2, 2026
simonrozsival
pushed a commit
that referenced
this pull request
Jul 3, 2026
…xaprepare project (#11959) Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR: 1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`). 2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios. 3. Deletes the whole `build-tools/xaprepare/` project. 4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end. ## `Configuration.OperatingSystem.props.in` placeholder audit | Placeholder | Consumers outside the `.in` file | Action | | --- | --- | --- | | `HostOsName` | none | drop | | `HostOsFlavor` | none | drop | | `HostOsRelease` | none | drop | | `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop | | `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop | | `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop | ## `$(MakeConcurrency)` audit The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property. **Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`. ## xaprepare integration audit (grep-confirmed, patched here) | Location | Change | | --- | --- | | `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files | | `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment | | `.gitignore` | dropped `Configuration.OperatingSystem.props` | | `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` | | `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target | | `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` | | `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` | | `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` | | `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` | | `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` | | `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` | | `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment | | `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment | | `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene | | `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` | | `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` | | `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet | **Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology): - `.github/skills/update-tpn/SKILL.md` - `src/AndroidBuildConfig/AndroidBuildConfig.csproj` - `src/androidsdk/androidsdk.targets` - `src/native/cmake-config/cmake-config.csproj` - `src/workloads/workloads.csproj` ## Verification - `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`. - `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change). - Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean. - Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above. ## Diff stat 102 files changed, 25 insertions(+), 7891 deletions(-). ## Precedent chain Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
JDK-related properties are now sourced from Java.Interop's
JdkInfoMSBuild task (in-tree since #11744) plusConfiguration.props. TheConfiguration.OperatingSystem.propsgenerator in xaprepare no longer writes any JDK values — only the NDK/OS-info half remains, which will be removed in a follow-up slice.Changes
Configuration.propsexternal\Java.Interop\bin\Build$(Configuration)\JdkInfo.propsimmediately afterConfiguration.OperatingSystem.props. Java.Interop suppliesJavaSdkDirectory,JavaPath,JavaCPath,JarPath(plus additional JDK metadata) once Prepare has run.JavaSdkVersion(=$(MicrosoftOpenJDKVersion)) andMinimumSupportedJavaSdkVersion(=17.0) directly, sinceJdkInfo.propsdoes not emit those two policy constants.JavaPath,JavaCPath,JarPathfallbacks derived from$(JavaSdkDirectory)\bin\{tool}{.exe on Windows}— mirroring what xaprepare'sOS.cscomputed pre-slice. This ensures those properties are always defined for consumers that read them directly (e.g.src/Mono.Android/Mono.Android.targets,build-tools/scripts/JavaCallableWrappers.targets,src/java-runtime/java-runtime.targets,build-tools/create-android-api/create-android-api.csproj) even beforePrepareJavaInterophas generatedJdkInfo.props. WhenJdkInfo.propsis imported, its conditional values win.build-tools/xaprepare/xaprepare/Resources/Configuration.OperatingSystem.props.in— removesJavaSdkVersion,MinimumSupportedJavaSdkVersion,JavaSdkDirectory,JavaCPath,JarPath,JavaPath.build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs— removes the six matching entries from thereplacementsdictionary.build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs— deletes now-deadMicrosoftOpenJDKVersion(const string +Versionfield) andMicrosoftMinOpenJDKVersion. Grep confirms zero remaining consumers underbuild-tools/xaprepare.OS.JavaHome/JavaCPath/JavaPath/JarPathare intentionally left in place —Windows.csstill usesJavaHomefor theJAVA_HOMEenv var. Removing those OS discovery paths is deferred to the next slice.Verification
xaprepare build:
dotnet build build-tools\xaprepare\xaprepare\xaprepare.csproj -c Debug→ 0 warnings, 0 errors.Effective-value verification — three states via a probe project that imports
Configuration.propswithAndroidToolchainDirectory=C:\android-toolchain:Pre-slice equivalent (simulated
Configuration.OperatingSystem.propspresent, noJdkInfo.props):Post-slice, fresh clone (no
Configuration.OperatingSystem.props, noJdkInfo.props— fallbacks fire):Post-slice, post-Prepare (with
JdkInfo.propssupplying real paths):Grep audit under
build-tools/xaprepare/: zero references to@JAVA_SDK_VERSION@,@MIN_SUPPORTED_JDK_VERSION@,@javac@,@java@,@jar@,MicrosoftOpenJDKVersion, orMicrosoftMinOpenJDKVersionremain.@JavaSdkDirectory@still appears inxaprepare.targets/Properties.Defaults.cs.in— that's the unrelated compile-time replacement inProperties.Defaults.cs, intentionally left alone.Cold
-t:Preparewas not run in this environment (no Android toolchain / network); the fallback logic above ensures behavior is well-defined in every state along the Prepare pipeline.File list
Configuration.propsbuild-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csbuild-tools/xaprepare/xaprepare/Resources/Configuration.OperatingSystem.props.inbuild-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.csNet: +10 / −17 (−7 LOC).
Precedent
Continues the incremental xaprepare removal in #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946.