summary refs log tree commit diff
path: root/pkgs/development/compilers/openjdk
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/openjdk')
-rw-r--r--pkgs/development/compilers/openjdk/12.nix11
-rw-r--r--pkgs/development/compilers/openjdk/13.nix13
-rw-r--r--pkgs/development/compilers/openjdk/14.nix13
-rw-r--r--pkgs/development/compilers/openjdk/15.nix14
-rw-r--r--pkgs/development/compilers/openjdk/16.nix14
-rw-r--r--pkgs/development/compilers/openjdk/17.nix3
-rw-r--r--pkgs/development/compilers/openjdk/18.nix9
-rw-r--r--pkgs/development/compilers/openjdk/19.nix3
-rw-r--r--pkgs/development/compilers/openjdk/20.nix3
-rw-r--r--pkgs/development/compilers/openjdk/21.nix188
-rw-r--r--pkgs/development/compilers/openjdk/darwin/11.nix92
-rw-r--r--pkgs/development/compilers/openjdk/darwin/16.nix92
-rw-r--r--pkgs/development/compilers/openjdk/darwin/17.nix92
-rw-r--r--pkgs/development/compilers/openjdk/darwin/18.nix92
-rw-r--r--pkgs/development/compilers/openjdk/darwin/19.nix92
-rw-r--r--pkgs/development/compilers/openjdk/darwin/20.nix92
-rw-r--r--pkgs/development/compilers/openjdk/darwin/8.nix96
-rw-r--r--pkgs/development/compilers/openjdk/darwin/meta.nix4
-rw-r--r--pkgs/development/compilers/openjdk/fix-java-home-jdk21.patch14
-rw-r--r--pkgs/development/compilers/openjdk/openjfx/11.nix1
-rw-r--r--pkgs/development/compilers/openjdk/openjfx/15.nix1
-rw-r--r--pkgs/development/compilers/openjdk/openjfx/17.nix1
-rw-r--r--pkgs/development/compilers/openjdk/openjfx/19.nix1
-rw-r--r--pkgs/development/compilers/openjdk/openjfx/20.nix1
-rw-r--r--pkgs/development/compilers/openjdk/openjfx/21.nix114
25 files changed, 375 insertions, 681 deletions
diff --git a/pkgs/development/compilers/openjdk/12.nix b/pkgs/development/compilers/openjdk/12.nix
index e717a910f70..ab0696e172c 100644
--- a/pkgs/development/compilers/openjdk/12.nix
+++ b/pkgs/development/compilers/openjdk/12.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, bash, pkg-config, autoconf, cpio, file, which, unzip
-, zip, perl, cups, freetype, harfbuzz, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
+, zip, perl, cups, freetype, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
 , libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama
 , libXcursor, libXrandr, fontconfig, openjdk11-bootstrap, fetchpatch
 , setJavaClassPath
