diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix | 187 |
1 files changed, 111 insertions, 76 deletions
diff --git a/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix b/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix index 5e2ef7ef9442..b94330d658ce 100644 --- a/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix +++ b/nixpkgs/pkgs/development/tools/build-managers/gradle/default.nix @@ -1,91 +1,126 @@ -{ lib, stdenv, fetchurl, unzip, jdk, java ? jdk, makeWrapper }: - -let - gradleSpec = { version, nativeVersion, sha256 }: rec { - inherit nativeVersion; - name = "gradle-${version}"; - src = fetchurl { - inherit sha256; - url = "https://services.gradle.org/distributions/${name}-bin.zip"; - }; - }; -in +{ jdk8, jdk11, jdk17 }: + rec { - gradleGen = { name, src, nativeVersion }: stdenv.mkDerivation { - inherit name src nativeVersion; - - dontBuild = true; - - installPhase = '' - mkdir -pv $out/lib/gradle/ - cp -rv lib/ $out/lib/gradle/ - - gradle_launcher_jar=$(echo $out/lib/gradle/lib/gradle-launcher-*.jar) - test -f $gradle_launcher_jar - makeWrapper ${java}/bin/java $out/bin/gradle \ - --set JAVA_HOME ${java} \ - --add-flags "-classpath $gradle_launcher_jar org.gradle.launcher.GradleMain" - ''; - - fixupPhase = if (!stdenv.isLinux) then ":" else - let arch = if stdenv.is64bit then "amd64" else "i386"; in - '' - mkdir patching - pushd patching - jar xf $out/lib/gradle/lib/native-platform-linux-${arch}-${nativeVersion}.jar - patchelf --set-rpath "${stdenv.cc.cc.lib}/lib:${stdenv.cc.cc.lib}/lib64" net/rubygrapefruit/platform/linux-${arch}/libnative-platform.so - jar cf native-platform-linux-${arch}-${nativeVersion}.jar . - mv native-platform-linux-${arch}-${nativeVersion}.jar $out/lib/gradle/lib/ - popd - - # The scanner doesn't pick up the runtime dependency in the jar. - # Manually add a reference where it will be found. - mkdir $out/nix-support - echo ${stdenv.cc.cc} > $out/nix-support/manual-runtime-dependencies - ''; - - nativeBuildInputs = [ makeWrapper unzip ]; - buildInputs = [ java ]; - - meta = { - description = "Enterprise-grade build system"; - longDescription = '' - Gradle is a build system which offers you ease, power and freedom. - You can choose the balance for yourself. It has powerful multi-project - build support. It has a layer on top of Ivy that provides a - build-by-convention integration for Ivy. It gives you always the choice - between the flexibility of Ant and the convenience of a - build-by-convention behavior. + gen = + + { version, nativeVersion, sha256, defaultJava ? jdk8 }: + + { lib, stdenv, fetchurl, makeWrapper, unzip, java ? defaultJava + , javaToolchains ? [ ], ncurses5, ncurses6 }: + + stdenv.mkDerivation rec { + pname = "gradle"; + inherit version; + + src = fetchurl { + inherit sha256; + url = + "https://services.gradle.org/distributions/gradle-${version}-bin.zip"; + }; + + dontBuild = true; + + nativeBuildInputs = [ makeWrapper unzip ]; + buildInputs = [ java ]; + + # NOTE: For more information on toolchains, + # see https://docs.gradle.org/current/userguide/toolchains.html + installPhase = with builtins; + let + toolchain = rec { + var = x: "JAVA_TOOLCHAIN_NIX_${toString x}"; + vars = (lib.imap0 (i: x: ("${var i} ${x}")) javaToolchains); + varNames = lib.imap0 (i: x: var i) javaToolchains; + property = " -Porg.gradle.java.installations.fromEnv='${ + concatStringsSep "," varNames + }'"; + }; + vars = concatStringsSep "\n" (map (x: " --set ${x} \\") + ([ "JAVA_HOME ${java}" ] ++ toolchain.vars)); + in '' + mkdir -pv $out/lib/gradle/ + cp -rv lib/ $out/lib/gradle/ + + gradle_launcher_jar=$(echo $out/lib/gradle/lib/gradle-launcher-*.jar) + test -f $gradle_launcher_jar + makeWrapper ${java}/bin/java $out/bin/gradle \ + ${vars} + --add-flags "-classpath $gradle_launcher_jar org.gradle.launcher.GradleMain${toolchain.property}" + ''; + + dontFixup = !stdenv.isLinux; + + fixupPhase = let arch = if stdenv.is64bit then "amd64" else "i386"; + in '' + for variant in "" "-ncurses5" "-ncurses6"; do + mkdir "patching$variant" + pushd "patching$variant" + jar xf $out/lib/gradle/lib/native-platform-linux-${arch}$variant-${nativeVersion}.jar + patchelf \ + --set-rpath "${stdenv.cc.cc.lib}/lib64:${lib.makeLibraryPath [ stdenv.cc.cc ncurses5 ncurses6 ]}" \ + net/rubygrapefruit/platform/linux-${arch}$variant/libnative-platform*.so + jar cf native-platform-linux-${arch}$variant-${nativeVersion}.jar . + mv native-platform-linux-${arch}$variant-${nativeVersion}.jar $out/lib/gradle/lib/ + popd + done + + # The scanner doesn't pick up the runtime dependency in the jar. + # Manually add a reference where it will be found. + mkdir $out/nix-support + echo ${stdenv.cc.cc} > $out/nix-support/manual-runtime-dependencies + # Gradle will refuse to start without _both_ 5 and 6 versions of ncurses. + echo ${ncurses5} >> $out/nix-support/manual-runtime-dependencies + echo ${ncurses6} >> $out/nix-support/manual-runtime-dependencies ''; - homepage = "http://www.gradle.org/"; - license = lib.licenses.asl20; - platforms = lib.platforms.unix; + + meta = with lib; { + description = "Enterprise-grade build system"; + longDescription = '' + Gradle is a build system which offers you ease, power and freedom. + You can choose the balance for yourself. It has powerful multi-project + build support. It has a layer on top of Ivy that provides a + build-by-convention integration for Ivy. It gives you always the choice + between the flexibility of Ant and the convenience of a + build-by-convention behavior. + ''; + homepage = "https://www.gradle.org/"; + changelog = "https://docs.gradle.org/${version}/release-notes.html"; + downloadPage = "https://gradle.org/next-steps/?version=${version}"; + license = licenses.asl20; + platforms = platforms.unix; + maintainers = with maintainers; [ lorenzleutgeb liff ]; + }; }; - }; - gradle_latest = gradle_7; + # NOTE: Default JDKs are LTS versions and according to + # https://docs.gradle.org/current/userguide/compatibility.html - gradle_7 = gradleGen (gradleSpec { - version = "7.2"; + gradle_7 = gen { + version = "7.3.3"; nativeVersion = "0.22-milestone-21"; - sha256 = "1pg6w5czysywsgdvmll5bwd2p6y99cn5sn3gw69cps9mkjd710gm"; - }); + sha256 = "00h3z0vxc4hv31sc71gb88r8yabyqgz304wpr0bxhbx2d14f11mm"; + defaultJava = jdk17; + }; - gradle_6_8 = gradleGen (gradleSpec { - version = "6.8.3"; - nativeVersion = "0.22-milestone-9"; - sha256 = "01fjrk5nfdp6mldyblfmnkq2gv1rz1818kzgr0k2i1wzfsc73akz"; - }); + gradle_6 = gen { + version = "6.9.2"; + nativeVersion = "0.22-milestone-20"; + sha256 = "13qyk3f6namw27ynh6nxljxpk9r3l12vxl3f0qpglprdf3c6ydcb"; + defaultJava = jdk11; + }; - gradle_5_6 = gradleGen (gradleSpec { + # NOTE: No GitHub Release for the following versions. `update.sh` will not work. + gradle_5 = gen { version = "5.6.4"; nativeVersion = "0.18"; - sha256 = "1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d"; - }); + sha256 = "03d86bbqd19h9xlanffcjcy3vg1k5905vzhf9mal9g21603nfc0z"; + defaultJava = jdk11; + }; - gradle_4_10 = gradleGen (gradleSpec { + gradle_4 = gen { version = "4.10.3"; nativeVersion = "0.14"; sha256 = "0vhqxnk0yj3q9jam5w4kpia70i4h0q4pjxxqwynh3qml0vrcn9l6"; - }); + defaultJava = jdk8; + }; } |