lol

Merge pull request #119444 from lorenzleutgeb/gradle-jdk

gradle: Decouple from JDK 8 and support Java Toolchains

authored by

Kevin Cox and committed by
GitHub
dc447918 706f94d8

+125 -106
+3 -3
pkgs/development/compilers/openjdk/openjfx/11.nix
··· 1 - { stdenv, lib, fetchurl, writeText, gradleGen, pkg-config, perl, cmake 1 + { stdenv, lib, fetchurl, writeText, gradle_4, pkg-config, perl, cmake 2 2 , gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsa-lib, ffmpeg, python2, ruby 3 3 , openjdk11-bootstrap }: 4 4 ··· 7 7 update = ".0.3"; 8 8 build = "1"; 9 9 repover = "${major}${update}+${build}"; 10 - gradle_ = (gradleGen.override { 10 + gradle_ = (gradle_4.override { 11 11 java = openjdk11-bootstrap; 12 - }).gradle_4_10; 12 + }); 13 13 14 14 makePackage = args: stdenv.mkDerivation ({ 15 15 version = "${major}${update}-${build}";
+3 -3
pkgs/development/compilers/openjdk/openjfx/15.nix
··· 1 - { stdenv, lib, fetchFromGitHub, writeText, openjdk11_headless, gradleGen 1 + { stdenv, lib, fetchFromGitHub, writeText, openjdk11_headless, gradle_5 2 2 , pkg-config, perl, cmake, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsa-lib 3 3 , ffmpeg, python3, ruby }: 4 4 ··· 7 7 update = ".0.1"; 8 8 build = "+1"; 9 9 repover = "${major}${update}${build}"; 10 - gradle_ = (gradleGen.override { 10 + gradle_ = (gradle_5.override { 11 11 java = openjdk11_headless; 12 - }).gradle_5_6; 12 + }); 13 13 14 14 makePackage = args: stdenv.mkDerivation ({ 15 15 version = "${major}${update}${build}";
+102 -56
pkgs/development/tools/build-managers/gradle/default.nix
··· 1 - { lib, stdenv, fetchurl, unzip, jdk, java ? jdk, makeWrapper }: 1 + { jdk8, jdk11, jdk17 }: 2 2 3 3 rec { 4 - gradleGen = { version, nativeVersion, sha256 }: stdenv.mkDerivation { 5 - pname = "gradle"; 6 - inherit version; 4 + gen = 7 5 8 - src = fetchurl { 9 - inherit sha256; 10 - url = "https://services.gradle.org/distributions/gradle-${version}-bin.zip"; 11 - }; 6 + { version, nativeVersion, sha256, defaultJava ? jdk8 }: 12 7 13 - dontBuild = true; 8 + { lib, stdenv, fetchurl, makeWrapper, unzip, java ? defaultJava 9 + , javaToolchains ? [ ] }: 14 10 15 - nativeBuildInputs = [ makeWrapper unzip ]; 16 - buildInputs = [ java ]; 11 + stdenv.mkDerivation rec { 12 + pname = "gradle"; 13 + inherit version; 17 14 18 - installPhase = '' 19 - mkdir -pv $out/lib/gradle/ 20 - cp -rv lib/ $out/lib/gradle/ 15 + src = fetchurl { 16 + inherit sha256; 17 + url = 18 + "https://services.gradle.org/distributions/gradle-${version}-bin.zip"; 19 + }; 21 20 22 - gradle_launcher_jar=$(echo $out/lib/gradle/lib/gradle-launcher-*.jar) 23 - test -f $gradle_launcher_jar 24 - makeWrapper ${java}/bin/java $out/bin/gradle \ 25 - --set JAVA_HOME ${java} \ 26 - --add-flags "-classpath $gradle_launcher_jar org.gradle.launcher.GradleMain" 27 - ''; 21 + dontBuild = true; 28 22 29 - fixupPhase = if (!stdenv.isLinux) then ":" else 30 - let arch = if stdenv.is64bit then "amd64" else "i386"; in 31 - '' 32 - mkdir patching 33 - pushd patching 34 - jar xf $out/lib/gradle/lib/native-platform-linux-${arch}-${nativeVersion}.jar 35 - patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64" net/rubygrapefruit/platform/linux-${arch}/libnative-platform.so 36 - jar cf native-platform-linux-${arch}-${nativeVersion}.jar . 37 - mv native-platform-linux-${arch}-${nativeVersion}.jar $out/lib/gradle/lib/ 38 - popd 23 + nativeBuildInputs = [ makeWrapper unzip ]; 24 + buildInputs = [ java ]; 39 25 40 - # The scanner doesn't pick up the runtime dependency in the jar. 41 - # Manually add a reference where it will be found. 42 - mkdir $out/nix-support 43 - echo ${stdenv.cc.cc} > $out/nix-support/manual-runtime-dependencies 44 - ''; 26 + # NOTE: For more information on toolchains, 27 + # see https://docs.gradle.org/current/userguide/toolchains.html 28 + installPhase = with builtins; 29 + let 30 + toolchain = rec { 31 + var = x: "JAVA_TOOLCHAIN_NIX_${toString x}"; 32 + vars = (lib.imap0 (i: x: ("${var i} ${x}")) javaToolchains); 33 + varNames = lib.imap0 (i: x: var i) javaToolchains; 34 + property = " -Porg.gradle.java.installations.fromEnv='${ 35 + concatStringsSep "," varNames 36 + }'"; 37 + }; 38 + vars = concatStringsSep "\n" (map (x: " --set ${x} \\") 39 + ([ "JAVA_HOME ${java}" ] ++ toolchain.vars)); 40 + in '' 41 + mkdir -pv $out/lib/gradle/ 42 + cp -rv lib/ $out/lib/gradle/ 45 43 46 - meta = with lib; { 47 - description = "Enterprise-grade build system"; 48 - longDescription = '' 49 - Gradle is a build system which offers you ease, power and freedom. 50 - You can choose the balance for yourself. It has powerful multi-project 51 - build support. It has a layer on top of Ivy that provides a 52 - build-by-convention integration for Ivy. It gives you always the choice 53 - between the flexibility of Ant and the convenience of a 54 - build-by-convention behavior. 44 + gradle_launcher_jar=$(echo $out/lib/gradle/lib/gradle-launcher-*.jar) 45 + test -f $gradle_launcher_jar 46 + makeWrapper ${java}/bin/java $out/bin/gradle \ 47 + ${vars} 48 + --add-flags "-classpath $gradle_launcher_jar org.gradle.launcher.GradleMain${toolchain.property}" 49 + ''; 50 + 51 + dontFixup = !stdenv.isLinux; 52 + 53 + fixupPhase = let arch = if stdenv.is64bit then "amd64" else "i386"; 54 + in '' 55 + mkdir patching 56 + pushd patching 57 + jar xf $out/lib/gradle/lib/native-platform-linux-${arch}-${nativeVersion}.jar 58 + patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64" net/rubygrapefruit/platform/linux-${arch}/libnative-platform.so 59 + jar cf native-platform-linux-${arch}-${nativeVersion}.jar . 60 + mv native-platform-linux-${arch}-${nativeVersion}.jar $out/lib/gradle/lib/ 61 + popd 62 + 63 + # The scanner doesn't pick up the runtime dependency in the jar. 64 + # Manually add a reference where it will be found. 65 + mkdir $out/nix-support 66 + echo ${stdenv.cc.cc} > $out/nix-support/manual-runtime-dependencies 55 67 ''; 56 - homepage = "https://www.gradle.org/"; 57 - changelog = "https://docs.gradle.org/${version}/release-notes.html"; 58 - downloadPage = "https://gradle.org/next-steps/?version=${version}"; 59 - license = licenses.asl20; 60 - platforms = platforms.unix; 61 - maintainers = with maintainers; [ lorenzleutgeb ]; 68 + 69 + meta = with lib; { 70 + description = "Enterprise-grade build system"; 71 + longDescription = '' 72 + Gradle is a build system which offers you ease, power and freedom. 73 + You can choose the balance for yourself. It has powerful multi-project 74 + build support. It has a layer on top of Ivy that provides a 75 + build-by-convention integration for Ivy. It gives you always the choice 76 + between the flexibility of Ant and the convenience of a 77 + build-by-convention behavior. 78 + ''; 79 + homepage = "https://www.gradle.org/"; 80 + changelog = "https://docs.gradle.org/${version}/release-notes.html"; 81 + downloadPage = "https://gradle.org/next-steps/?version=${version}"; 82 + license = licenses.asl20; 83 + platforms = platforms.unix; 84 + maintainers = with maintainers; [ lorenzleutgeb ]; 85 + }; 62 86 }; 87 + 88 + # NOTE: Default JDKs are LTS versions and according to 89 + # https://docs.gradle.org/current/userguide/compatibility.html 90 + 91 + gradle_7 = gen { 92 + version = "7.3"; 93 + nativeVersion = "0.22-milestone-21"; 94 + sha256 = "04741q7avmn7rv9h5s6dqj4ibnvdylxrlhvj9wb5kixx96nm53yy"; 95 + defaultJava = jdk17; 63 96 }; 64 97 65 - gradle_latest = gradle_7_3; 98 + gradle_6 = gen { 99 + version = "6.9.1"; 100 + nativeVersion = "0.22-milestone-20"; 101 + sha256 = "1zmjfwlh34b65rdx9izgavw3qwqqwm39h5siyj2bf0m55111a4lc"; 102 + defaultJava = jdk11; 103 + }; 66 104 67 - gradle_7_3 = gradleGen (import ./gradle-7.3-spec.nix); 68 - gradle_6_9 = gradleGen (import ./gradle-6.9.1-spec.nix); 105 + # NOTE: No GitHub Release for the following versions. `update.sh` will not work. 106 + gradle_5 = gen { 107 + version = "5.6.4"; 108 + nativeVersion = "0.18"; 109 + sha256 = "03d86bbqd19h9xlanffcjcy3vg1k5905vzhf9mal9g21603nfc0z"; 110 + defaultJava = jdk11; 111 + }; 69 112 70 - # NOTE: No GitHub Release for the following versions. Update.sh will not work. 71 - gradle_5_6 = gradleGen (import ./gradle-5.6.4-spec.nix); 72 - gradle_4_10 = gradleGen (import ./gradle-4.10.3-spec.nix); 113 + gradle_4 = gen { 114 + version = "4.10.3"; 115 + nativeVersion = "0.14"; 116 + sha256 = "0vhqxnk0yj3q9jam5w4kpia70i4h0q4pjxxqwynh3qml0vrcn9l6"; 117 + defaultJava = jdk8; 118 + }; 73 119 }
-5
pkgs/development/tools/build-managers/gradle/gradle-4.10.3-spec.nix
··· 1 - { 2 - version = "4.10.3"; 3 - nativeVersion = "0.14"; 4 - sha256 = "0vhqxnk0yj3q9jam5w4kpia70i4h0q4pjxxqwynh3qml0vrcn9l6"; 5 - }
-5
pkgs/development/tools/build-managers/gradle/gradle-5.6.4-spec.nix
··· 1 - { 2 - version = "5.6.4"; 3 - nativeVersion = "0.18"; 4 - sha256 = "03d86bbqd19h9xlanffcjcy3vg1k5905vzhf9mal9g21603nfc0z"; 5 - }
-5
pkgs/development/tools/build-managers/gradle/gradle-6.9.1-spec.nix
··· 1 - { 2 - version = "6.9.1"; 3 - nativeVersion = "0.22-milestone-20"; 4 - sha256 = "1zmjfwlh34b65rdx9izgavw3qwqqwm39h5siyj2bf0m55111a4lc"; 5 - }
-5
pkgs/development/tools/build-managers/gradle/gradle-7.2-spec.nix
··· 1 - { 2 - version = "7.2"; 3 - nativeVersion = "0.22-milestone-21"; 4 - sha256 = "1pg6w5czysywsgdvmll5bwd2p6y99cn5sn3gw69cps9mkjd710gm"; 5 - }
-5
pkgs/development/tools/build-managers/gradle/gradle-7.3-spec.nix
··· 1 - { 2 - version = "7.3"; 3 - nativeVersion = "0.22-milestone-21"; 4 - sha256 = "04741q7avmn7rv9h5s6dqj4ibnvdylxrlhvj9wb5kixx96nm53yy"; 5 - }
+2 -2
pkgs/development/tools/scenebuilder/default.nix
··· 1 - { lib, stdenv, fetchFromGitHub, jdk11, gradleGen, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell, makeWrapper, glib, wrapGAppsHook }: 1 + { lib, stdenv, fetchFromGitHub, jdk11, gradle_6, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell, makeWrapper, glib, wrapGAppsHook }: 2 2 let 3 - gradle = (gradleGen.override (old: { java = jdk11; })).gradle_6_9; 3 + gradle = gradle_6; 4 4 5 5 pname = "scenebuilder"; 6 6 version = "15.0.1";
+1 -4
pkgs/development/tools/scenic-view/default.nix
··· 1 - { lib, stdenv, fetchFromGitHub, jdk, gradleGen, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell, makeWrapper }: 1 + { lib, stdenv, fetchFromGitHub, jdk, gradle, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell, makeWrapper }: 2 2 let 3 - # The default one still uses jdk8 (#89731) 4 - gradle = (gradleGen.override (old: { java = jdk; })).gradle_latest; 5 - 6 3 pname = "scenic-view"; 7 4 version = "11.0.2"; 8 5
+6 -6
pkgs/games/mindustry/default.nix
··· 3 3 , makeDesktopItem 4 4 , copyDesktopItems 5 5 , fetchFromGitHub 6 - , gradleGen 7 - , jdk 6 + , gradle_6 7 + , jdk11 8 8 , perl 9 9 10 10 # for arc ··· 87 87 popd 88 88 ''; 89 89 90 - # The default one still uses jdk8 (#89731) 91 - gradle_6 = (gradleGen.override (old: { java = jdk; })).gradle_6_9; 90 + jdk = jdk11; 91 + gradle = (gradle_6.override (old: { java = jdk11; })); 92 92 93 93 # fake build to pre-download deps into fixed-output derivation 94 94 deps = stdenv.mkDerivation { ··· 96 96 inherit version unpackPhase patches; 97 97 postPatch = cleanupMindustrySrc; 98 98 99 - nativeBuildInputs = [ gradle_6 perl ]; 99 + nativeBuildInputs = [ gradle perl ]; 100 100 # Here we download dependencies for both the server and the client so 101 101 # we only have to specify one hash for 'deps'. Deps can be garbage 102 102 # collected after the build, so this is not really an issue. ··· 136 136 ]; 137 137 nativeBuildInputs = [ 138 138 pkg-config 139 - gradle_6 139 + gradle 140 140 makeWrapper 141 141 jdk 142 142 ] ++ lib.optionals enableClient [
+8 -7
pkgs/top-level/all-packages.nix
··· 14652 14652 14653 14653 gpuvis = callPackage ../development/tools/misc/gpuvis { }; 14654 14654 14655 - gradleGen = callPackage ../development/tools/build-managers/gradle { 14656 - java = jdk8; # TODO: upgrade https://github.com/NixOS/nixpkgs/pull/89731 14655 + gradle-packages = import ../development/tools/build-managers/gradle { 14656 + inherit jdk8 jdk11 jdk17; 14657 14657 }; 14658 - gradle = res.gradleGen.gradle_latest; 14659 - gradle_4 = res.gradleGen.gradle_4_10; 14660 - gradle_5 = res.gradleGen.gradle_5_6; 14661 - gradle_6 = res.gradleGen.gradle_6_9; 14662 - gradle_7 = res.gradleGen.gradle_7_3; 14658 + gradleGen = gradle-packages.gen; 14659 + gradle_4 = callPackage gradle-packages.gradle_4 { }; 14660 + gradle_5 = callPackage gradle-packages.gradle_5 { }; 14661 + gradle_6 = callPackage gradle-packages.gradle_6 { }; 14662 + gradle_7 = callPackage gradle-packages.gradle_7 { }; 14663 + gradle = gradle_7; 14663 14664 14664 14665 gperf = callPackage ../development/tools/misc/gperf { }; 14665 14666 # 3.1 changed some parameters from int to size_t, leading to mismatches.