@@ -27,7 +27,7 @@ let
 
     nativeBuildInputs = [ pkg-config autoconf unzip ];
     buildInputs = [
-      cpio file which zip perl zlib cups freetype harfbuzz alsa-lib libjpeg giflib
+      cpio file which zip perl zlib cups freetype alsa-lib libjpeg giflib
       libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
       libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
     ] ++ lib.optionals (!headless && enableGnome2) [
@@ -67,7 +67,6 @@ let
       "--enable-unlimited-crypto"
       "--with-native-debug-symbols=internal"
       "--with-freetype=system"
-      "--with-harfbuzz=system"
       "--with-libjpeg=system"
       "--with-giflib=system"
       "--with-libpng=system"
@@ -96,6 +95,12 @@ let
 
     buildFlags = [ "all" ];
 
+    postBuild = ''
+      cd build/linux*
+      make images
+      cd -
+    '';
+
     installPhase = ''
       mkdir -p $out/lib
 
diff --git a/pkgs/development/compilers/openjdk/13.nix b/pkgs/development/compilers/openjdk/13.nix
index b012459ba04..5d5d9f77477 100644
--- a/pkgs/development/compilers/openjdk/13.nix
+++ b/pkgs/development/compilers/openjdk/13.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, bash, pkg-config, autoconf, cpio, file, which, unzip
-, zip, perl, cups, freetype, harfbuzz, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
+, zip, perl, cups, freetype, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
 , libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama
 , libXcursor, libXrandr, fontconfig, openjdk13-bootstrap, fetchpatch
 , setJavaClassPath
@@ -27,7 +27,7 @@ let
 
     nativeBuildInputs = [ pkg-config autoconf unzip ];
     buildInputs = [
-      cpio file which zip perl zlib cups freetype harfbuzz alsa-lib libjpeg giflib
+      cpio file which zip perl zlib cups freetype alsa-lib libjpeg giflib
       libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
       libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
     ] ++ lib.optionals (!headless && enableGnome2) [
@@ -72,7 +72,6 @@ let
       "--enable-unlimited-crypto"
       "--with-native-debug-symbols=internal"
       "--with-freetype=system"
-      "--with-harfbuzz=system"
       "--with-libjpeg=system"
       "--with-giflib=system"
       "--with-libpng=system"
@@ -101,6 +100,12 @@ let
 
     buildFlags = [ "all" ];
 
+    postBuild = ''
+      cd build/linux*
+      make images
+      cd -
+    '';
+
     installPhase = ''
       mkdir -p $out/lib
 
@@ -161,7 +166,7 @@ let
 
     disallowedReferences = [ openjdk-bootstrap ];
 
-    meta = import ./meta.nix lib version;
+    meta = (import ./meta.nix lib version) // { broken = true; };
 
     passthru = {
       architecture = "";
diff --git a/pkgs/development/compilers/openjdk/14.nix b/pkgs/development/compilers/openjdk/14.nix
index 0f4f17d078e..348fd3996c9 100644
--- a/pkgs/development/compilers/openjdk/14.nix
+++ b/pkgs/development/compilers/openjdk/14.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, bash, pkg-config, autoconf, cpio, file, which, unzip
-, zip, perl, cups, freetype, harfbuzz, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
+, zip, perl, cups, freetype, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
 , libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama
 , libXcursor, libXrandr, fontconfig, openjdk14-bootstrap
 , setJavaClassPath
@@ -27,7 +27,7 @@ let
 
     nativeBuildInputs = [ pkg-config autoconf unzip ];
     buildInputs = [
-      cpio file which zip perl zlib cups freetype harfbuzz alsa-lib libjpeg giflib
+      cpio file which zip perl zlib cups freetype alsa-lib libjpeg giflib
       libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
       libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
     ] ++ lib.optionals (!headless && enableGnome2) [
@@ -67,7 +67,6 @@ let
       "--enable-unlimited-crypto"
       "--with-native-debug-symbols=internal"
       "--with-freetype=system"
-      "--with-harfbuzz=system"
       "--with-libjpeg=system"
       "--with-giflib=system"
       "--with-libpng=system"
@@ -96,6 +95,12 @@ let
 
     buildFlags = [ "all" ];
 
+    postBuild = ''
+      cd build/linux*
+      make images
+      cd -
+    '';
+
     installPhase = ''
       mkdir -p $out/lib
 
@@ -157,7 +162,7 @@ let
 
     disallowedReferences = [ openjdk-bootstrap ];
 
-    meta = import ./meta.nix lib version;
+    meta = (import ./meta.nix lib version) // { broken = true; };
 
     passthru = {
       architecture = "";
diff --git a/pkgs/development/compilers/openjdk/15.nix b/pkgs/development/compilers/openjdk/15.nix
index 54bce680a18..2447b0783ca 100644
--- a/pkgs/development/compilers/openjdk/15.nix
+++ b/pkgs/development/compilers/openjdk/15.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, bash, pkg-config, autoconf, cpio, file, which, unzip
-, zip, perl, cups, freetype, harfbuzz, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
+, zip, perl, cups, freetype, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
 , libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama
 , libXcursor, libXrandr, fontconfig, openjdk15-bootstrap
 , setJavaClassPath
@@ -30,7 +30,7 @@ let
 
     nativeBuildInputs = [ pkg-config autoconf unzip zip file which ];
     buildInputs = [
-      cpio perl zlib cups freetype harfbuzz alsa-lib libjpeg giflib
+      cpio perl zlib cups freetype alsa-lib libjpeg giflib
       libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
       libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
     ] ++ lib.optionals (!headless && enableGnome2) [
@@ -70,15 +70,13 @@ let
       "--enable-unlimited-crypto"
       "--with-native-debug-symbols=internal"
       "--with-freetype=system"
-      "--with-harfbuzz=system"
       "--with-libjpeg=system"
       "--with-giflib=system"
       "--with-libpng=system"
       "--with-zlib=system"
       "--with-lcms=system"
       "--with-stdc++lib=dynamic"
-    ] ++ lib.optional stdenv.isx86_64 "--with-jvm-features=zgc"
-      ++ lib.optional headless "--enable-headless-only"
+    ] ++ lib.optional headless "--enable-headless-only"
       ++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
 
     separateDebugInfo = true;
@@ -99,6 +97,12 @@ let
 
     buildFlags = [ "all" ];
 
+    postBuild = ''
+      cd build/linux*
+      make images
+      cd -
+    '';
+
     installPhase = ''
       mkdir -p $out/lib
 
diff --git a/pkgs/development/compilers/openjdk/16.nix b/pkgs/development/compilers/openjdk/16.nix
index 802449e4027..4b0874a03a4 100644
--- a/pkgs/development/compilers/openjdk/16.nix
+++ b/pkgs/development/compilers/openjdk/16.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, fetchFromGitHub, bash, pkg-config, autoconf, cpio
-, file, which, unzip, zip, perl, cups, freetype, harfbuzz, alsa-lib, libjpeg, giflib
+, file, which, unzip, zip, perl, cups, freetype, alsa-lib, libjpeg, giflib
 , libpng, zlib, lcms2, libX11, libICE, libXrender, libXext, libXt, libXtst
 , libXi, libXinerama, libXcursor, libXrandr, fontconfig, openjdk16-bootstrap
 , setJavaClassPath
@@ -31,7 +31,7 @@ let
 
     nativeBuildInputs = [ pkg-config autoconf unzip ];
     buildInputs = [
-      cpio file which zip perl zlib cups freetype harfbuzz alsa-lib libjpeg giflib
+      cpio file which zip perl zlib cups freetype alsa-lib libjpeg giflib
       libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
       libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
     ] ++ lib.optionals (!headless && enableGnome2) [
@@ -74,15 +74,13 @@ let
       "--enable-unlimited-crypto"
       "--with-native-debug-symbols=internal"
       "--with-freetype=system"
-      "--with-harfbuzz=system"
       "--with-libjpeg=system"
       "--with-giflib=system"
       "--with-libpng=system"
       "--with-zlib=system"
       "--with-lcms=system"
       "--with-stdc++lib=dynamic"
-    ] ++ lib.optional stdenv.isx86_64 "--with-jvm-features=zgc"
-      ++ lib.optional headless "--enable-headless-only"
+    ] ++ lib.optional headless "--enable-headless-only"
       ++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
 
     separateDebugInfo = true;
@@ -103,6 +101,12 @@ let
 
     buildFlags = [ "all" ];
 
+    postBuild = ''
+      cd build/linux*
+      make images
+      cd -
+    '';
+
     installPhase = ''
       mkdir -p $out/lib
 
diff --git a/pkgs/development/compilers/openjdk/17.nix b/pkgs/development/compilers/openjdk/17.nix
index 9aa952156d2..d2c71683c9b 100644
--- a/pkgs/development/compilers/openjdk/17.nix
+++ b/pkgs/development/compilers/openjdk/17.nix
@@ -98,8 +98,7 @@ let
       "--with-zlib=system"
       "--with-lcms=system"
       "--with-stdc++lib=dynamic"
-    ] ++ lib.optional stdenv.isx86_64 "--with-jvm-features=zgc"
-      ++ lib.optional headless "--enable-headless-only"
+    ] ++ lib.optional headless "--enable-headless-only"
       ++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
 
     separateDebugInfo = true;
diff --git a/pkgs/development/compilers/openjdk/18.nix b/pkgs/development/compilers/openjdk/18.nix
index 48d68f7b071..2c496721be0 100644
--- a/pkgs/development/compilers/openjdk/18.nix
+++ b/pkgs/development/compilers/openjdk/18.nix
@@ -88,8 +88,7 @@ let
       "--with-zlib=system"
       "--with-lcms=system"
       "--with-stdc++lib=dynamic"
-    ] ++ lib.optional stdenv.isx86_64 "--with-jvm-features=zgc"
-      ++ lib.optional headless "--enable-headless-only"
+    ] ++ lib.optional headless "--enable-headless-only"
       ++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
 
     separateDebugInfo = true;
@@ -110,6 +109,12 @@ let
 
     buildFlags = [ "images" ];
 
+    postBuild = ''
+      cd build/linux*
+      make images
+      cd -
+    '';
+
     installPhase = ''
       mkdir -p $out/lib
 
