about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRolf Schröder <rolf.schroeder@limbus-medtec.com>2023-10-20 09:23:40 +0200
committerRolf Schröder <rolf.schroeder@limbus-medtec.com>2023-11-22 21:04:36 +0100
commit3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b (patch)
treee6c20270a9e266cf265a5d0410e4c563c8792831
parent6790c4da9bb7618fe63f86169e1b453d94c3c4b0 (diff)
downloadnixlib-3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b.tar
nixlib-3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b.tar.gz
nixlib-3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b.tar.bz2
nixlib-3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b.tar.lz
nixlib-3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b.tar.xz
nixlib-3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b.tar.zst
nixlib-3cd0e6f2d380bdb2a4f4ccc0f0260fba9bc9f11b.zip
corretto{11,17,19}: init at 11.0.20.9.1/17.0.8.8.1/19.0.2.7.1
-rw-r--r--pkgs/development/compilers/corretto/11.nix37
-rw-r--r--pkgs/development/compilers/corretto/17.nix26
-rw-r--r--pkgs/development/compilers/corretto/19.nix26
-rw-r--r--pkgs/development/compilers/corretto/mk-corretto.nix115
-rw-r--r--pkgs/top-level/all-packages.nix4
-rw-r--r--pkgs/top-level/java-packages.nix4
6 files changed, 212 insertions, 0 deletions
diff --git a/pkgs/development/compilers/corretto/11.nix b/pkgs/development/compilers/corretto/11.nix
new file mode 100644
index 000000000000..9e61e133f4cf
--- /dev/null
+++ b/pkgs/development/compilers/corretto/11.nix
@@ -0,0 +1,37 @@
+{ corretto11
+, fetchFromGitHub
+, gradle_7
+, jdk11
+, lib
+, stdenv
+, rsync
+, runCommand
+, testers
+}:
+
+let
+  corretto = import ./mk-corretto.nix {
+    inherit lib stdenv rsync runCommand testers;
+    jdk = jdk11;
+    gradle = gradle_7;
+    version = "11.0.20.9.1";
+    src = fetchFromGitHub {
+      owner = "corretto";
+      repo = "corretto-11";
+      rev = "b880bdc8397ec3dd6b7cd4b837ce846c9e902783";
+      sha256 = "sha256-IomJHQn0ZgqsBZ5BrRqVrEOhTq7wjLiIKMQlz53JxsU=";
+    };
+  };
+in
+corretto.overrideAttrs (oldAttrs: {
+  # jdk11 is built with --disable-warnings-as-errors (see openjdk/11.nix)
+  # because of several compile errors. We need to include this parameter for
+  # Corretto, too. Since the build is invoked via `gradle` build.gradle has to
+  # be adapted.
+  postPatch = oldAttrs.postPatch + ''
+    for file in $(find installers -name "build.gradle"); do
+      substituteInPlace $file --replace "command += archSpecificFlags" "command += archSpecificFlags + ['--disable-warnings-as-errors']"
+    done
+  '';
+
+})
diff --git a/pkgs/development/compilers/corretto/17.nix b/pkgs/development/compilers/corretto/17.nix
new file mode 100644
index 000000000000..308750356c2a
--- /dev/null
+++ b/pkgs/development/compilers/corretto/17.nix
@@ -0,0 +1,26 @@
+{ corretto17
+, fetchFromGitHub
+, gradle_7
+, jdk17
+, lib
+, stdenv
+, rsync
+, runCommand
+, testers
+}:
+
+let
+  corretto = import ./mk-corretto.nix {
+    inherit lib stdenv rsync runCommand testers;
+    jdk = jdk17;
+    gradle = gradle_7;
+    version = "17.0.8.8.1";
+    src = fetchFromGitHub {
+      owner = "corretto";
+      repo = "corretto-17";
+      rev = "9a3cc984f76cb5f90598bdb43215bad20e0f7319";
+      sha256 = "sha256-/VuB3ocD5VvDqCU7BoTG+fQ0aKvK1TejegRYmswInqQ=";
+    };
+  };
+in
+corretto
diff --git a/pkgs/development/compilers/corretto/19.nix b/pkgs/development/compilers/corretto/19.nix
new file mode 100644
index 000000000000..ea1fcc1aee1b
--- /dev/null
+++ b/pkgs/development/compilers/corretto/19.nix
@@ -0,0 +1,26 @@
+{ corretto19
+, fetchFromGitHub
+, gradle_7
+, jdk19
+, lib
+, stdenv
+, rsync
+, runCommand
+, testers
+}:
+
+let
+  corretto = import ./mk-corretto.nix {
+    inherit lib stdenv rsync runCommand testers;
+    jdk = jdk19;
+    gradle = gradle_7;
+    version = "19.0.2.7.1";
+    src = fetchFromGitHub {
+      owner = "corretto";
+      repo = "corretto-19";
+      rev = "72f064a1d716272bd17d4e425d4a264b2c2c7d36";
+      sha256 = "sha256-mEj/MIbdXU0+fF5RhqjPuSeyclstesGaXB0e48YlKuw=";
+    };
+  };
+in
+corretto
diff --git a/pkgs/development/compilers/corretto/mk-corretto.nix b/pkgs/development/compilers/corretto/mk-corretto.nix
new file mode 100644
index 000000000000..026316f2fa73
--- /dev/null
+++ b/pkgs/development/compilers/corretto/mk-corretto.nix
@@ -0,0 +1,115 @@
+{ jdk
+, version
+, src
+, lib
+, stdenv
+, gradle
+, rsync
+, runCommand
+, testers
+}:
+
+# Each Corretto version is based on a corresponding OpenJDK version. So
+# building Corretto is more or less the same as building OpenJDK. Hence, the
+# Corretto derivation overrides the corresponding OpenJDK derivation in order
+# to have access to all the version-specific fixes for the various OpenJDK
+# builds. However, Corretto uses `gradle` as build tool (which in turn will
+# invoke `make`). The configure/build phases are adapted as needed.
+
+let
+  pname = "corretto";
+  # The version scheme is different between OpenJDK & Corretto.
+  # See https://github.com/corretto/corretto-17/blob/release-17.0.8.8.1/build.gradle#L40
+  # "major.minor.security.build.revision"
+in
+jdk.overrideAttrs (finalAttrs: oldAttrs: {
+  inherit pname version src;
+  name = "${pname}-${version}";
+
+  nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ jdk gradle rsync ];
+
+  dontConfigure = true;
+
+  postPatch = ''
+    # The rpm/deb task definitions require a Gradle plugin which we don't
+    # have and so the build fails. We'll simply remove them here because
+    # they are not needed anyways.
+    rm -rf installers/linux/universal/{rpm,deb}
+
+    # `/usr/bin/rsync` is invoked to copy the source tree. We don't have that.
+    for file in $(find installers -name "build.gradle"); do
+      substituteInPlace $file --replace "workingDir '/usr/bin'" "workingDir '.'"
+    done
+  '';
+
+
+  buildPhase =
+    let
+      # The Linux installer is placed at linux/universal/tar whereas the MacOS
+      # one is at mac/tar.
+      task =
+        if stdenv.isDarwin then
+          ":installers:mac:tar:packageBuildResults"
+        else ":installers:linux:universal:tar:packageBuildResults";
+    in
+    ''
+      runHook preBuild
+
+      # Corretto's actual built is triggered via `gradle`.
+      gradle --console=plain --no-daemon ${task}
+
+      # Prepare for the installPhase so that it looks like if a normal
+      # OpenJDK had been built.
+      dir=build/jdkImageName/images
+      mkdir -p $dir
+      file=$(find ./installers -name 'amazon-corretto-${version}*.tar.gz')
+      tar -xzf $file -C $dir
+      mv $dir/amazon-corretto-* $dir/jdk
+
+      runHook postBuild
+    '';
+
+  installPhase = oldAttrs.installPhase + ''
+    # The installPhase will place everything in $out/lib/openjdk and
+    # reference through symlinks. We don't rewrite the installPhase but at
+    # least move the folder to convey that this is not OpenJDK anymore.
+    mv $out/lib/openjdk $out/lib/corretto
+    ln -s $out/lib/corretto $out/lib/openjdk
+  '';
+
+  passthru =
+    let
+      pkg = finalAttrs.finalPackage;
+    in
+    oldAttrs.passthru // {
+      tests = {
+        version = testers.testVersion {
+          package = pkg;
+        };
+        vendor = runCommand "${pname}-vendor" { nativeBuildInputs = [ pkg ]; } ''
+          output=$(${pkg.meta.mainProgram} -XshowSettings:properties -version 2>&1 | grep vendor)
+          grep -Fq "java.vendor = Amazon.com Inc." - <<< "$output" && touch $out
+        '';
+        compiler = runCommand "${pname}-compiler" { nativeBuildInputs = [ pkg ]; } ''
+          cat << EOF  > Main.java
+          class Main {
+              public static void main(String[] args) {
+                  System.out.println("Hello, World!");
+              }
+          }
+          EOF
+          ${pkg}/bin/javac Main.java
+          ${pkg}/bin/java Main | grep -q "Hello, World!" && touch $out
+        '';
+      };
+    };
+
+  meta = with lib; {
+    homepage = "https://aws.amazon.com/corretto";
+    license = licenses.gpl2Only;
+    description = "Amazon's distribution of OpenJDK";
+    platforms = jdk.meta.platforms;
+    mainProgram = "java";
+    maintainers = with maintainers; [ rollf ];
+  };
+})
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 6a76ab777972..5220e3d18862 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -15416,6 +15416,10 @@ with pkgs;
 
   copper = callPackage ../development/compilers/copper { };
 
+  corretto11 = javaPackages.compiler.corretto11;
+  corretto17 = javaPackages.compiler.corretto17;
+  corretto19 = javaPackages.compiler.corretto19;
+
   cotton = callPackage ../development/tools/cotton {
     inherit (darwin.apple_sdk.frameworks) CoreServices;
   };
diff --git a/pkgs/top-level/java-packages.nix b/pkgs/top-level/java-packages.nix
index 5d938a12e829..a4e58837299f 100644
--- a/pkgs/top-level/java-packages.nix
+++ b/pkgs/top-level/java-packages.nix
@@ -93,6 +93,10 @@ in {
       ../development/compilers/adoptopenjdk-bin/jdk17-linux.nix
       ../development/compilers/adoptopenjdk-bin/jdk17-darwin.nix;
 
+    corretto11 = callPackage ../development/compilers/corretto/11.nix { };
+    corretto17 = callPackage ../development/compilers/corretto/17.nix { };
+    corretto19 = callPackage ../development/compilers/corretto/19.nix { };
+
     openjdk8-bootstrap = mkBootstrap adoptopenjdk-8
       ../development/compilers/openjdk/bootstrap.nix
       { version = "8"; };