openjdk12: cleanup based on refactoring of openjdk11

This commit is contained in:
Ben Wolsieffer 2019-08-10 20:34:57 -04:00
parent b4480b798d
commit 5d07172f2f
2 changed files with 67 additions and 86 deletions

View File

@ -1,42 +1,33 @@
{ stdenv, lib, fetchurl, bash, cpio, autoconf, pkgconfig, file, which, unzip, zip, cups, freetype { stdenv, lib, fetchurl, bash, pkgconfig, autoconf, cpio, file, which, unzip
, alsaLib, bootjdk, perl, liberation_ttf, fontconfig, zlib, lndir , zip, perl, cups, freetype, alsaLib, libjpeg, giflib, libpng, zlib, lcms2
, libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama, libXcursor, libXrandr , libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama
, libjpeg, giflib , libXcursor, libXrandr, fontconfig, openjdk11
, setJavaClassPath , setJavaClassPath
, minimal ? false , headless ? false
, enableJavaFX ? true, openjfx , enableJavaFX ? openjfx.meta.available, openjfx
, enableGnome2 ? true, gtk3, gnome_vfs, glib, GConf , enableGnome2 ? true, gtk3, gnome_vfs, glib, GConf
}: }:
let let
/**
* The JDK libraries are in directories that depend on the CPU.
*/
architecture =
if stdenv.hostPlatform.system == "i686-linux" then
"i386"
else "amd64";
major = "12"; major = "12";
update = ".0.2"; update = ".0.2";
build = "ga"; build = "ga";
repover = "jdk-${major}${update}-${build}";
openjdk = stdenv.mkDerivation { openjdk = stdenv.mkDerivation rec {
name = "openjdk-${major}${update}-${build}"; pname = "openjdk" + lib.optionalString headless "-headless";
version = "${major}${update}-${build}";
src = fetchurl { src = fetchurl {
url = "http://hg.openjdk.java.net/jdk-updates/jdk${major}u/archive/${repover}.tar.gz"; url = "http://hg.openjdk.java.net/jdk-updates/jdk${major}u/archive/jdk-${version}.tar.gz";
sha256 = "1ndlxmikyy298z7lqpr1bd0zxq7yx6xidj8y3c8mw9m9fy64h9c7"; sha256 = "1ndlxmikyy298z7lqpr1bd0zxq7yx6xidj8y3c8mw9m9fy64h9c7";
}; };
nativeBuildInputs = [ pkgconfig ]; nativeBuildInputs = [ pkgconfig autoconf ];
buildInputs = [ buildInputs = [
autoconf cpio file which unzip zip perl bootjdk zlib cups freetype alsaLib cpio file which unzip zip perl zlib cups freetype alsaLib libjpeg giflib
libjpeg giflib libX11 libICE libXext libXrender libXtst libXt libXtst libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
libXi libXinerama libXcursor libXrandr lndir fontconfig libXi libXinerama libXcursor libXrandr fontconfig openjdk11
] ++ lib.optionals (!minimal && enableGnome2) [ ] ++ lib.optionals (!headless && enableGnome2) [
gtk3 gnome_vfs GConf glib gtk3 gnome_vfs GConf glib
]; ];
@ -53,62 +44,60 @@ let
url = https://src.fedoraproject.org/rpms/java-openjdk/raw/06c001c7d87f2e9fe4fedeef2d993bcd5d7afa2a/f/rh1673833-remove_removal_of_wformat_during_test_compilation.patch; url = https://src.fedoraproject.org/rpms/java-openjdk/raw/06c001c7d87f2e9fe4fedeef2d993bcd5d7afa2a/f/rh1673833-remove_removal_of_wformat_during_test_compilation.patch;
sha256 = "082lmc30x64x583vqq00c8y0wqih3y4r0mp1c4bqq36l22qv6b6r"; sha256 = "082lmc30x64x583vqq00c8y0wqih3y4r0mp1c4bqq36l22qv6b6r";
}) })
] ++ lib.optionals (!minimal && enableGnome2) [ ] ++ lib.optionals (!headless && enableGnome2) [
./swing-use-gtk-jdk10.patch ./swing-use-gtk-jdk10.patch
]; ];
preConfigure = '' prePatch = ''
chmod +x configure chmod +x configure
substituteInPlace configure --replace /bin/bash "${bash}/bin/bash" patchShebangs --build configure
configureFlagsArray=(
"--with-boot-jdk=${bootjdk.home}"
"--enable-unlimited-crypto"
"--with-zlib=system"
"--with-giflib=system"
"--with-stdc++lib=dynamic"
# glibc 2.24 deprecated readdir_r so we need this
# See https://www.mail-archive.com/openembedded-devel@lists.openembedded.org/msg49006.html
"--with-extra-cflags=-Wno-error=deprecated-declarations -Wno-error=unused-result"
''
+ lib.optionalString (architecture == "amd64") " \"--with-jvm-features=zgc\""
+ lib.optionalString minimal " \"--enable-headless-only\""
+ lib.optionalString (!minimal && enableJavaFX) " \"--with-import-modules=${openjfx}\""
+ ");"
# https://bugzilla.redhat.com/show_bug.cgi?id=1306558
# https://github.com/JetBrains/jdk8u/commit/eaa5e0711a43d64874111254d74893fa299d5716
+ stdenv.lib.optionalString stdenv.cc.isGNU ''
NIX_CFLAGS_COMPILE+=" -fno-lifetime-dse -fno-delete-null-pointer-checks -std=gnu++98 -Wno-error"
''; '';
NIX_LDFLAGS= lib.optionals (!minimal) [ 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" "-lfontconfig" "-lcups" "-lXinerama" "-lXrandr" "-lmagic"
] ++ lib.optionals (!minimal && enableGnome2) [ ] ++ lib.optionals (!headless && enableGnome2) [
"-lgtk-3" "-lgio-2.0" "-lgnomevfs-2" "-lgconf-2" "-lgtk-3" "-lgio-2.0" "-lgnomevfs-2" "-lgconf-2"
]; ];
buildFlags = [ "all" ]; buildFlags = [ "all" ];
installPhase = '' installPhase = ''
mkdir -p $out/lib/openjdk $out/share mkdir -p $out/lib
cp -av build/*/images/jdk/* $out/lib/openjdk mv build/*/images/jdk $out/lib/openjdk
# Remove some broken manpages. # Remove some broken manpages.
rm -rf $out/lib/openjdk/man/ja* rm -rf $out/lib/openjdk/man/ja*
# Mirror some stuff in top-level. # Mirror some stuff in top-level.
mkdir $out/include $out/share/man mkdir -p $out/share
ln -s $out/lib/openjdk/include/* $out/include/ ln -s $out/lib/openjdk/include $out/include
ln -s $out/lib/openjdk/man/* $out/share/man/ ln -s $out/lib/openjdk/man $out/share/man
# jni.h expects jni_md.h to be in the header search path. # jni.h expects jni_md.h to be in the header search path.
ln -s $out/include/linux/*_md.h $out/include/ ln -s $out/include/linux/*_md.h $out/include/
# Remove crap from the installation. # Remove crap from the installation.
rm -rf $out/lib/openjdk/demo rm -rf $out/lib/openjdk/demo
${lib.optionalString minimal '' ${lib.optionalString headless ''
rm $out/lib/openjdk/lib/{libjsound,libfontmanager}.so rm $out/lib/openjdk/lib/{libjsound,libfontmanager}.so
''} ''}
@ -133,11 +122,12 @@ let
# Build the set of output library directories to rpath against # Build the set of output library directories to rpath against
LIBDIRS="" LIBDIRS=""
for output in $outputs; do 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" LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort | uniq | tr '\n' ':'):$LIBDIRS"
done done
# Add the local library paths to remove dependencies on the bootstrap # Add the local library paths to remove dependencies on the bootstrap
for output in $outputs; do for output in $outputs; do
if [ "$output" = debug ]; then continue; fi
OUTPUTDIR=$(eval echo \$$output) OUTPUTDIR=$(eval echo \$$output)
BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*) BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*)
echo "$BINLIBS" | while read i; do echo "$BINLIBS" | while read i; do
@ -145,26 +135,20 @@ let
patchelf --shrink-rpath "$i" || true patchelf --shrink-rpath "$i" || true
done done
done done
# Test to make sure that we don't depend on the bootstrap
for output in $outputs; do
if grep -q -r '${bootjdk}' $(eval echo \$$output); then
echo "Extraneous references to ${bootjdk} detected"
exit 1
fi
done
''; '';
disallowedReferences = [ openjdk11 ];
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = http://openjdk.java.net/; homepage = http://openjdk.java.net/;
license = licenses.gpl2; license = licenses.gpl2;
description = "The open-source Java Development Kit"; description = "The open-source Java Development Kit";
maintainers = with maintainers; [ edwtjo ]; maintainers = with maintainers; [ edwtjo ];
platforms = ["i686-linux" "x86_64-linux"]; platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux" "armv6l-linux" ];
}; };
passthru = { passthru = {
inherit architecture; architecture = "";
home = "${openjdk}/lib/openjdk"; home = "${openjdk}/lib/openjdk";
}; };
}; };

View File

@ -1,5 +1,6 @@
{ stdenv, fetchurl, writeText, openjdk, bootjdk, gradleGen, pkgconfig, perl, cmake, gperf { stdenv, lib, fetchurl, writeText, openjdk11_headless, openjdk12, gradleGen
, gtk2, gtk3, libXtst, libXxf86vm, glib, alsaLib, ffmpeg, python, ruby }: , pkgconfig, perl, cmake, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsaLib
, ffmpeg, python, ruby }:
let let
major = "12"; major = "12";
@ -7,14 +8,14 @@ let
build = "14"; build = "14";
repover = "${major}${update}+${build}"; repover = "${major}${update}+${build}";
gradle_ = (gradleGen.override { gradle_ = (gradleGen.override {
java = bootjdk; java = openjdk11_headless;
}).gradle_4_10; }).gradle_4_10;
makePackage = args: stdenv.mkDerivation ({ makePackage = args: stdenv.mkDerivation ({
version = "${major}${update}-${repover}"; version = "${major}${update}-${build}";
src = fetchurl { src = fetchurl {
url = "http://hg.openjdk.java.net/openjfx/${major}-dev/rt/archive/${repover}.tar.gz"; url = "https://hg.openjdk.java.net/openjfx/${major}/rt/archive/${repover}.tar.gz";
sha256 = "16jjfjkrg57wsj9mmm52i2kl3byz3ba1f9f8wwc8zwqm4cpjzliz"; sha256 = "16jjfjkrg57wsj9mmm52i2kl3byz3ba1f9f8wwc8zwqm4cpjzliz";
}; };
@ -25,7 +26,7 @@ let
config = writeText "gradle.properties" ('' config = writeText "gradle.properties" (''
CONF = Release CONF = Release
JDK_HOME = ${bootjdk}/lib/openjdk JDK_HOME = ${openjdk11_headless.home}
'' + args.gradleProperties or ""); '' + args.gradleProperties or "");
buildPhase = '' buildPhase = ''
@ -56,11 +57,11 @@ let
outputHashAlgo = "sha256"; outputHashAlgo = "sha256";
outputHashMode = "recursive"; outputHashMode = "recursive";
outputHash = # Downloaded AWT jars differ by platform.
# Downloaded AWT jars differ by platform. outputHash = {
if stdenv.system == "x86_64-linux" then "1z5qar5l28ja4pkf5l5m48xbv3x1yrnilsv9lpf2j3vkdk9h1nci" "x86_64-linux" = "1z5qar5l28ja4pkf5l5m48xbv3x1yrnilsv9lpf2j3vkdk9h1nci";
else if stdenv.system == "i686-linux" then "0rbygvjc7w197fi5nxldqdrm6mpiyd3n45042g3gd4s5qk08spjd" "i686-linux" = "0rbygvjc7w197fi5nxldqdrm6mpiyd3n45042g3gd4s5qk08spjd";
else throw "Unsupported platform"; }.${stdenv.system} or (throw "Unsupported platform");
}; };
in makePackage { in makePackage {
@ -87,24 +88,20 @@ in makePackage {
postFixup = '' postFixup = ''
# Remove references to bootstrap. # Remove references to bootstrap.
find "$out" -name \*.so | while read lib; do find "$out" -name \*.so | while read lib; do
new_refs="$(patchelf --print-rpath "$lib" | sed -E 's,:?${bootjdk}[^:]*,,')" new_refs="$(patchelf --print-rpath "$lib" | sed -E 's,:?${openjdk11_headless}[^:]*,,')"
patchelf --set-rpath "$new_refs" "$lib" patchelf --set-rpath "$new_refs" "$lib"
done done
# Test to make sure that we don't depend on the bootstrap
if grep -q -r '${bootjdk}' "$out"; then
echo "Extraneous references to ${bootjdk} detected" >&2
exit 1
fi
''; '';
disallowedReferences = [ openjdk11_headless ];
passthru.deps = deps; passthru.deps = deps;
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = http://openjdk.java.net/projects/openjfx/; homepage = http://openjdk.java.net/projects/openjfx/;
license = openjdk.meta.license; license = openjdk12.meta.license;
description = "The next-generation Java client toolkit."; description = "The next-generation Java client toolkit.";
maintainers = with maintainers; [ abbradar ]; maintainers = with maintainers; [ abbradar ];
platforms = openjdk.meta.platforms; platforms = [ "i686-linux" "x86_64-linux" ];
}; };
} }