diff --git a/pkgs/development/compilers/openjdk/19.nix b/pkgs/development/compilers/openjdk/19.nix
index 214831a3d56..51fd0d8eb53 100644
--- a/pkgs/development/compilers/openjdk/19.nix
+++ b/pkgs/development/compilers/openjdk/19.nix
@@ -98,8 +98,7 @@ let
       "--with-zlib=system"
       "--with-lcms=system"
       "--with-stdc++lib=dynamic"
-    ] ++ lib.optional stdenv.isx86_64 "--with-jvm-features=zgc"
-      ++ lib.optional headless "--enable-headless-only"
+    ] ++ lib.optional headless "--enable-headless-only"
       ++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
 
     separateDebugInfo = true;
diff --git a/pkgs/development/compilers/openjdk/20.nix b/pkgs/development/compilers/openjdk/20.nix
index 105a1cc7b35..2be834a27b5 100644
--- a/pkgs/development/compilers/openjdk/20.nix
+++ b/pkgs/development/compilers/openjdk/20.nix
@@ -98,8 +98,7 @@ let
       "--with-zlib=system"
       "--with-lcms=system"
       "--with-stdc++lib=dynamic"
-    ] ++ lib.optional stdenv.isx86_64 "--with-jvm-features=zgc"
-      ++ lib.optional headless "--enable-headless-only"
+    ] ++ lib.optional headless "--enable-headless-only"
       ++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
 
     separateDebugInfo = true;
