-
-
Notifications
You must be signed in to change notification settings - Fork 14.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
openjdk18: init at 18+37 #165354
openjdk18: init at 18+37 #165354
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ lib }: | ||
|
||
let | ||
sources = lib.importJSON ./sources.json; | ||
in | ||
{ | ||
jdk-hotspot = import ./jdk-darwin-base.nix { sourcePerArch = sources.openjdk17.mac.jdk.hotspot; }; | ||
jre-hotspot = import ./jdk-darwin-base.nix { sourcePerArch = sources.openjdk17.mac.jre.hotspot; }; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ lib }: | ||
|
||
let | ||
sources = lib.importJSON ./sources.json; | ||
in | ||
{ | ||
jdk-hotspot = import ./jdk-linux-base.nix { sourcePerArch = sources.openjdk17.linux.jdk.hotspot; }; | ||
jre-hotspot = import ./jdk-linux-base.nix { sourcePerArch = sources.openjdk17.linux.jre.hotspot; }; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,167 @@ | ||
{ stdenv, lib, fetchurl, 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, openjdk18-bootstrap | ||
, setJavaClassPath | ||
, headless ? false | ||
, enableJavaFX ? openjfx.meta.available, openjfx | ||
, enableGnome2 ? true, gtk3, gnome_vfs, glib, GConf | ||
}: | ||
|
||
let | ||
version = { | ||
feature = "18"; | ||
build = "36"; | ||
}; | ||
|
||
openjdk = stdenv.mkDerivation { | ||
pname = "openjdk" + lib.optionalString headless "-headless"; | ||
version = "${version.feature}+${version.build}"; | ||
|
||
src = fetchFromGitHub { | ||
owner = "openjdk"; | ||
repo = "jdk${version.feature}u"; | ||
rev = "jdk-${version.feature}+${version.build}"; | ||
sha256 = "sha256-yGPC8VA983Ml6Fv/oiEgRrcVe4oe+Q4oCHbzOmFbZq8="; | ||
}; | ||
|
||
nativeBuildInputs = [ pkg-config autoconf unzip ]; | ||
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 openjdk18-bootstrap | ||
] ++ 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-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"; | ||
}) | ||
] ++ lib.optionals (!headless && enableGnome2) [ | ||
./swing-use-gtk-jdk13.patch | ||
]; | ||
|
||
postPatch = '' | ||
chmod +x configure | ||
patchShebangs --build configure | ||
''; | ||
|
||
configureFlags = [ | ||
"--with-boot-jdk=${openjdk18-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; | ||
|
||
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 $outputs; 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 $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 = [ openjdk18-bootstrap ]; | ||
|
||
meta = import ./meta.nix lib version.feature; | ||
|
||
passthru = { | ||
architecture = ""; | ||
home = "${openjdk}/lib/openjdk"; | ||
inherit gtk3; | ||
}; | ||
}; | ||
in openjdk |
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,81 @@ | ||||||||||||||
{ lib, stdenv, fetchurl, unzip, setJavaClassPath }: | ||||||||||||||
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.28.13"; | ||||||||||||||
jdkVersion = "18.0.0"; | ||||||||||||||
sha256 = "0hc5m3d4q3n7sighq3pxkdg93vsrgj1kzla1py9nfnm9pnj9l2kq"; | ||||||||||||||
}; | ||||||||||||||
|
||||||||||||||
aarch64-darwin = { | ||||||||||||||
arch = "aarch64"; | ||||||||||||||
zuluVersion = "18.28.13"; | ||||||||||||||
jdkVersion = "18.0.0"; | ||||||||||||||
sha256 = "0ch4jp2d4pjvxbmbswvjwf7w2flajrvjg5f16ggiy80y8l0y15cm"; | ||||||||||||||
}; | ||||||||||||||
}."${stdenv.hostPlatform.system}"; | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Missing or throw unsupported system or eval fails on other platforms. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. With all respect, it a. doesn't get called for non-Darwin platforms, and b. is the same way that all OpenJDK derivations have done this. I can change it if required, but it seems unnecessary and out of line. nixpkgs/pkgs/top-level/java-packages.nix Lines 51 to 56 in 992d767
https://github.com/NixOS/nixpkgs/blob/a6b757a52bf2370540ffc2c0210e25e79b419a63/pkgs/top-level/java-packages.nix#L187-L193 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thats not great. It should at least eval on any platform otherwise you can't check if your changes on break evaluation for another platform. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Wouldn't you set the Anyway I don't think we put too many expectations on the evaluation of packages if they're not checked on hydra / ofborg, and all the ofborg builds on the PR are green, so I think it's ok. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Especially important to:
|
||||||||||||||
|
||||||||||||||
jce-policies = fetchurl { | ||||||||||||||
# Ugh, unversioned URLs... I hope this doesn't change often enough to cause pain before we move to a Darwin source build of OpenJDK! | ||||||||||||||
url = "http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip"; | ||||||||||||||
sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0"; | ||||||||||||||
}; | ||||||||||||||
|
||||||||||||||
jdk = stdenv.mkDerivation rec { | ||||||||||||||
pname = "zulu${dist.zuluVersion}-ca-jdk"; | ||||||||||||||
version = dist.jdkVersion; | ||||||||||||||
|
||||||||||||||
src = fetchurl { | ||||||||||||||
url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-ca-jdk${dist.jdkVersion}-macosx_${dist.arch}.tar.gz"; | ||||||||||||||
inherit (dist) sha256; | ||||||||||||||
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
version
here refers to the attrset above, not the usualderivation.version
attribute:I can rename and/or inline those variables (also used in derivation version, src repo, and a configure flag) but I'm following convention of other
openjdk
derivations.