diff --git a/pkgs/development/compilers/openjdk/12.nix b/pkgs/development/compilers/openjdk/12.nix new file mode 100644 index 000000000000..094bd57e6e98 --- /dev/null +++ b/pkgs/development/compilers/openjdk/12.nix @@ -0,0 +1,155 @@ +{ stdenv, lib, fetchurl, bash, pkgconfig, autoconf, cpio, file, which, unzip +, zip, perl, cups, freetype, alsaLib, libjpeg, giflib, libpng, zlib, lcms2 +, libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama +, libXcursor, libXrandr, fontconfig, openjdk11 +, setJavaClassPath +, headless ? false +, enableJavaFX ? openjfx.meta.available, openjfx +, enableGnome2 ? true, gtk3, gnome_vfs, glib, GConf +}: + +let + major = "12"; + update = ".0.2"; + build = "ga"; + + openjdk = stdenv.mkDerivation rec { + pname = "openjdk" + lib.optionalString headless "-headless"; + version = "${major}${update}-${build}"; + + src = fetchurl { + url = "http://hg.openjdk.java.net/jdk-updates/jdk${major}u/archive/jdk-${version}.tar.gz"; + sha256 = "1ndlxmikyy298z7lqpr1bd0zxq7yx6xidj8y3c8mw9m9fy64h9c7"; + }; + + nativeBuildInputs = [ pkgconfig autoconf ]; + buildInputs = [ + cpio file which unzip zip perl zlib cups freetype alsaLib libjpeg giflib + libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst + libXi libXinerama libXcursor libXrandr fontconfig openjdk11 + ] ++ lib.optionals (!headless && enableGnome2) [ + gtk3 gnome_vfs GConf glib + ]; + + patches = [ + ./fix-java-home-jdk10.patch + ./read-truststore-from-env-jdk10.patch + ./currency-date-range-jdk10.patch + ./increase-javadoc-heap.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"; + }) + ] ++ lib.optionals (!headless && enableGnome2) [ + ./swing-use-gtk-jdk10.patch + ]; + + prePatch = '' + chmod +x configure + patchShebangs --build configure + ''; + + configureFlags = [ + "--with-boot-jdk=${openjdk11.home}" + "--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; + + NIX_CFLAGS_COMPILE = [ "-Wno-error" ]; + + NIX_LDFLAGS = lib.optionals (!headless) [ + "-lfontconfig" "-lcups" "-lXinerama" "-lXrandr" "-lmagic" + ] ++ lib.optionals (!headless && enableGnome2) [ + "-lgtk-3" "-lgio-2.0" "-lgnomevfs-2" "-lgconf-2" + ]; + + buildFlags = [ "all" ]; + + 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 + + # 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 < $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 $outputs; do + if [ "$output" = debug ]; then continue; fi + LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort | uniq | tr '\n' ':'):$LIBDIRS" + done + # Add the local library paths to remove dependencies on the bootstrap + for output in $outputs; 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 = [ openjdk11 ]; + + meta = with stdenv.lib; { + homepage = http://openjdk.java.net/; + license = licenses.gpl2; + description = "The open-source Java Development Kit"; + maintainers = with maintainers; [ edwtjo ]; + platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux" "armv6l-linux" ]; + }; + + passthru = { + architecture = ""; + home = "${openjdk}/lib/openjdk"; + }; + }; +in openjdk diff --git a/pkgs/development/compilers/openjdk/darwin/default.nix b/pkgs/development/compilers/openjdk/darwin/default.nix index 58e4ba990149..d080bcf38297 100644 --- a/pkgs/development/compilers/openjdk/darwin/default.nix +++ b/pkgs/development/compilers/openjdk/darwin/default.nix @@ -7,11 +7,11 @@ let }; jdk = stdenv.mkDerivation rec { - name = "zulu12.1.3-ca-jdk12"; + name = "zulu13.28.11-ca-jdk13.0.1"; src = fetchurl { url = "https://cdn.azul.com/zulu/bin/${name}-macosx_x64.tar.gz"; - sha256 = "05q3v4vwjd7xhqr21bzlip5x4xhq5rpdshfpb8i86n4zvn7l0mxy"; + sha256 = "0j148gq7vwhda6y9sazy0qg6ka7milywrdhbvmd31a1xp303r37b"; curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/"; }; diff --git a/pkgs/development/compilers/openjdk/default.nix b/pkgs/development/compilers/openjdk/default.nix index 094bd57e6e98..616d946ef663 100644 --- a/pkgs/development/compilers/openjdk/default.nix +++ b/pkgs/development/compilers/openjdk/default.nix @@ -1,7 +1,7 @@ { stdenv, lib, fetchurl, bash, pkgconfig, autoconf, cpio, file, which, unzip , zip, perl, cups, freetype, alsaLib, libjpeg, giflib, libpng, zlib, lcms2 , libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama -, libXcursor, libXrandr, fontconfig, openjdk11 +, libXcursor, libXrandr, fontconfig, openjdk13-bootstrap , setJavaClassPath , headless ? false , enableJavaFX ? openjfx.meta.available, openjfx @@ -9,24 +9,24 @@ }: let - major = "12"; - update = ".0.2"; - build = "ga"; + major = "13"; + update = ".0.1"; + build = "-ga"; openjdk = stdenv.mkDerivation rec { pname = "openjdk" + lib.optionalString headless "-headless"; - version = "${major}${update}-${build}"; + version = "${major}${update}${build}"; src = fetchurl { url = "http://hg.openjdk.java.net/jdk-updates/jdk${major}u/archive/jdk-${version}.tar.gz"; - sha256 = "1ndlxmikyy298z7lqpr1bd0zxq7yx6xidj8y3c8mw9m9fy64h9c7"; + sha256 = "1pmgbzlr97ns9fvi3a193miziv5v8fvk9jgymspllsvmb6x9lppk"; }; nativeBuildInputs = [ pkgconfig autoconf ]; buildInputs = [ cpio file which unzip zip perl zlib cups freetype alsaLib libjpeg giflib libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst - libXi libXinerama libXcursor libXrandr fontconfig openjdk11 + libXi libXinerama libXcursor libXrandr fontconfig openjdk13-bootstrap ] ++ lib.optionals (!headless && enableGnome2) [ gtk3 gnome_vfs GConf glib ]; @@ -35,7 +35,7 @@ let ./fix-java-home-jdk10.patch ./read-truststore-from-env-jdk10.patch ./currency-date-range-jdk10.patch - ./increase-javadoc-heap.patch + ./increase-javadoc-heap-jdk13.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 @@ -45,7 +45,7 @@ let sha256 = "082lmc30x64x583vqq00c8y0wqih3y4r0mp1c4bqq36l22qv6b6r"; }) ] ++ lib.optionals (!headless && enableGnome2) [ - ./swing-use-gtk-jdk10.patch + ./swing-use-gtk-jdk13.patch ]; prePatch = '' @@ -54,7 +54,7 @@ let ''; configureFlags = [ - "--with-boot-jdk=${openjdk11.home}" + "--with-boot-jdk=${openjdk13-bootstrap.home}" "--enable-unlimited-crypto" "--with-native-debug-symbols=internal" "--with-libjpeg=system" @@ -137,7 +137,7 @@ let done ''; - disallowedReferences = [ openjdk11 ]; + disallowedReferences = [ openjdk13-bootstrap ]; meta = with stdenv.lib; { homepage = http://openjdk.java.net/; diff --git a/pkgs/development/compilers/openjdk/increase-javadoc-heap-jdk13.patch b/pkgs/development/compilers/openjdk/increase-javadoc-heap-jdk13.patch new file mode 100644 index 000000000000..6e48db6ac3b9 --- /dev/null +++ b/pkgs/development/compilers/openjdk/increase-javadoc-heap-jdk13.patch @@ -0,0 +1,12 @@ +diff -uw -r a/make/Docs.gmk b/make/Docs.gmk +--- a/make/Docs.gmk 2019-10-09 08:05:43.107349180 -0400 ++++ b/make/Docs.gmk 2019-10-09 08:09:29.330118790 -0400 +@@ -277,7 +277,7 @@ + $1_ALL_MODULES := $$(sort $$($1_MODULES) $$($1_INDIRECT_EXPORTS)) + + $1_JAVA_ARGS := -Dextlink.spec.version=$$(VERSION_SPECIFICATION) \ +- -Djspec.version=$$(VERSION_SPECIFICATION) ++ -Djspec.version=$$(VERSION_SPECIFICATION) -Xmx1G + + ifeq ($$(ENABLE_FULL_DOCS), true) + # Tell the ModuleGraph taglet to generate html links to soon-to-be-created diff --git a/pkgs/development/compilers/openjdk/openjfx/11.nix b/pkgs/development/compilers/openjdk/openjfx/11.nix index 43fe8ed83876..a65aea642a4a 100644 --- a/pkgs/development/compilers/openjdk/openjfx/11.nix +++ b/pkgs/development/compilers/openjdk/openjfx/11.nix @@ -29,6 +29,9 @@ let JDK_HOME = ${openjdk11-bootstrap.home} '' + args.gradleProperties or ""); + #avoids errors about deprecation of GTypeDebugFlags, GTimeVal, etc. + NIX_CFLAGS_COMPILE = [ "-DGLIB_DISABLE_DEPRECATION_WARNINGS" ]; + buildPhase = '' runHook preBuild diff --git a/pkgs/development/compilers/openjdk/openjfx/12.nix b/pkgs/development/compilers/openjdk/openjfx/13.nix similarity index 83% rename from pkgs/development/compilers/openjdk/openjfx/12.nix rename to pkgs/development/compilers/openjdk/openjfx/13.nix index 356ac4800d9f..4def48ac6473 100644 --- a/pkgs/development/compilers/openjdk/openjfx/12.nix +++ b/pkgs/development/compilers/openjdk/openjfx/13.nix @@ -3,7 +3,7 @@ , ffmpeg, python, ruby }: let - major = "12"; + major = "13"; update = ""; build = "14"; repover = "${major}${update}+${build}"; @@ -15,8 +15,8 @@ let version = "${major}${update}-${build}"; src = fetchurl { - url = "https://hg.openjdk.java.net/openjfx/${major}/rt/archive/${repover}.tar.gz"; - sha256 = "16jjfjkrg57wsj9mmm52i2kl3byz3ba1f9f8wwc8zwqm4cpjzliz"; + url = "https://hg.openjdk.java.net/openjfx/${major}-dev/rt/archive/${repover}.tar.gz"; + sha256 = "0nviv9fiwzp1z4gjbp8iz9mf601nadzcy0sx74f5y3v41a3l59qb"; }; buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsaLib ffmpeg ]; @@ -29,6 +29,9 @@ let JDK_HOME = ${openjdk11_headless.home} '' + args.gradleProperties or ""); + #avoids errors about deprecation of GTypeDebugFlags, GTimeVal, etc. + NIX_CFLAGS_COMPILE = [ "-DGLIB_DISABLE_DEPRECATION_WARNINGS" ]; + buildPhase = '' runHook preBuild @@ -59,8 +62,8 @@ let outputHashMode = "recursive"; # Downloaded AWT jars differ by platform. outputHash = { - x86_64-linux = "1z5qar5l28ja4pkf5l5m48xbv3x1yrnilsv9lpf2j3vkdk9h1nci"; - i686-linux = "0rbygvjc7w197fi5nxldqdrm6mpiyd3n45042g3gd4s5qk08spjd"; + x86_64-linux = "077zss95iq6iskx7ghz1c57ymydpzj0wm7r1pkznw99l9xwvdmqi"; + i686-linux = "03gglr2sh77cyg16qw9g45ji33dg7i93s5s30hz3mh420g112qa0"; }.${stdenv.system} or (throw "Unsupported platform"); }; @@ -72,6 +75,9 @@ in makePackage { COMPILE_WEBKIT = true ''; + #openjdk build fails if licenses are identical, so we must patch this trivial difference + patches = [ ./openjfx-mesa-license.patch ]; + preBuild = '' swtJar="$(find ${deps} -name org.eclipse.swt\*.jar)" substituteInPlace build.gradle \ diff --git a/pkgs/development/compilers/openjdk/openjfx/openjfx-mesa-license.patch b/pkgs/development/compilers/openjdk/openjfx/openjfx-mesa-license.patch new file mode 100644 index 000000000000..d3bf9e17c22b --- /dev/null +++ b/pkgs/development/compilers/openjdk/openjfx/openjfx-mesa-license.patch @@ -0,0 +1,17 @@ +--- a/modules/javafx.graphics/src/main/legal/mesa3d.md 1969-12-31 19:00:01.000000000 -0500 ++++ b/modules/javafx.graphics/src/main/legal/mesa3d.md 2019-08-08 01:05:04.000000000 -0400 +@@ -1,7 +1,7 @@ + ## Mesa 3-D Graphics Library v5.0 + + ### Mesa License +-``` ++
+ 
+ Mesa 3-D graphics library
+ Version:  5.0
+@@ -25,4 +25,4 @@
+ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ 
+-```
++
diff --git a/pkgs/development/compilers/openjdk/swing-use-gtk-jdk13.patch b/pkgs/development/compilers/openjdk/swing-use-gtk-jdk13.patch new file mode 100644 index 000000000000..8a1b9b6149bb --- /dev/null +++ b/pkgs/development/compilers/openjdk/swing-use-gtk-jdk13.patch @@ -0,0 +1,22 @@ +--- a/src/java.desktop/share/classes/javax/swing/UIManager.java 2019-08-08 01:05:04.000000000 -0400 ++++ b/src/java.desktop/share/classes/javax/swing/UIManager.java 2019-10-09 08:20:31.791606748 -0400 +@@ -660,9 +660,8 @@ + Toolkit toolkit = Toolkit.getDefaultToolkit(); + if (toolkit instanceof SunToolkit) { + SunToolkit suntk = (SunToolkit)toolkit; +- String desktop = suntk.getDesktop(); + boolean gtkAvailable = suntk.isNativeGTKAvailable(); +- if ("gnome".equals(desktop) && gtkAvailable) { ++ if (gtkAvailable) { + return "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; + } + } +@@ -1397,7 +1396,7 @@ + lafName = lafData.remove("defaultlaf"); + } + if (lafName == null) { +- lafName = getCrossPlatformLookAndFeelClassName(); ++ lafName = getSystemLookAndFeelClassName(); + } + lafName = swingProps.getProperty(defaultLAFKey, lafName); + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f6e3f63a4512..ba71a1cee9ca 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8039,7 +8039,7 @@ in openjfx11 = callPackage ../development/compilers/openjdk/openjfx/11.nix { }; - openjfx12 = callPackage ../development/compilers/openjdk/openjfx/12.nix { }; + openjfx13 = callPackage ../development/compilers/openjdk/openjfx/13.nix { }; openjdk8-bootstrap = if adoptopenjdk-hotspot-bin-8.meta.available then @@ -8084,21 +8084,33 @@ in else openjdk11.override { headless = true; }; + openjdk13-bootstrap = + if adoptopenjdk-hotspot-bin-13.meta.available then + adoptopenjdk-hotspot-bin-13 + else + /* adoptopenjdk not available for i686, so fall back to our old build of 12 for bootstrapping */ + callPackage ../development/compilers/openjdk/12.nix { + openjfx = openjfx11; /* need this despite next line :-( */ + enableJavaFX = false; + headless = true; + inherit (gnome2) GConf gnome_vfs; + }; + /* current JDK */ - openjdk12 = + openjdk13 = if stdenv.isDarwin then callPackage ../development/compilers/openjdk/darwin { } else callPackage ../development/compilers/openjdk { - openjfx = openjfx12; + openjfx = openjfx13; inherit (gnome2) GConf gnome_vfs; }; - openjdk12_headless = + openjdk13_headless = if stdenv.isDarwin then - openjdk12 + openjdk13 else - openjdk12.override { headless = true; }; + openjdk13.override { headless = true; }; openjdk = openjdk8; openjdk_headless = openjdk8_headless; @@ -8110,8 +8122,8 @@ in jdk11 = openjdk11; jdk11_headless = openjdk11_headless; - jdk12 = openjdk12; - jdk12_headless = openjdk12_headless; + jdk13 = openjdk13; + jdk13_headless = openjdk13_headless; jdk = jdk8; jre = jre8;