diff --git a/pkgs/development/compilers/openjdk/21.nix b/pkgs/development/compilers/openjdk/21.nix
new file mode 100644
index 00000000000..623ac281acf
--- /dev/null
+++ b/pkgs/development/compilers/openjdk/21.nix
@@ -0,0 +1,188 @@
+{ stdenv, lib, fetchurl, fetchpatch, fetchFromGitHub, bash, pkg-config, autoconf, cpio
+, file, which, unzip, zip, perl, cups, freetype, alsa-lib, libjpeg, giflib
+, libpng, zlib, lcms2, libX11, libICE, libXrender, libXext, libXt, libXtst
+, libXi, libXinerama, libXcursor, libXrandr, fontconfig, openjdk21-bootstrap
+, ensureNewerSourcesForZipFilesHook
+, setJavaClassPath
+# TODO(@sternenseemann): gtk3 fails to evaluate in pkgsCross.ghcjs.buildPackages
+# which should be fixable, this is a no-rebuild workaround for GHC.
+, headless ? stdenv.targetPlatform.isGhcjs
+, enableJavaFX ? false, openjfx
+, enableGnome2 ? true, gtk3, gnome_vfs, glib, GConf
+}:
+
+let
+  version = {
+    feature = "21";
+    interim = "";
+    build = "35";
+  };
+
+  # when building a headless jdk, also bootstrap it with a headless jdk
+  openjdk-bootstrap = openjdk21-bootstrap.override { gtkSupport = !headless; };
+
+  openjdk = stdenv.mkDerivation {
+    pname = "openjdk" + lib.optionalString headless "-headless";
+    version = "${version.feature}${version.interim}+${version.build}";
+
+    src = fetchFromGitHub {
+      owner = "openjdk";
+      repo = "jdk${version.feature}u";
+      rev = "jdk-${version.feature}${version.interim}+${version.build}";
+      hash = "sha256-fA8nRWBuTL87S8mwapmNfCPPQoI2aKHjbHJ6PDN3khs=";
+    };
+
+    nativeBuildInputs = [ pkg-config autoconf unzip ensureNewerSourcesForZipFilesHook ];
+    buildInputs = [
+      cpio file which zip perl zlib cups freetype alsa-lib libjpeg giflib
+      libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
+      libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
+    ] ++ lib.optionals (!headless && enableGnome2) [
+      gtk3 gnome_vfs GConf glib
+    ];
+
+    patches = [
+      ./fix-java-home-jdk21.patch
+      ./read-truststore-from-env-jdk10.patch
+      ./currency-date-range-jdk10.patch
+      ./increase-javadoc-heap-jdk13.patch
+      ./ignore-LegalNoticeFilePlugin-jdk18.patch
+
+      # -Wformat etc. are stricter in newer gccs, per
+      # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79677
+      # so grab the work-around from
+      # https://src.fedoraproject.org/rpms/java-openjdk/pull-request/24
+      (fetchurl {
+        url = "https://src.fedoraproject.org/rpms/java-openjdk/raw/06c001c7d87f2e9fe4fedeef2d993bcd5d7afa2a/f/rh1673833-remove_removal_of_wformat_during_test_compilation.patch";
+        sha256 = "082lmc30x64x583vqq00c8y0wqih3y4r0mp1c4bqq36l22qv6b6r";
+      })
+
+      # Fix build for gnumake-4.4.1:
+      #   https://github.com/openjdk/jdk/pull/12992
+      (fetchpatch {
+        name = "gnumake-4.4.1";
+        url = "https://github.com/openjdk/jdk/commit/9341d135b855cc208d48e47d30cd90aafa354c36.patch";
+        hash = "sha256-Qcm3ZmGCOYLZcskNjj7DYR85R4v07vYvvavrVOYL8vg=";
+      })
+    ] ++ lib.optionals (!headless && enableGnome2) [
+      ./swing-use-gtk-jdk13.patch
+    ];
+
+    postPatch = ''
+      chmod +x configure
+      patchShebangs --build configure
+    '';
+
+    # JDK's build system attempts to specifically detect
+    # and special-case WSL, and we don't want it to do that,
+    # so pass the correct platform names explicitly
+    configurePlatforms = ["build" "host"];
+
+    configureFlags = [
+      "--with-boot-jdk=${openjdk-bootstrap.home}"
+      "--with-version-build=${version.build}"
+      "--with-version-opt=nixos"
+      "--with-version-pre="
+      "--enable-unlimited-crypto"
+      "--with-native-debug-symbols=internal"
+      "--with-libjpeg=system"
+      "--with-giflib=system"
+      "--with-libpng=system"
+      "--with-zlib=system"
+      "--with-lcms=system"
+      "--with-stdc++lib=dynamic"
+    ] ++ lib.optional stdenv.isx86_64 "--with-jvm-features=zgc"
+      ++ lib.optional headless "--enable-headless-only"
+      ++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
+
+    separateDebugInfo = true;
+
+    env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+    NIX_LDFLAGS = toString (lib.optionals (!headless) [
+      "-lfontconfig" "-lcups" "-lXinerama" "-lXrandr" "-lmagic"
+    ] ++ lib.optionals (!headless && enableGnome2) [
+      "-lgtk-3" "-lgio-2.0" "-lgnomevfs-2" "-lgconf-2"
+    ]);
+
+    # -j flag is explicitly rejected by the build system:
+    #     Error: 'make -jN' is not supported, use 'make JOBS=N'
+    # Note: it does not make build sequential. Build system
+    # still runs in parallel.
+    enableParallelBuilding = false;
+
+    buildFlags = [ "images" ];
+
+    installPhase = ''
+      mkdir -p $out/lib
+
+      mv build/*/images/jdk $out/lib/openjdk
+
+      # Remove some broken manpages.
+      rm -rf $out/lib/openjdk/man/ja*
+
+      # Mirror some stuff in top-level.
+      mkdir -p $out/share
+      ln -s $out/lib/openjdk/include $out/include
+      ln -s $out/lib/openjdk/man $out/share/man
+
+      # IDEs use the provided src.zip to navigate the Java codebase (https://github.com/NixOS/nixpkgs/pull/95081)
+      ln -s $out/lib/openjdk/lib/src.zip $out/lib/src.zip
+
+      # jni.h expects jni_md.h to be in the header search path.
+      ln -s $out/include/linux/*_md.h $out/include/
+
+      # Remove crap from the installation.
+      rm -rf $out/lib/openjdk/demo
+      ${lib.optionalString headless ''
+        rm $out/lib/openjdk/lib/{libjsound,libfontmanager}.so
+      ''}
+
+      ln -s $out/lib/openjdk/bin $out/bin
+    '';
+
+    preFixup = ''
+      # Propagate the setJavaClassPath setup hook so that any package
+      # that depends on the JDK has $CLASSPATH set up properly.
+      mkdir -p $out/nix-support
+      #TODO or printWords?  cf https://github.com/NixOS/nixpkgs/pull/27427#issuecomment-317293040
+      echo -n "${setJavaClassPath}" > $out/nix-support/propagated-build-inputs
+
+      # Set JAVA_HOME automatically.
+      mkdir -p $out/nix-support
+      cat <<EOF > $out/nix-support/setup-hook
+      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out/lib/openjdk; fi
+      EOF
+    '';
+
+    postFixup = ''
+      # Build the set of output library directories to rpath against
+      LIBDIRS=""
+      for output in $(getAllOutputNames); do
+        if [ "$output" = debug ]; then continue; fi
+        LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort -u | tr '\n' ':'):$LIBDIRS"
+      done
+      # Add the local library paths to remove dependencies on the bootstrap
+      for output in $(getAllOutputNames); do
+        if [ "$output" = debug ]; then continue; fi
+        OUTPUTDIR=$(eval echo \$$output)
+        BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*)
+        echo "$BINLIBS" | while read i; do
+          patchelf --set-rpath "$LIBDIRS:$(patchelf --print-rpath "$i")" "$i" || true
+          patchelf --shrink-rpath "$i" || true
+        done
+      done
+    '';
+
+    disallowedReferences = [ openjdk-bootstrap ];
+
+    pos = builtins.unsafeGetAttrPos "feature" version;
+    meta = import ./meta.nix lib version.feature;
+
+    passthru = {
+      architecture = "";
+      home = "${openjdk}/lib/openjdk";
+      inherit gtk3;
+    };
+  };
+in openjdk
diff --git a/pkgs/development/compilers/openjdk/darwin/11.nix b/pkgs/development/compilers/openjdk/darwin/11.nix
deleted file mode 100644
index 48de3767938..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/11.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, unzip
-, setJavaClassPath
-, enableJavaFX ? false
-}:
-let
-  # Details from https://www.azul.com/downloads/?version=java-11-lts&os=macos&package=jdk
-  # Note that the latest build may differ by platform
-  dist = {
-    x86_64-darwin = {
-      arch = "x64";
-      zuluVersion = "11.66.15";
-      jdkVersion = "11.0.20";
-      hash =
-        if enableJavaFX then "sha256-pVgCJkgYTlFeL7nkkMWLeJ/J8ELhgvWb7gzf3erZP7Y="
-        else "sha256-vKqxHP5Yb651g8bZ0xHGQ4Q1T7JjjrmgEuykw/Gh2f0=";
-    };
-
-    aarch64-darwin = {
-      arch = "aarch64";
-      zuluVersion = "11.66.15";
-      jdkVersion = "11.0.20";
-      hash =
-        if enableJavaFX then "sha256-VoZo34SCUU+HHnTl6iLe0QBC+4VDkPP14N98oqSg9EQ="
-        else "sha256-djK8Kfikt9SSuT87x1p7YWMIlNuF0TZFYDWrKiTTiIU=";
-    };
-  }."${stdenv.hostPlatform.system}";
-
-  jce-policies = fetchurl {
-    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
-  };
-
-  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
-
-  jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-${javaPackage}";
-    version = dist.jdkVersion;
-
-    src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) hash;
-      curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
-    };
-
-    nativeBuildInputs = [ unzip ];
-
-    installPhase = ''
-      mkdir -p $out
-      mv * $out
-
-      unzip ${jce-policies}
-      mv -f ZuluJCEPolicies/*.jar $out/lib/security/
-
-      # jni.h expects jni_md.h to be in the header search path.
-      ln -s $out/include/darwin/*_md.h $out/include/
-
-      if [ -f $out/LICENSE ]; then
-        install -D $out/LICENSE $out/share/zulu/LICENSE
-        rm $out/LICENSE
-      fi
-    '';
-
-    preFixup = ''
-      # Propagate the setJavaClassPath setup hook from the JDK so that
-      # any package that depends on the JDK has $CLASSPATH set up
-      # properly.
-      mkdir -p $out/nix-support
-      printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
-
-      # Set JAVA_HOME automatically.
-      cat <<EOF >> $out/nix-support/setup-hook
-      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
-      EOF
-    '';
-
-    # fixupPhase is moving the man to share/man which breaks it because it's a
-    # relative symlink.
-    postFixup = ''
-      ln -nsf ../zulu-11.jdk/Contents/Home/man $out/share/man
-    '';
-
-    passthru = {
-      home = jdk;
-    };
-
-    meta = import ./meta.nix lib version;
-  };
-in
-jdk
diff --git a/pkgs/development/compilers/openjdk/darwin/16.nix b/pkgs/development/compilers/openjdk/darwin/16.nix
deleted file mode 100644
index 657b3eeafea..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/16.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, unzip
-, setJavaClassPath
-, enableJavaFX ? false
-}:
-let
-  # Details from https://www.azul.com/downloads/?version=java-16-sts&os=macos&package=jdk
-  # Note that the latest build may differ by platform
-  dist = {
-    x86_64-darwin = {
-      arch = "x64";
-      zuluVersion = "16.32.15";
-      jdkVersion = "16.0.2";
-      hash =
-        if enableJavaFX then "sha256-6URaSBNHQWLauO//kCuKXb4Z7AqyshWnoeJEyVRKgaY="
-        else "sha256-NXgBj/KixTknaCYbo3B+rOo11NImH5CDUIU0LhTCtMo=";
-    };
-
-    aarch64-darwin = {
-      arch = "aarch64";
-      zuluVersion = "16.32.15";
-      jdkVersion = "16.0.2";
-      hash =
-        if enableJavaFX then "sha256-QuyhIAxUY3Vv1adGihW+LIsXtpDX2taCmFsMFj9o5vs="
-        else "sha256-3bUfDcLLyahLeURFAgLAVapBZHvqtam8GHbWTA6MQog=";
-    };
-  }."${stdenv.hostPlatform.system}";
-
-  jce-policies = fetchurl {
-    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
-  };
-
-  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
-
-  jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-${javaPackage}";
-    version = dist.jdkVersion;
-
-    src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) hash;
-      curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
-    };
-
-    nativeBuildInputs = [ unzip ];
-
-    installPhase = ''
-      mkdir -p $out
-      mv * $out
-
-      unzip ${jce-policies}
-      mv -f ZuluJCEPolicies/*.jar $out/lib/security/
-
-      # jni.h expects jni_md.h to be in the header search path.
-      ln -s $out/include/darwin/*_md.h $out/include/
-
-      if [ -f $out/LICENSE ]; then
-        install -D $out/LICENSE $out/share/zulu/LICENSE
-        rm $out/LICENSE
-      fi
-    '';
-
-    preFixup = ''
-      # Propagate the setJavaClassPath setup hook from the JDK so that
-      # any package that depends on the JDK has $CLASSPATH set up
-      # properly.
-      mkdir -p $out/nix-support
-      printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
-
-      # Set JAVA_HOME automatically.
-      cat <<EOF >> $out/nix-support/setup-hook
-      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
-      EOF
-    '';
-
-    # fixupPhase is moving the man to share/man which breaks it because it's a
-    # relative symlink.
-    postFixup = ''
-      ln -nsf ../zulu-${lib.versions.major version}.jdk/Contents/Home/man $out/share/man
-    '';
-
-    passthru = {
-      home = jdk;
-    };
-
-    meta = import ./meta.nix lib version;
-  };
-in
-jdk
diff --git a/pkgs/development/compilers/openjdk/darwin/17.nix b/pkgs/development/compilers/openjdk/darwin/17.nix
deleted file mode 100644
index 3034e164e64..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/17.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, unzip
-, setJavaClassPath
-, enableJavaFX ? false
-}:
-let
-  # Details from https://www.azul.com/downloads/?version=java-17-lts&os=macos&package=jdk
-  # Note that the latest build may differ by platform
-  dist = {
-    x86_64-darwin = {
-      arch = "x64";
-      zuluVersion = "17.44.15";
-      jdkVersion = "17.0.8";
-      hash =
-        if enableJavaFX then "sha256-gmDku/AkWzO+eDRitezM9wCtTYDrUMtXyMulxqi9tNI="
-        else "sha256-Ci18gBkAv/UUIQw9KlnfibcQMXwQRGx6K7L/NBB7b7Q=";
-    };
-
-    aarch64-darwin = {
-      arch = "aarch64";
-      zuluVersion = "17.44.15";
-      jdkVersion = "17.0.8";
-      hash =
-        if enableJavaFX then "sha256-mvyfqpnAoA05HJB9EBewW2MDuhQBOvp6svzyayV1irI="
-        else "sha256-8b81QY6DGXVOsTKM8QDzJnYjXV0ipCbYWaaz6oF2A6k=";
-    };
-  }."${stdenv.hostPlatform.system}";
-
-  jce-policies = fetchurl {
-    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
-  };
-
-  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
-
-  jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-${javaPackage}";
-    version = dist.jdkVersion;
-
-    src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) hash;
-      curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
-    };
-
-    nativeBuildInputs = [ unzip ];
-
-    installPhase = ''
-      mkdir -p $out
-      mv * $out
-
-      unzip ${jce-policies}
-      mv -f ZuluJCEPolicies/*.jar $out/lib/security/
-
-      # jni.h expects jni_md.h to be in the header search path.
-      ln -s $out/include/darwin/*_md.h $out/include/
-
-      if [ -f $out/LICENSE ]; then
-        install -D $out/LICENSE $out/share/zulu/LICENSE
-        rm $out/LICENSE
-      fi
-    '';
-
-    preFixup = ''
-      # Propagate the setJavaClassPath setup hook from the JDK so that
-      # any package that depends on the JDK has $CLASSPATH set up
-      # properly.
-      mkdir -p $out/nix-support
-      printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
-
-      # Set JAVA_HOME automatically.
-      cat <<EOF >> $out/nix-support/setup-hook
-      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
-      EOF
-    '';
-
-    # fixupPhase is moving the man to share/man which breaks it because it's a
-    # relative symlink.
-    postFixup = ''
-      ln -nsf ../zulu-${lib.versions.major version}.jdk/Contents/Home/man $out/share/man
-    '';
-
-    passthru = {
-      home = jdk;
-    };
-
-    meta = import ./meta.nix lib version;
-  };
-in
-jdk
diff --git a/pkgs/development/compilers/openjdk/darwin/18.nix b/pkgs/development/compilers/openjdk/darwin/18.nix
deleted file mode 100644
index 30a61b4b1fa..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/18.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, unzip
-, setJavaClassPath
-, enableJavaFX ? false
-}:
-let
-  # Details from https://www.azul.com/downloads/?version=java-18-sts&os=macos&package=jdk
-  # Note that the latest build may differ by platform
-  dist = {
-    x86_64-darwin = {
-      arch = "x64";
-      zuluVersion = "18.32.13";
-      jdkVersion = "18.0.2.1";
-      hash =
-        if enableJavaFX then "sha256-ZVZ1gbpJwxTduq2PPOCKqbSl+shq2NTFgqG++OXvFcg="
-        else "sha256-uHPcyOgxUdTgzmIVRp/awtwve9zSt+1TZNef7DUuoRg=";
-    };
-
-    aarch64-darwin = {
-      arch = "aarch64";
-      zuluVersion = "18.32.13";
-      jdkVersion = "18.0.2.1";
-      hash =
-        if enableJavaFX then "sha256-tNx0a1u9iamcN9VFOJ3eqDEA6C204dtIBJZvuAH2Vjk="
-        else "sha256-jAZDgxtWMq/74yKAxA69oOU0C9nXvKG5MjmZLsK04iM=";
-    };
-  }."${stdenv.hostPlatform.system}";
-
-  jce-policies = fetchurl {
-    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
-  };
-
-  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
-
-  jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-${javaPackage}";
-    version = dist.jdkVersion;
-
-    src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) hash;
-      curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
-    };
-
-    nativeBuildInputs = [ unzip ];
-
-    installPhase = ''
-      mkdir -p $out
-      mv * $out
-
-      unzip ${jce-policies}
-      mv -f ZuluJCEPolicies/*.jar $out/lib/security/
-
-      # jni.h expects jni_md.h to be in the header search path.
-      ln -s $out/include/darwin/*_md.h $out/include/
-
-      if [ -f $out/LICENSE ]; then
-        install -D $out/LICENSE $out/share/zulu/LICENSE
-        rm $out/LICENSE
-      fi
-    '';
-
-    preFixup = ''
-      # Propagate the setJavaClassPath setup hook from the JDK so that
-      # any package that depends on the JDK has $CLASSPATH set up
-      # properly.
-      mkdir -p $out/nix-support
-      printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
-
-      # Set JAVA_HOME automatically.
-      cat <<EOF >> $out/nix-support/setup-hook
-      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
-      EOF
-    '';
-
-    # fixupPhase is moving the man to share/man which breaks it because it's a
-    # relative symlink.
-    postFixup = ''
-      ln -nsf ../zulu-${lib.versions.major version}.jdk/Contents/Home/man $out/share/man
-    '';
-
-    passthru = {
-      home = jdk;
-    };
-
-    meta = import ./meta.nix lib version;
-  };
-in
-jdk
diff --git a/pkgs/development/compilers/openjdk/darwin/19.nix b/pkgs/development/compilers/openjdk/darwin/19.nix
deleted file mode 100644
index a087de1b572..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/19.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, unzip
-, setJavaClassPath
-, enableJavaFX ? false
-}:
-let
-  # Details from https://www.azul.com/downloads/?version=java-19-sts&os=macos&package=jdk
-  # Note that the latest build may differ by platform
-  dist = {
-    x86_64-darwin = {
-      arch = "x64";
-      zuluVersion = if enableJavaFX then "19.32.15" else "19.32.13";
-      jdkVersion = "19.0.2";
-      hash =
-        if enableJavaFX then "sha256-AwLcIId0gH5D6DUU8CgJ3qnKVQm28LXYirBeXBHwPYE="
-        else "sha256-KARXWumsY+OcqpEOV2EL9SsPni1nGSipjRji/Mn2KsE=";
-    };
-
-    aarch64-darwin = {
-      arch = "aarch64";
-      zuluVersion = if enableJavaFX then "19.32.15" else "19.32.13";
-      jdkVersion = "19.0.2";
-      hash =
-        if enableJavaFX then "sha256-/R2rrcBr64qPGEtvhruXBhPwnvurt/hiR1ICzZAdYxE="
-        else "sha256-F30FjZaLL756X/Xs6xjNwW9jds4pEATxoxOeeLL7Y5E=";
-    };
-  }."${stdenv.hostPlatform.system}";
-
-  jce-policies = fetchurl {
-    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
-  };
-
-  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
-
-  jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-${javaPackage}";
-    version = dist.jdkVersion;
-
-    src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) hash;
-      curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
-    };
-
-    nativeBuildInputs = [ unzip ];
-
-    installPhase = ''
-      mkdir -p $out
-      mv * $out
-
-      unzip ${jce-policies}
-      mv -f ZuluJCEPolicies/*.jar $out/lib/security/
-
-      # jni.h expects jni_md.h to be in the header search path.
-      ln -s $out/include/darwin/*_md.h $out/include/
-
-      if [ -f $out/LICENSE ]; then
-        install -D $out/LICENSE $out/share/zulu/LICENSE
-        rm $out/LICENSE
-      fi
-    '';
-
-    preFixup = ''
-      # Propagate the setJavaClassPath setup hook from the JDK so that
-      # any package that depends on the JDK has $CLASSPATH set up
-      # properly.
-      mkdir -p $out/nix-support
-      printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
-
-      # Set JAVA_HOME automatically.
-      cat <<EOF >> $out/nix-support/setup-hook
-      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
-      EOF
-    '';
-
-    # fixupPhase is moving the man to share/man which breaks it because it's a
-    # relative symlink.
-    postFixup = ''
-      ln -nsf ../zulu-${lib.versions.major version}.jdk/Contents/Home/man $out/share/man
-    '';
-
-    passthru = {
-      home = jdk;
-    };
-
-    meta = import ./meta.nix lib version;
-  };
-in
-jdk
diff --git a/pkgs/development/compilers/openjdk/darwin/20.nix b/pkgs/development/compilers/openjdk/darwin/20.nix
deleted file mode 100644
index b0c62aafd78..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/20.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, unzip
-, setJavaClassPath
-, enableJavaFX ? false
-}:
-let
-  # Details from https://www.azul.com/downloads/?version=java-19-sts&os=macos&package=jdk
-  # Note that the latest build may differ by platform
-  dist = {
-    x86_64-darwin = {
-      arch = "x64";
-      zuluVersion = "20.32.11";
-      jdkVersion = "20.0.2";
-      hash =
-        if enableJavaFX then "sha256-hyxQAivZAXtqMebe30L+EYa7p+TdSdKNYj7Rl/ZwRNQ="
-        else "sha256-Ev9KG6DvuBnsZrOguLsO1KQzudHCBcJNwKh45Inpnfo=";
-    };
-
-    aarch64-darwin = {
-      arch = "aarch64";
-      zuluVersion = "20.32.11";
-      jdkVersion = "20.0.2";
-      hash =
-        if enableJavaFX then "sha256-iPQzZS4CwaoqT8cSzg4kWCT1OyGBSJLq+NETcbucLo4="
-        else "sha256-15uNZ6uMfSASV3QU2q2oA/jBk2PCHOfSjn1GY7/7qIY=";
-    };
-  }."${stdenv.hostPlatform.system}";
-
-  jce-policies = fetchurl {
-    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
-  };
-
-  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
-
-  jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-${javaPackage}";
-    version = dist.jdkVersion;
-
-    src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) hash;
-      curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
-    };
-
-    nativeBuildInputs = [ unzip ];
-
-    installPhase = ''
-      mkdir -p $out
-      mv * $out
-
-      unzip ${jce-policies}
-      mv -f ZuluJCEPolicies/*.jar $out/lib/security/
-
-      # jni.h expects jni_md.h to be in the header search path.
-      ln -s $out/include/darwin/*_md.h $out/include/
-
-      if [ -f $out/LICENSE ]; then
-        install -D $out/LICENSE $out/share/zulu/LICENSE
-        rm $out/LICENSE
-      fi
-    '';
-
-    preFixup = ''
-      # Propagate the setJavaClassPath setup hook from the JDK so that
-      # any package that depends on the JDK has $CLASSPATH set up
-      # properly.
-      mkdir -p $out/nix-support
-      printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
-
-      # Set JAVA_HOME automatically.
-      cat <<EOF >> $out/nix-support/setup-hook
-      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
-      EOF
-    '';
-
-    # fixupPhase is moving the man to share/man which breaks it because it's a
-    # relative symlink.
-    postFixup = ''
-      ln -nsf ../zulu-${lib.versions.major version}.jdk/Contents/Home/man $out/share/man
-    '';
-
-    passthru = {
-      home = jdk;
-    };
-
-    meta = import ./meta.nix lib version;
-  };
-in
-jdk
diff --git a/pkgs/development/compilers/openjdk/darwin/8.nix b/pkgs/development/compilers/openjdk/darwin/8.nix
deleted file mode 100644
index 9bfd9a8db1a..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/8.nix
+++ /dev/null
@@ -1,96 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, unzip
-, setJavaClassPath
-, enableJavaFX ? false
-}:
-let
-  # Details from https://www.azul.com/downloads/?version=java-8-lts&os=macos&package=jdk
-  # Note that the latest build may differ by platform
-  dist = {
-    x86_64-darwin = {
-      arch = "x64";
-      zuluVersion = "8.72.0.17";
-      jdkVersion = "8.0.382";
-      hash =
-        if enableJavaFX then "sha256-/x8FqygivzddXsOwIV8aj/u+LPXMmokgu97vLAVEv80="
-        else "sha256-3dTPIPGUeT6nb3gncNvEa4VTRyQIBJpp8oZadrT2ToE=";
-    };
-
-    aarch64-darwin = {
-      arch = "aarch64";
-      zuluVersion = "8.72.0.17";
-      jdkVersion = "8.0.382";
-      hash =
-        if enableJavaFX then "sha256-FkQ+0MzSZWUzc/HmiDVZEHGOrdKAVCdK5pm9wXXzzaU="
-        else "sha256-rN5AI4xAWppE4kJlzMod0JmGyHdHjTXYtx8/wOW6CFk=";
-    };
-  }."${stdenv.hostPlatform.system}";
-
-  jce-policies = fetchurl {
-    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
-  };
-
-  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
-
-  jdk = stdenv.mkDerivation rec {
-    # @hlolli: Later version than 1.8.0_202 throws error when building jvmci.
-    # dyld: lazy symbol binding failed: Symbol not found: _JVM_BeforeHalt
-    # Referenced from: ../libjava.dylib Expected in: .../libjvm.dylib
-    pname = "zulu${dist.zuluVersion}-${javaPackage}";
-    version = dist.jdkVersion;
-
-    src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) hash;
-      curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
-    };
-
-    nativeBuildInputs = [ unzip ];
-
-    installPhase = ''
-      mkdir -p $out
-      mv * $out
-
-      unzip ${jce-policies}
-      mv -f ZuluJCEPolicies/*.jar $out/jre/lib/security/
-
-      # jni.h expects jni_md.h to be in the header search path.
-      ln -s $out/include/darwin/*_md.h $out/include/
-
-      if [ -f $out/LICENSE ]; then
-        install -D $out/LICENSE $out/share/zulu/LICENSE
-        rm $out/LICENSE
-      fi
-    '';
-
-    preFixup = ''
-      # Propagate the setJavaClassPath setup hook from the JRE so that
-      # any package that depends on the JRE has $CLASSPATH set up
-      # properly.
-      mkdir -p $out/nix-support
-      printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
-
-      # Set JAVA_HOME automatically.
-      cat <<EOF >> $out/nix-support/setup-hook
-      if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
-      EOF
-    '';
-
-    # fixupPhase is moving the man to share/man which breaks it because it's a
-    # relative symlink.
-    postFixup = ''
-      ln -nsf ../zulu-${lib.versions.major version}.jdk/Contents/Home/man $out/share/man
-    '';
-
-    passthru = {
-      jre = jdk;
-      home = jdk;
-    };
-
-    meta = import ./meta.nix lib version;
-  };
-in
-jdk
diff --git a/pkgs/development/compilers/openjdk/darwin/meta.nix b/pkgs/development/compilers/openjdk/darwin/meta.nix
deleted file mode 100644
index f07a7f38a45..00000000000
--- a/pkgs/development/compilers/openjdk/darwin/meta.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-lib: version: (removeAttrs (import ../meta.nix lib version) [ "maintainers" ]) // {
-  platforms = lib.platforms.darwin;
-  homepage = "https://www.azul.com/";
-}
diff --git a/pkgs/development/compilers/openjdk/fix-java-home-jdk21.patch b/pkgs/development/compilers/openjdk/fix-java-home-jdk21.patch
new file mode 100644
index 00000000000..ede201ed1ad
--- /dev/null
+++ b/pkgs/development/compilers/openjdk/fix-java-home-jdk21.patch
@@ -0,0 +1,14 @@
+--- a/src/hotspot/os/linux/os_linux.cpp	2017-07-04 23:09:02.533972226 -0400
++++ b/src/hotspot/os/linux/os_linux.cpp	2017-07-04 23:07:52.118338845 -0400
+@@ -2270,8 +2270,5 @@
+   assert(ret, "cannot locate libjvm");
+   char *rp = nullptr;
+   if (ret && dli_fname[0] != '\0') {
+-    rp = os::Posix::realpath(dli_fname, buf, buflen);
+-  }
+-  if (rp == nullptr) {
+-    return;
++    snprintf(buf, buflen, "%s", dli_fname);
+   }
+
+   if (Arguments::sun_java_launcher_is_altjvm()) {
diff --git a/pkgs/development/compilers/openjdk/openjfx/11.nix b/pkgs/development/compilers/openjdk/openjfx/11.nix
index d5ec912bfed..6d550538b08 100644
--- a/pkgs/development/compilers/openjdk/openjfx/11.nix
+++ b/pkgs/development/compilers/openjdk/openjfx/11.nix
@@ -42,6 +42,7 @@ let
     buildPhase = ''
       runHook preBuild
 
+      export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
       export GRADLE_USER_HOME=$(mktemp -d)
       ln -s $config gradle.properties
       export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
diff --git a/pkgs/development/compilers/openjdk/openjfx/15.nix b/pkgs/development/compilers/openjdk/openjfx/15.nix
index b7ee8a02581..5ec888e49e5 100644
--- a/pkgs/development/compilers/openjdk/openjfx/15.nix
+++ b/pkgs/development/compilers/openjdk/openjfx/15.nix
@@ -47,6 +47,7 @@ let
     buildPhase = ''
       runHook preBuild
 
+      export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
       export GRADLE_USER_HOME=$(mktemp -d)
       ln -s $config gradle.properties
       export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
diff --git a/pkgs/development/compilers/openjdk/openjfx/17.nix b/pkgs/development/compilers/openjdk/openjfx/17.nix
index a6300c38581..65d6697c6ef 100644
--- a/pkgs/development/compilers/openjdk/openjfx/17.nix
+++ b/pkgs/development/compilers/openjdk/openjfx/17.nix
@@ -49,6 +49,7 @@ let
     buildPhase = ''
       runHook preBuild
 
+      export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
       export GRADLE_USER_HOME=$(mktemp -d)
       ln -s $config gradle.properties
       export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
diff --git a/pkgs/development/compilers/openjdk/openjfx/19.nix b/pkgs/development/compilers/openjdk/openjfx/19.nix
index bb909a31624..802a0eb9b45 100644
--- a/pkgs/development/compilers/openjdk/openjfx/19.nix
+++ b/pkgs/development/compilers/openjdk/openjfx/19.nix
@@ -51,6 +51,7 @@ let
     buildPhase = ''
       runHook preBuild
 
+      export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
       export GRADLE_USER_HOME=$(mktemp -d)
       ln -s $config gradle.properties
       export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
diff --git a/pkgs/development/compilers/openjdk/openjfx/20.nix b/pkgs/development/compilers/openjdk/openjfx/20.nix
index 430b32187b3..d570db3b9ae 100644
--- a/pkgs/development/compilers/openjdk/openjfx/20.nix
+++ b/pkgs/development/compilers/openjdk/openjfx/20.nix
@@ -38,6 +38,7 @@ let
     buildPhase = ''
       runHook preBuild
 
+      export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
       export GRADLE_USER_HOME=$(mktemp -d)
       ln -s $config gradle.properties
       export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
diff --git a/pkgs/development/compilers/openjdk/openjfx/21.nix b/pkgs/development/compilers/openjdk/openjfx/21.nix
new file mode 100644
index 00000000000..2f0d83f9f25
--- /dev/null
+++ b/pkgs/development/compilers/openjdk/openjfx/21.nix
@@ -0,0 +1,114 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, writeText, openjdk17_headless
+, openjdk19_headless, gradle_7, pkg-config, perl, cmake, gperf, gtk2, gtk3, libXtst
+, libXxf86vm, glib, alsa-lib, ffmpeg_4, python3, ruby, icu68
+, withMedia ? true
+, withWebKit ? false
+}:
+
+let
+  major = "21";
+  update = "";
+  build = "-ga";
+  repover = "${major}${update}${build}";
+  gradle_ = (gradle_7.override {
+    # note: gradle does not yet support running on 19
+    java = openjdk17_headless;
+  });
+
+  makePackage = args: stdenv.mkDerivation ({
+    version = "${major}${update}${build}";
+
+    src = fetchFromGitHub {
+      owner = "openjdk";
+      repo = "jfx";
+      rev = repover;
+      hash = "sha256-deNAGfnA6gwcAa64l0AWdkX+vJd3ZOfIgAifSl+/m+s=";
+    };
+
+    buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_4 icu68 ];
+    nativeBuildInputs = [ gradle_ perl pkg-config cmake gperf python3 ruby ];
+
+    dontUseCmakeConfigure = true;
+
+    config = writeText "gradle.properties" (''
+      CONF = Release
+      JDK_HOME = ${openjdk19_headless.home}
+    '' + args.gradleProperties or "");
+
+    buildPhase = ''
+      runHook preBuild
+
+      export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
+      export GRADLE_USER_HOME=$(mktemp -d)
+      ln -s $config gradle.properties
+      export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
+      gradle --no-daemon $gradleFlags sdk
+
+      runHook postBuild
+    '';
+  } // args);
+
+  # Fake build to pre-download deps into fixed-output derivation.
+  # We run nearly full build because I see no other way to download everything that's needed.
+  # Anyone who knows a better way?
+  deps = makePackage {
+    pname = "openjfx-deps";
+
+    # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME -type f -regex '.*/modules.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+      rm -rf $out/tmp
+    '';
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    # suspiciously the same as for openjfx 17 ...
+    # could they really not have changed any of their dependencies?
+    # or did we miss changing another upstream hash when copy-pasting?
+    outputHash = "sha256-dV7/U5GpFxhI13smZ587C6cVE4FRNPY0zexZkYK4Yqo=";
+  };
+
+in makePackage {
+  pname = "openjfx-modular-sdk";
+
+  gradleProperties = ''
+    COMPILE_MEDIA = ${lib.boolToString withMedia}
+    COMPILE_WEBKIT = ${lib.boolToString withWebKit}
+  '';
+
+  preBuild = ''
+    swtJar="$(find ${deps} -name org.eclipse.swt\*.jar)"
+    substituteInPlace build.gradle \
+      --replace 'mavenCentral()' 'mavenLocal(); maven { url uri("${deps}") }' \
+      --replace 'name: SWT_FILE_NAME' "files('$swtJar')"
+  '';
+
+  installPhase = ''
+    cp -r build/modular-sdk $out
+  '';
+
+  stripDebugList = [ "." ];
+
+  postFixup = ''
+    # Remove references to bootstrap.
+    export openjdkOutPath='${openjdk19_headless.outPath}'
+    find "$out" -name \*.so | while read lib; do
+      new_refs="$(patchelf --print-rpath "$lib" | perl -pe 's,:?\Q$ENV{openjdkOutPath}\E[^:]*,,')"
+      patchelf --set-rpath "$new_refs" "$lib"
+    done
+  '';
+
+  disallowedReferences = [ openjdk17_headless openjdk19_headless ];
+
+  passthru.deps = deps;
+
+  meta = with lib; {
+    homepage = "https://openjdk.org/projects/openjfx/";
+    license = licenses.gpl2Classpath;
+    description = "The next-generation Java client toolkit";
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.unix;
+  };
+}