mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
Merge remote-tracking branch 'origin/staging-next' into staging
This commit is contained in:
commit
754aa51e96
@ -257,6 +257,10 @@ python.pkgs.buildPythonApplication rec {
|
||||
"testNormalOperation"
|
||||
# Something broken with new Tesseract and inline RTL/LTR overrides?
|
||||
"test_rtl_language_detection"
|
||||
# Broke during the pytest-httpx 0.30.0 -> 0.32.0 upgrade
|
||||
"test_request_pdf_a_format"
|
||||
"test_generate_pdf_html_email"
|
||||
"test_generate_pdf_html_email_merge_failure"
|
||||
];
|
||||
|
||||
doCheck = !stdenv.hostPlatform.isDarwin;
|
||||
|
@ -28,7 +28,7 @@ let
|
||||
# ÁNYK needs JavaFX for the Ügyfélkapu login webview.
|
||||
jdkWithFX = openjdk.override {
|
||||
enableJavaFX = true;
|
||||
openjfx = openjfx.override { withWebKit = true; };
|
||||
openjfx_jdk = openjfx.override { withWebKit = true; };
|
||||
};
|
||||
|
||||
extraClasspath = [
|
||||
|
4
pkgs/by-name/ni/nixpkgs-openjdk-updater/nixpkgs-openjdk-updater/.gitignore
vendored
Normal file
4
pkgs/by-name/ni/nixpkgs-openjdk-updater/nixpkgs-openjdk-updater/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
.pytest_cache
|
||||
.ruff_cache
|
||||
.venv
|
||||
uv.lock
|
@ -0,0 +1 @@
|
||||
3.12
|
@ -0,0 +1,41 @@
|
||||
[project]
|
||||
name = "nixpkgs-openjdk-updater"
|
||||
version = "0.1.0"
|
||||
description = "Update tool for Nixpkgs OpenJDK packages"
|
||||
requires-python = ">=3.12"
|
||||
dependencies = [
|
||||
"pydantic>=2.8.2",
|
||||
"pygithub>=2.4.0",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
nixpkgs-openjdk-updater = "nixpkgs_openjdk_updater:main"
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling>=1.25.0"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.pyright]
|
||||
include = ["src"]
|
||||
strict = ["**/*"]
|
||||
pythonVersion = "3.12"
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
addopts = "--doctest-modules"
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 80
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = ["ALL"]
|
||||
ignore = ["COM812", "D203", "D213", "ISC001", "T201"]
|
||||
allowed-confusables = ["’"]
|
||||
|
||||
[tool.ruff.format]
|
||||
docstring-code-format = true
|
||||
docstring-code-line-length = "dynamic"
|
||||
|
||||
[tool.uv]
|
||||
dev-dependencies = [
|
||||
"pytest>=8.3.3",
|
||||
]
|
@ -0,0 +1,173 @@
|
||||
"""Update tool for Nixpkgs OpenJDK packages."""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from typing import Literal
|
||||
|
||||
import github
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class SourceInfo(BaseModel):
|
||||
"""GitHub fetcher data for an OpenJDK release tag."""
|
||||
|
||||
owner: str
|
||||
repo: str
|
||||
rev: str
|
||||
hash: str
|
||||
|
||||
|
||||
type Update = tuple[int, ...]
|
||||
type Build = int | Literal["ga"]
|
||||
|
||||
|
||||
def parse_openjdk_ref_name(
|
||||
feature_version_prefix: str,
|
||||
ref_name: str,
|
||||
) -> tuple[Update, Build]:
|
||||
r"""Parse an OpenJDK Git ref name containing a JDK version.
|
||||
|
||||
Takes the tag name prefix for a given feature version and parses
|
||||
the rest of the version and build information.
|
||||
|
||||
See |java.lang.Runtime.Version|_ for documentation of the modern
|
||||
version string scheme initially introduced in `JEP 223`_ for JDK 9,
|
||||
though this tool also supports JDK 8 for now.
|
||||
|
||||
.. |java.lang.Runtime.Version| replace:: ``java.lang.Runtime.Version``
|
||||
.. _java.lang.Runtime.Version: https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Runtime.Version.html
|
||||
.. _JEP 223: https://openjdk.org/jeps/223
|
||||
|
||||
>>> parse_openjdk_ref_name("jdk-23", "refs/tags/jdk-23-ga")
|
||||
((), 'ga')
|
||||
>>> parse_openjdk_ref_name("jdk-17", "refs/tags/jdk-17.0.2+7")
|
||||
((0, 2), 7)
|
||||
>>> parse_openjdk_ref_name("jdk8", "refs/tags/jdk8u422-ga")
|
||||
((422,), 'ga')
|
||||
>>> parse_openjdk_ref_name("jdk8", "refs/tags/jdk8-b01")
|
||||
((), 1)
|
||||
>>> parse_openjdk_ref_name("22", "refs/tags/22.0.2-ga")
|
||||
((0, 2), 'ga')
|
||||
>>> parse_openjdk_ref_name("jdk8", "refs/tags/jdk7-b147")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: unexpected OpenJDK ref name: refs/tags/jdk7-b147
|
||||
>>> parse_openjdk_ref_name("jdk8", "refs/tags/jdk80-ga")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: unexpected OpenJDK ref name: refs/tags/jdk80-ga
|
||||
>>> parse_openjdk_ref_name("11", "refs/tags/jdk-11+14")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: unexpected OpenJDK ref name: refs/tags/jdk-11+14
|
||||
"""
|
||||
m = re.fullmatch(
|
||||
rf"""
|
||||
refs/tags/{re.escape(feature_version_prefix)}
|
||||
(?P<update>
|
||||
(?:u[0-9]+)? # JDK 8 uses u
|
||||
| (?:\.[0-9]+)*
|
||||
)
|
||||
(?P<build>
|
||||
-ga
|
||||
| (\+|-b) # JDK 8 uses -b
|
||||
[0-9]+
|
||||
)
|
||||
""",
|
||||
ref_name,
|
||||
re.VERBOSE,
|
||||
)
|
||||
if not m:
|
||||
msg = f"unexpected OpenJDK ref name: {ref_name}"
|
||||
raise ValueError(msg)
|
||||
update = tuple(
|
||||
int(element) for element in m["update"].replace("u", ".").split(".")[1:]
|
||||
)
|
||||
build = (
|
||||
"ga"
|
||||
if m["build"] == "-ga"
|
||||
else int(m["build"].removeprefix("+").removeprefix("-b"))
|
||||
)
|
||||
return update, build
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""Update a Nixpkgs OpenJDK package."""
|
||||
parser = argparse.ArgumentParser(description=main.__doc__)
|
||||
parser.add_argument("--source-file", type=Path, required=True)
|
||||
parser.add_argument("--owner", required=True)
|
||||
parser.add_argument("--repo", required=True)
|
||||
parser.add_argument("--feature-version-prefix", required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
source_info: SourceInfo | None
|
||||
try:
|
||||
with args.source_file.open() as source_fp:
|
||||
source_info = SourceInfo(**json.load(source_fp))
|
||||
except FileNotFoundError:
|
||||
source_info = None
|
||||
|
||||
token = os.environ.get("GITHUB_TOKEN")
|
||||
gh = github.Github(auth=github.Auth.Token(token) if token else None)
|
||||
|
||||
repo = gh.get_repo(f"{args.owner}/{args.repo}")
|
||||
versions: dict[Update, dict[Build, str]] = {}
|
||||
for ref in repo.get_git_matching_refs(
|
||||
"tags/" + args.feature_version_prefix
|
||||
):
|
||||
update, build = parse_openjdk_ref_name(
|
||||
args.feature_version_prefix,
|
||||
ref.ref,
|
||||
)
|
||||
versions.setdefault(update, {})[build] = ref.ref
|
||||
|
||||
# We want a finalized General Availability release version, but we
|
||||
# want to pin a tag with the build number in it so that we can use
|
||||
# it for version information.
|
||||
#
|
||||
# The OpenJDK `-ga` tags point to the same commits as the highest
|
||||
# build number for a given version, so we find and pin that.
|
||||
latest_release_builds = versions[
|
||||
max(update for update, builds in versions.items() if "ga" in builds)
|
||||
]
|
||||
latest_release_ref_name = latest_release_builds[
|
||||
max(latest_release_builds.keys() - {"ga"})
|
||||
]
|
||||
|
||||
if source_info and source_info.rev == latest_release_ref_name:
|
||||
return
|
||||
|
||||
prefetch_result = subprocess.run( # noqa: S603
|
||||
(
|
||||
"nix",
|
||||
"--extra-experimental-features",
|
||||
"nix-command",
|
||||
"store",
|
||||
"prefetch-file",
|
||||
"--json",
|
||||
"--unpack",
|
||||
"--name",
|
||||
"source",
|
||||
repo.get_archive_link("tarball", latest_release_ref_name),
|
||||
),
|
||||
check=True,
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
source_info = SourceInfo(
|
||||
owner=args.owner,
|
||||
repo=args.repo,
|
||||
rev=latest_release_ref_name,
|
||||
hash=json.loads(prefetch_result.stdout)["hash"],
|
||||
)
|
||||
with args.source_file.open("w") as source_fp:
|
||||
json.dump(
|
||||
source_info.model_dump(),
|
||||
source_fp,
|
||||
indent=" ",
|
||||
sort_keys=True,
|
||||
)
|
||||
print(file=source_fp)
|
80
pkgs/by-name/ni/nixpkgs-openjdk-updater/package.nix
Normal file
80
pkgs/by-name/ni/nixpkgs-openjdk-updater/package.nix
Normal file
@ -0,0 +1,80 @@
|
||||
{
|
||||
lib,
|
||||
python3Packages,
|
||||
ruff,
|
||||
pyright,
|
||||
fetchFromGitHub,
|
||||
nixpkgs-openjdk-updater,
|
||||
}:
|
||||
|
||||
python3Packages.buildPythonApplication {
|
||||
pname = "nixpkgs-openjdk-updater";
|
||||
version = "0.1.0";
|
||||
format = "pyproject";
|
||||
|
||||
src = ./nixpkgs-openjdk-updater;
|
||||
|
||||
build-system = [ python3Packages.hatchling ];
|
||||
|
||||
dependencies = [
|
||||
python3Packages.pydantic
|
||||
python3Packages.pygithub
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
ruff
|
||||
pyright
|
||||
python3Packages.pytestCheckHook
|
||||
];
|
||||
|
||||
preCheck = ''
|
||||
ruff format --check
|
||||
ruff check
|
||||
pyright
|
||||
'';
|
||||
|
||||
postCheck = ''
|
||||
$out/bin/nixpkgs-openjdk-updater --help >/dev/null
|
||||
'';
|
||||
|
||||
passthru.openjdkSource =
|
||||
{
|
||||
sourceFile,
|
||||
featureVersionPrefix,
|
||||
}:
|
||||
let
|
||||
# TODO: Tighten up after update scripts are run.
|
||||
src = fetchFromGitHub (lib.importJSON sourceFile);
|
||||
in
|
||||
{
|
||||
inherit src;
|
||||
|
||||
updateScript = {
|
||||
command = [
|
||||
(lib.getExe nixpkgs-openjdk-updater)
|
||||
|
||||
"--source-file"
|
||||
sourceFile
|
||||
|
||||
"--owner"
|
||||
src.owner
|
||||
|
||||
"--repo"
|
||||
src.repo
|
||||
|
||||
"--feature-version-prefix"
|
||||
featureVersionPrefix
|
||||
];
|
||||
|
||||
supportedFeatures = [ "silent" ];
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Updater for Nixpkgs OpenJDK packages";
|
||||
license = lib.licenses.mit;
|
||||
sourceProvenance = [ lib.sourceTypes.fromSource ];
|
||||
maintainers = [ lib.maintainers.emily ];
|
||||
mainProgram = "nixpkgs-openjdk-updater";
|
||||
};
|
||||
}
|
6
pkgs/by-name/op/openjfx/17/source.json
Normal file
6
pkgs/by-name/op/openjfx/17/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"owner": "openjdk",
|
||||
"repo": "jfx17u",
|
||||
"rev": "17.0.11-ga",
|
||||
"sha256": "sha256-9VfXk2EfMebMyVKPohPRP2QXRFf8XemUtfY0JtBCHyw="
|
||||
}
|
6
pkgs/by-name/op/openjfx/21/source.json
Normal file
6
pkgs/by-name/op/openjfx/21/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"hash": "sha256-7z0GIbkQwG9mXY9dssaicqaKpMo3FkNEpyAvkswoQQ4=",
|
||||
"owner": "openjdk",
|
||||
"repo": "jfx21u",
|
||||
"rev": "21.0.3-ga"
|
||||
}
|
6
pkgs/by-name/op/openjfx/23/source.json
Normal file
6
pkgs/by-name/op/openjfx/23/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"hash": "sha256-a/ev91Rq7D3z9O56ZZQCgvvbfj5GBt5Lonow2NH3s/E=",
|
||||
"owner": "openjdk",
|
||||
"repo": "jfx23u",
|
||||
"rev": "23-ga"
|
||||
}
|
208
pkgs/by-name/op/openjfx/package.nix
Normal file
208
pkgs/by-name/op/openjfx/package.nix
Normal file
@ -0,0 +1,208 @@
|
||||
{
|
||||
featureVersion ? "17",
|
||||
|
||||
lib,
|
||||
stdenv,
|
||||
pkgs,
|
||||
|
||||
fetchpatch2,
|
||||
|
||||
gradle,
|
||||
gradle_7,
|
||||
perl,
|
||||
pkg-config,
|
||||
cmake,
|
||||
gperf,
|
||||
python3,
|
||||
ruby,
|
||||
|
||||
gtk2,
|
||||
gtk3,
|
||||
libXtst,
|
||||
libXxf86vm,
|
||||
glib,
|
||||
alsa-lib,
|
||||
ffmpeg,
|
||||
ffmpeg-headless,
|
||||
|
||||
writeText,
|
||||
|
||||
_experimental-update-script-combinators,
|
||||
nixpkgs-openjdk-updater,
|
||||
writeShellScript,
|
||||
path,
|
||||
|
||||
withMedia ? true,
|
||||
withWebKit ? false,
|
||||
|
||||
jdk17_headless,
|
||||
jdk21_headless,
|
||||
jdk23_headless,
|
||||
jdk-bootstrap ?
|
||||
{
|
||||
"17" = jdk17_headless;
|
||||
"21" = jdk21_headless;
|
||||
"23" = jdk23_headless;
|
||||
}
|
||||
.${featureVersion},
|
||||
}:
|
||||
|
||||
let
|
||||
sourceFile = ./. + "/${featureVersion}/source.json";
|
||||
source = nixpkgs-openjdk-updater.openjdkSource {
|
||||
inherit sourceFile;
|
||||
featureVersionPrefix = featureVersion;
|
||||
};
|
||||
|
||||
atLeast21 = lib.versionAtLeast featureVersion "21";
|
||||
atLeast23 = lib.versionAtLeast featureVersion "23";
|
||||
|
||||
gradle_openjfx = if atLeast23 then gradle else gradle_7;
|
||||
in
|
||||
|
||||
assert lib.assertMsg (lib.pathExists sourceFile)
|
||||
"OpenJFX ${featureVersion} is not a supported version";
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "openjfx-modular-sdk";
|
||||
version = lib.removePrefix "refs/tags/" source.src.rev;
|
||||
|
||||
inherit (source) src;
|
||||
|
||||
patches =
|
||||
if featureVersion == "23" then
|
||||
[
|
||||
# 8338701: Provide media support for libavcodec version 61
|
||||
# <https://github.com/openjdk/jfx23u/pull/18>
|
||||
(fetchpatch2 {
|
||||
url = "https://github.com/openjdk/jfx23u/commit/aba60fda1c82f00e8e685107592305c403a31287.patch?full_index=1";
|
||||
hash = "sha256-+aRhTwi4VQthAq1SH1jxPl0mTosNMKoTY52jm+jiKso=";
|
||||
})
|
||||
]
|
||||
else if atLeast21 then
|
||||
[
|
||||
./21/patches/backport-ffmpeg-7-support-jfx21.patch
|
||||
]
|
||||
else
|
||||
[
|
||||
./17/patches/backport-ffmpeg-6-support-jfx11.patch
|
||||
./17/patches/backport-ffmpeg-7-support-jfx11.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
gradle_openjfx
|
||||
perl
|
||||
pkg-config
|
||||
cmake
|
||||
gperf
|
||||
python3
|
||||
ruby
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gtk2
|
||||
gtk3
|
||||
libXtst
|
||||
libXxf86vm
|
||||
glib
|
||||
alsa-lib
|
||||
(if atLeast21 then ffmpeg else ffmpeg-headless)
|
||||
];
|
||||
|
||||
mitmCache = gradle_openjfx.fetchDeps {
|
||||
attrPath = "openjfx${featureVersion}";
|
||||
pkg = pkgs."openjfx${featureVersion}".override { withWebKit = true; };
|
||||
data = ./. + "/${featureVersion}/deps.json";
|
||||
};
|
||||
|
||||
gradleBuildTask = "sdk";
|
||||
|
||||
stripDebugList = [ "." ];
|
||||
|
||||
enableParallelBuilding = false;
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
env.config = writeText "gradle.properties" ''
|
||||
CONF = Release
|
||||
JDK_HOME = ${jdk-bootstrap.home}
|
||||
COMPILE_MEDIA = ${lib.boolToString withMedia}
|
||||
COMPILE_WEBKIT = ${lib.boolToString withWebKit}
|
||||
'';
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
||||
postPatch =
|
||||
lib.optionalString (!atLeast23) ''
|
||||
# Add missing includes for gcc-13 for webkit build:
|
||||
sed -e '1i #include <cstdio>' \
|
||||
-i modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/Heap.cpp \
|
||||
modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/IsoSharedPageInlines.h
|
||||
|
||||
''
|
||||
+ lib.optionalString (!atLeast21) ''
|
||||
substituteInPlace modules/javafx.web/src/main/native/Source/JavaScriptCore/offlineasm/parser.rb \
|
||||
--replace-fail "File.exists?" "File.exist?"
|
||||
|
||||
''
|
||||
+ ''
|
||||
ln -s $config gradle.properties
|
||||
'';
|
||||
|
||||
preBuild = ''
|
||||
export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
|
||||
export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
cp -r build/modular-sdk $out
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
# Remove references to bootstrap.
|
||||
export openjdkOutPath='${jdk-bootstrap.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 = [
|
||||
jdk-bootstrap
|
||||
gradle_openjfx.jdk
|
||||
];
|
||||
|
||||
passthru.updateScript = _experimental-update-script-combinators.sequence [
|
||||
source.updateScript
|
||||
|
||||
{
|
||||
command = [
|
||||
# We need to do this separate script rather than simply using
|
||||
# `finalAttrs.mitmCache.updateScript` because the Gradle update
|
||||
# script captures the source at the time of evaluation, making
|
||||
# it miss the update.
|
||||
(writeShellScript "update-openjfx-deps.sh" ''
|
||||
eval "$(
|
||||
nix-build "$1" \
|
||||
-A openjfx${featureVersion}.mitmCache.updateScript
|
||||
)"
|
||||
'')
|
||||
|
||||
# This has to be a separate argument so that
|
||||
# `maintainers/scripts/update.py` can rewrite it to the
|
||||
# appropriate Git work tree.
|
||||
path
|
||||
];
|
||||
|
||||
supportedFeatures = [ "silent" ];
|
||||
}
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Next-generation Java client toolkit";
|
||||
homepage = "https://openjdk.org/projects/openjfx/";
|
||||
license = lib.licenses.gpl2Classpath;
|
||||
maintainers = with lib.maintainers; [ abbradar ];
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
}
|
@ -120,21 +120,33 @@ rec {
|
||||
let
|
||||
scripts = scriptsNormalized;
|
||||
hasCommitSupport = lib.findSingle ({ supportedFeatures, ... }: supportedFeatures == [ "commit" ]) null null scripts != null;
|
||||
hasSilentSupport = lib.findFirst ({ supportedFeatures, ... }: supportedFeatures == [ "silent" ]) null scripts != null;
|
||||
# Supported features currently only describe the format of the standard output of the update script.
|
||||
# Here we ensure that the standard output of the combined update script is well formed.
|
||||
validateFeatures =
|
||||
if hasCommitSupport then
|
||||
# Exactly one update script declares only “commit” feature and all the rest declare only “silent” feature.
|
||||
({ supportedFeatures, ... }: supportedFeatures == [ "commit" ] || supportedFeatures == [ "silent" ])
|
||||
else if hasSilentSupport then
|
||||
# All update scripts declare only “silent” feature.
|
||||
({ supportedFeatures, ... }: supportedFeatures == [ "silent" ])
|
||||
else
|
||||
# No update script declares any supported feature to fail loudly on unknown features rather than silently discard them.
|
||||
({ supportedFeatures, ... }: supportedFeatures == [ ]);
|
||||
in
|
||||
|
||||
assert lib.assertMsg (lib.all validateFeatures scripts) "Combining update scripts with features enabled (other than a single script with “commit” and all other with “silent”) is currently unsupported.";
|
||||
assert lib.assertMsg (lib.all validateFeatures scripts) "Combining update scripts with features enabled (other than “silent” scripts and an optional single script with “commit”) is currently unsupported.";
|
||||
assert lib.assertMsg (builtins.length (lib.unique (builtins.map ({ attrPath ? null, ... }: attrPath) scripts)) == 1) "Combining update scripts with different attr paths is currently unsupported.";
|
||||
|
||||
{
|
||||
command = commandsToShellInvocation (builtins.map ({ command, ... }: command) scripts);
|
||||
supportedFeatures = lib.optionals hasCommitSupport [
|
||||
"commit"
|
||||
];
|
||||
supportedFeatures =
|
||||
if hasCommitSupport then
|
||||
[ "commit" ]
|
||||
else if hasSilentSupport then
|
||||
[ "silent" ]
|
||||
else
|
||||
[ ];
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -1,181 +0,0 @@
|
||||
{ stdenv, lib, fetchpatch, fetchFromGitHub, bash, pkg-config, autoconf, cpio, file, which, unzip
|
||||
, zip, perl, cups, freetype, harfbuzz, alsa-lib, libjpeg, giflib, libpng, zlib, lcms2
|
||||
, libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama
|
||||
, libXcursor, libXrandr, fontconfig, openjdk11-bootstrap
|
||||
, setJavaClassPath
|
||||
, headless ? false
|
||||
, enableJavaFX ? false, openjfx
|
||||
, enableGtk ? true, gtk3, glib
|
||||
}:
|
||||
|
||||
let
|
||||
major = "11";
|
||||
minor = "0";
|
||||
update = "24";
|
||||
build = "8";
|
||||
|
||||
# when building a headless jdk, also bootstrap it with a headless jdk
|
||||
openjdk-bootstrap = openjdk11-bootstrap.override { gtkSupport = !headless; };
|
||||
|
||||
openjdk = stdenv.mkDerivation rec {
|
||||
pname = "openjdk" + lib.optionalString headless "-headless";
|
||||
version = "${major}.${minor}.${update}+${build}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "openjdk";
|
||||
repo = "jdk${major}u";
|
||||
rev = "jdk-${version}";
|
||||
hash = "sha256-H/VmT6NYbbZBba7Js8xk+epVZ2kLfvlwTNgg5SQ4ljA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config autoconf unzip ];
|
||||
buildInputs = [
|
||||
cpio file which zip perl zlib cups freetype harfbuzz alsa-lib libjpeg giflib
|
||||
libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
|
||||
libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
|
||||
] ++ lib.optionals (!headless && enableGtk) [
|
||||
gtk3 glib
|
||||
];
|
||||
|
||||
patches = [
|
||||
./fix-java-home-jdk10.patch
|
||||
./read-truststore-from-env-jdk10.patch
|
||||
./currency-date-range-jdk10.patch
|
||||
./increase-javadoc-heap.patch
|
||||
./fix-library-path-jdk11.patch
|
||||
|
||||
# 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 && enableGtk) [
|
||||
./swing-use-gtk-jdk10.patch
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
chmod +x configure
|
||||
substituteInPlace configure --replace /bin/bash "${bash}/bin/bash"
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
"--with-boot-jdk=${openjdk-bootstrap.home}"
|
||||
"--with-version-pre="
|
||||
"--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"
|
||||
"--disable-warnings-as-errors"
|
||||
]
|
||||
# Cannot be built by recent versions of Clang, as far as I can tell (see
|
||||
# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=260319). Known to
|
||||
# compile with LLVM 12.
|
||||
++ lib.optionals stdenv.cc.isClang [
|
||||
"--with-toolchain-type=clang"
|
||||
# Explicitly tell Clang to compile C++ files as C++, see
|
||||
# https://github.com/NixOS/nixpkgs/issues/150655#issuecomment-1935304859
|
||||
"--with-extra-cxxflags=-xc++"
|
||||
]
|
||||
++ lib.optional stdenv.hostPlatform.isx86_64 "--with-jvm-features=zgc"
|
||||
++ lib.optional headless "--enable-headless-only"
|
||||
++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx}";
|
||||
|
||||
separateDebugInfo = true;
|
||||
|
||||
# Workaround for
|
||||
# `cc1plus: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]`
|
||||
# when building jtreg
|
||||
env.NIX_CFLAGS_COMPILE = "-Wformat";
|
||||
|
||||
NIX_LDFLAGS = toString (lib.optionals (!headless) [
|
||||
"-lfontconfig" "-lcups" "-lXinerama" "-lXrandr" "-lmagic"
|
||||
] ++ lib.optionals (!headless && enableGtk) [
|
||||
"-lgtk-3" "-lgio-2.0"
|
||||
]);
|
||||
|
||||
# -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 = [ "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
|
||||
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 | uniq | 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 ];
|
||||
|
||||
meta = import ./meta.nix lib version;
|
||||
|
||||
passthru = {
|
||||
architecture = "";
|
||||
home = "${openjdk}/lib/openjdk";
|
||||
inherit gtk3;
|
||||
};
|
||||
};
|
||||
in openjdk
|
6
pkgs/development/compilers/openjdk/11/source.json
Normal file
6
pkgs/development/compilers/openjdk/11/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"hash": "sha256-H/VmT6NYbbZBba7Js8xk+epVZ2kLfvlwTNgg5SQ4ljA=",
|
||||
"owner": "openjdk",
|
||||
"repo": "jdk11u",
|
||||
"rev": "jdk-11.0.24+8"
|
||||
}
|
@ -1,209 +0,0 @@
|
||||
{ stdenv, lib, fetchurl, fetchpatch, fetchFromGitHub, bash, pkg-config, autoconf, cpio
|
||||
, file, which, unzip, zip, perl, cups, freetype, harfbuzz, alsa-lib, libjpeg, giflib
|
||||
, libpng, zlib, lcms2, libX11, libICE, libXrender, libXext, libXt, libXtst
|
||||
, libXi, libXinerama, libXcursor, libXrandr, fontconfig, openjdk17-bootstrap
|
||||
, setJavaClassPath
|
||||
, headless ? false
|
||||
, enableJavaFX ? false, openjfx
|
||||
, enableGtk ? true, gtk3, glib
|
||||
}:
|
||||
|
||||
let
|
||||
version = {
|
||||
feature = "17";
|
||||
interim = ".0.12";
|
||||
build = "7";
|
||||
};
|
||||
|
||||
# when building a headless jdk, also bootstrap it with a headless jdk
|
||||
openjdk-bootstrap = openjdk17-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-9UB1H3gd+b4wWxOMgsdDPgX/IGWNORKk1gMsSjYoZMw=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config autoconf unzip ];
|
||||
buildInputs = [
|
||||
cpio file which zip perl zlib cups freetype harfbuzz alsa-lib libjpeg giflib
|
||||
libpng zlib lcms2 libX11 libICE libXrender libXext libXtst libXt libXtst
|
||||
libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
|
||||
] ++ lib.optionals (!headless && enableGtk) [
|
||||
gtk3 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-jdk17.patch
|
||||
./fix-library-path-jdk17.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";
|
||||
})
|
||||
|
||||
# Patch borrowed from Alpine to fix build errors with musl libc and recent gcc.
|
||||
# This is applied anywhere to prevent patchrot.
|
||||
(fetchurl {
|
||||
url = "https://git.alpinelinux.org/aports/plain/community/openjdk17/FixNullPtrCast.patch?id=41e78a067953e0b13d062d632bae6c4f8028d91c";
|
||||
sha256 = "sha256-LzmSew51+DyqqGyyMw2fbXeBluCiCYsS1nCjt9hX6zo=";
|
||||
})
|
||||
|
||||
# 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=";
|
||||
})
|
||||
|
||||
# Backport fixes for musl 1.2.4 which are already applied in jdk21+
|
||||
# Fetching patch from chimera because they already went through the effort of rebasing it onto jdk17
|
||||
(fetchurl {
|
||||
name = "lfs64.patch";
|
||||
url = "https://raw.githubusercontent.com/chimera-linux/cports/4614075d19e9c9636f3f7e476687247f63330a35/contrib/openjdk17/patches/lfs64.patch";
|
||||
hash = "sha256-t2mRbdEiumBAbIAC0zsJNwCn59WYWHsnRtuOSL6bWB4=";
|
||||
})
|
||||
] ++ lib.optionals (!headless && enableGtk) [
|
||||
./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-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.optionals stdenv.cc.isClang [
|
||||
"--with-toolchain-type=clang"
|
||||
# Explicitly tell Clang to compile C++ files as C++, see
|
||||
# https://github.com/NixOS/nixpkgs/issues/150655#issuecomment-1935304859
|
||||
"--with-extra-cxxflags=-xc++"
|
||||
]
|
||||
++ 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 && enableGtk) [
|
||||
"-lgtk-3" "-lgio-2.0"
|
||||
]);
|
||||
|
||||
# -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
|
6
pkgs/development/compilers/openjdk/17/source.json
Normal file
6
pkgs/development/compilers/openjdk/17/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"hash": "sha256-9UB1H3gd+b4wWxOMgsdDPgX/IGWNORKk1gMsSjYoZMw=",
|
||||
"owner": "openjdk",
|
||||
"repo": "jdk17u",
|
||||
"rev": "jdk-17.0.12+7"
|
||||
}
|
@ -1,195 +0,0 @@
|
||||
{ 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
|
||||
, enableGtk ? true, gtk3, glib
|
||||
}:
|
||||
|
||||
let
|
||||
version = {
|
||||
feature = "21";
|
||||
interim = ".0.4";
|
||||
build = "7";
|
||||
};
|
||||
|
||||
# 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-+xpQtQ1IQ7btVWnENT9XS5A/2VP101/+XR3BMo8BqYI=";
|
||||
};
|
||||
|
||||
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 && enableGtk) [
|
||||
gtk3 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 && enableGtk) [
|
||||
./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.optionals stdenv.cc.isClang [
|
||||
"--with-toolchain-type=clang"
|
||||
# Explicitly tell Clang to compile C++ files as C++, see
|
||||
# https://github.com/NixOS/nixpkgs/issues/150655#issuecomment-1935304859
|
||||
"--with-extra-cxxflags=-xc++"
|
||||
]
|
||||
++ lib.optional stdenv.hostPlatform.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 && enableGtk) [
|
||||
"-lgtk-3" "-lgio-2.0"
|
||||
]);
|
||||
|
||||
# -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
|
6
pkgs/development/compilers/openjdk/21/source.json
Normal file
6
pkgs/development/compilers/openjdk/21/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"hash": "sha256-+xpQtQ1IQ7btVWnENT9XS5A/2VP101/+XR3BMo8BqYI=",
|
||||
"owner": "openjdk",
|
||||
"repo": "jdk21u",
|
||||
"rev": "jdk-21.0.4+7"
|
||||
}
|
@ -1,274 +0,0 @@
|
||||
{ stdenv
|
||||
, lib
|
||||
, fetchurl
|
||||
, fetchpatch
|
||||
, fetchFromGitHub
|
||||
, 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
|
||||
, openjdk23-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
|
||||
, enableGtk ? true
|
||||
, gtk3
|
||||
, glib
|
||||
, writeShellScript
|
||||
, versionCheckHook
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
# Java version format:
|
||||
# $FEATURE.$INTERIM.$UPDATE.$PATCH
|
||||
# See
|
||||
# https://openjdk.org/jeps/223
|
||||
# https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Runtime.Version.html
|
||||
featureVersion = "23";
|
||||
info = builtins.getAttr featureVersion (lib.importJSON ./info.json);
|
||||
version = info.version;
|
||||
|
||||
# when building a headless jdk, also bootstrap it with a headless jdk
|
||||
openjdk-bootstrap = openjdk23-bootstrap.override { gtkSupport = !headless; };
|
||||
in
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "openjdk" + lib.optionalString headless "-headless";
|
||||
inherit version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "openjdk";
|
||||
repo = info.repo;
|
||||
rev = "jdk-${version}";
|
||||
hash = info.hash;
|
||||
};
|
||||
|
||||
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 && enableGtk) [
|
||||
gtk3
|
||||
glib
|
||||
];
|
||||
|
||||
patches = [
|
||||
./fix-java-home-jdk21.patch
|
||||
./read-truststore-from-env-jdk10.patch
|
||||
./increase-javadoc-heap-jdk13.patch
|
||||
./ignore-LegalNoticeFilePlugin-jdk18.patch
|
||||
|
||||
# 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 && enableGtk) [
|
||||
./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" ];
|
||||
|
||||
|
||||
# https://openjdk.org/groups/build/doc/building.html
|
||||
configureFlags = [
|
||||
"--with-boot-jdk=${openjdk-bootstrap.home}"
|
||||
"--with-version-string=${version}"
|
||||
"--with-vendor-version-string=(nix)"
|
||||
"--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.optionals stdenv.cc.isClang [
|
||||
"--with-toolchain-type=clang"
|
||||
# Explicitly tell Clang to compile C++ files as C++, see
|
||||
# https://github.com/NixOS/nixpkgs/issues/150655#issuecomment-1935304859
|
||||
"--with-extra-cxxflags=-xc++"
|
||||
]
|
||||
++ 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 && enableGtk) [
|
||||
"-lgtk-3"
|
||||
"-lgio-2.0"
|
||||
]);
|
||||
|
||||
# -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 = __curPos;
|
||||
meta = import ./meta.nix lib featureVersion;
|
||||
|
||||
nativeInstallCheckInputs = [
|
||||
versionCheckHook
|
||||
];
|
||||
versionCheckProgram = "${placeholder "out"}/bin/java";
|
||||
|
||||
doInstallCheck = true;
|
||||
|
||||
passthru = {
|
||||
updateScript =
|
||||
let
|
||||
java-json = fetchurl {
|
||||
url = "https://search.maven.org/remotecontent?filepath=org/json/json/20240303/json-20240303.jar";
|
||||
hash = "sha256-PPbNaJLjLitMHDng9S9SSKL1s3ZG/fu3mma0a2GEFO0=";
|
||||
};
|
||||
in
|
||||
writeShellScript "update-java" ''
|
||||
${finalAttrs.finalPackage}/bin/java \
|
||||
-cp ${java-json} \
|
||||
${./JavaUpdater.java} \
|
||||
${featureVersion} pkgs/development/compilers/openjdk/info.json
|
||||
'';
|
||||
|
||||
home = "${finalAttrs.finalPackage}/lib/openjdk";
|
||||
|
||||
inherit gtk3;
|
||||
};
|
||||
})
|
6
pkgs/development/compilers/openjdk/23/source.json
Normal file
6
pkgs/development/compilers/openjdk/23/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"hash": "sha256-lcLnWAiskWindOqWmOWiIHiYKXGSJZK4d20k19QZfrE=",
|
||||
"owner": "openjdk",
|
||||
"repo": "jdk23u",
|
||||
"rev": "jdk-23-ga"
|
||||
}
|
@ -1,230 +0,0 @@
|
||||
{ stdenv, lib, fetchFromGitHub, pkg-config, lndir, bash, cpio, file, which, unzip, zip
|
||||
, cups, freetype, alsa-lib, cacert, perl, liberation_ttf, fontconfig, zlib
|
||||
, libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama, libXcursor, libXrandr
|
||||
, libjpeg, giflib
|
||||
, openjdk8-bootstrap
|
||||
, setJavaClassPath
|
||||
, headless ? false
|
||||
, enableGtk ? true, gtk2, glib
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
/**
|
||||
* The JRE libraries are in directories that depend on the CPU.
|
||||
*/
|
||||
architecture = {
|
||||
i686-linux = "i386";
|
||||
x86_64-linux = "amd64";
|
||||
aarch64-linux = "aarch64";
|
||||
powerpc64le-linux = "ppc64le";
|
||||
}.${stdenv.system} or (throw "Unsupported platform ${stdenv.system}");
|
||||
|
||||
update = "422";
|
||||
build = "ga";
|
||||
|
||||
# when building a headless jdk, also bootstrap it with a headless jdk
|
||||
openjdk-bootstrap = openjdk8-bootstrap.override { gtkSupport = !headless; };
|
||||
|
||||
openjdk8 = stdenv.mkDerivation rec {
|
||||
pname = "openjdk" + lib.optionalString headless "-headless";
|
||||
version = "8u${update}-${build}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "openjdk";
|
||||
repo = "jdk8u";
|
||||
rev = "jdk${version}";
|
||||
hash = "sha256-uMo1DIkji+FPTbFRwURXybkLE5xv+teSClWP9RfAvfo=";
|
||||
};
|
||||
outputs = [ "out" "jre" ];
|
||||
|
||||
nativeBuildInputs = [ pkg-config lndir unzip ];
|
||||
buildInputs = [
|
||||
cpio file which zip perl zlib cups freetype alsa-lib
|
||||
libjpeg giflib libX11 libICE libXext libXrender libXtst libXt libXtst
|
||||
libXi libXinerama libXcursor libXrandr fontconfig openjdk-bootstrap
|
||||
] ++ lib.optionals (!headless && enableGtk) [
|
||||
gtk2 glib
|
||||
];
|
||||
|
||||
patches = [
|
||||
./fix-java-home-jdk8.patch
|
||||
./read-truststore-from-env-jdk8.patch
|
||||
./currency-date-range-jdk8.patch
|
||||
./fix-library-path-jdk8.patch
|
||||
] ++ lib.optionals (!headless && enableGtk) [
|
||||
./swing-use-gtk-jdk8.patch
|
||||
];
|
||||
|
||||
# Hotspot cares about the host(!) version otherwise
|
||||
DISABLE_HOTSPOT_OS_VERSION_CHECK = "ok";
|
||||
|
||||
preConfigure = ''
|
||||
chmod +x configure
|
||||
substituteInPlace configure --replace /bin/bash "${bash}/bin/bash"
|
||||
substituteInPlace hotspot/make/linux/adlc_updater --replace /bin/sh "${stdenv.shell}"
|
||||
substituteInPlace hotspot/make/linux/makefiles/dtrace.make --replace /usr/include/sys/sdt.h "/no-such-path"
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
"--with-boot-jdk=${openjdk-bootstrap.home}"
|
||||
"--with-update-version=${update}"
|
||||
"--with-build-number=${build}"
|
||||
"--with-milestone=fcs"
|
||||
"--enable-unlimited-crypto"
|
||||
"--with-native-debug-symbols=internal"
|
||||
"--disable-freetype-bundling"
|
||||
"--with-zlib=system"
|
||||
"--with-giflib=system"
|
||||
"--with-stdc++lib=dynamic"
|
||||
] ++ lib.optional headless "--disable-headful";
|
||||
|
||||
separateDebugInfo = true;
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = toString ([
|
||||
# glibc 2.24 deprecated readdir_r so we need this
|
||||
# See https://www.mail-archive.com/openembedded-devel@lists.openembedded.org/msg49006.html
|
||||
"-Wno-error=deprecated-declarations"
|
||||
] ++ lib.optionals stdenv.cc.isGNU [
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1306558
|
||||
# https://github.com/JetBrains/jdk8u/commit/eaa5e0711a43d64874111254d74893fa299d5716
|
||||
"-fno-lifetime-dse"
|
||||
"-fno-delete-null-pointer-checks"
|
||||
"-std=gnu++98"
|
||||
"-Wno-error"
|
||||
]);
|
||||
|
||||
NIX_LDFLAGS= toString (lib.optionals (!headless) [
|
||||
"-lfontconfig" "-lcups" "-lXinerama" "-lXrandr" "-lmagic"
|
||||
] ++ lib.optionals (!headless && enableGtk) [
|
||||
"-lgtk-x11-2.0" "-lgio-2.0"
|
||||
]);
|
||||
|
||||
# -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 = [ "all" ];
|
||||
|
||||
doCheck = false; # fails with "No rule to make target 'y'."
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib
|
||||
|
||||
mv build/*/images/j2sdk-image $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 $out/lib/openjdk/sample
|
||||
${lib.optionalString headless ''
|
||||
rm $out/lib/openjdk/jre/lib/${architecture}/{libjsound,libjsoundalsa,libsplashscreen,libawt*,libfontmanager}.so
|
||||
rm $out/lib/openjdk/jre/bin/policytool
|
||||
rm $out/lib/openjdk/bin/{policytool,appletviewer}
|
||||
''}
|
||||
|
||||
# Move the JRE to a separate output
|
||||
mkdir -p $jre/lib/openjdk
|
||||
mv $out/lib/openjdk/jre $jre/lib/openjdk/jre
|
||||
mkdir $out/lib/openjdk/jre
|
||||
lndir $jre/lib/openjdk/jre $out/lib/openjdk/jre
|
||||
|
||||
# Make sure cmm/*.pf are not symlinks:
|
||||
# https://youtrack.jetbrains.com/issue/IDEA-147272
|
||||
rm -rf $out/lib/openjdk/jre/lib/cmm
|
||||
ln -s {$jre,$out}/lib/openjdk/jre/lib/cmm
|
||||
|
||||
# Setup fallback fonts
|
||||
${lib.optionalString (!headless) ''
|
||||
mkdir -p $jre/lib/openjdk/jre/lib/fonts
|
||||
ln -s ${liberation_ttf}/share/fonts/truetype $jre/lib/openjdk/jre/lib/fonts/fallback
|
||||
''}
|
||||
|
||||
# Remove duplicate binaries.
|
||||
for i in $(cd $out/lib/openjdk/bin && echo *); do
|
||||
if [ "$i" = java ]; then continue; fi
|
||||
if cmp -s $out/lib/openjdk/bin/$i $jre/lib/openjdk/jre/bin/$i; then
|
||||
ln -sfn $jre/lib/openjdk/jre/bin/$i $out/lib/openjdk/bin/$i
|
||||
fi
|
||||
done
|
||||
|
||||
# Generate certificates.
|
||||
(
|
||||
cd $jre/lib/openjdk/jre/lib/security
|
||||
rm cacerts
|
||||
perl ${./generate-cacerts.pl} $jre/lib/openjdk/jre/bin/keytool ${cacert}/etc/ssl/certs/ca-bundle.crt
|
||||
)
|
||||
|
||||
ln -s $out/lib/openjdk/bin $out/bin
|
||||
ln -s $jre/lib/openjdk/jre/bin $jre/bin
|
||||
ln -s $jre/lib/openjdk/jre $out/jre
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = [ setJavaClassPath ];
|
||||
|
||||
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 $jre/nix-support
|
||||
printWords ${setJavaClassPath} > $jre/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 | uniq | 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 = [ openjdk8-bootstrap ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "http://openjdk.java.net/";
|
||||
license = licenses.gpl2;
|
||||
description = "Open-source Java Development Kit";
|
||||
maintainers = with maintainers; [ edwtjo ];
|
||||
platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
|
||||
mainProgram = "java";
|
||||
# Broken for musl at 2024-01-17. Tracking issue:
|
||||
# https://github.com/NixOS/nixpkgs/issues/281618
|
||||
# error: ‘isnanf’ was not declared in this scope
|
||||
broken = stdenv.hostPlatform.isMusl;
|
||||
};
|
||||
|
||||
passthru = {
|
||||
inherit architecture;
|
||||
home = "${openjdk8}/lib/openjdk";
|
||||
inherit gtk2;
|
||||
};
|
||||
};
|
||||
in openjdk8
|
6
pkgs/development/compilers/openjdk/8/source.json
Normal file
6
pkgs/development/compilers/openjdk/8/source.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"hash": "sha256-uMo1DIkji+FPTbFRwURXybkLE5xv+teSClWP9RfAvfo=",
|
||||
"owner": "openjdk",
|
||||
"repo": "jdk8u",
|
||||
"rev": "jdk8u422-ga"
|
||||
}
|
@ -1,181 +0,0 @@
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.URI;
|
||||
import java.net.http.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
public class JavaUpdater {
|
||||
|
||||
record GitHubResult(Optional<String> latestVersion, Optional<String> next) {
|
||||
}
|
||||
|
||||
record JsonInfo(String repo, String version, String hash) {
|
||||
public JsonInfo(JSONObject json) {
|
||||
this(json.getString("repo"), json.getString("version"), json.getString("hash"));
|
||||
}
|
||||
|
||||
public String toJsonString(String featureVersion) {
|
||||
return """
|
||||
\s "%s": {
|
||||
\s "version": "%s",
|
||||
\s "repo": "%s",
|
||||
\s "hash": "%s"
|
||||
\s }\
|
||||
""".formatted(featureVersion, version, repo, hash);
|
||||
}
|
||||
}
|
||||
|
||||
// Parses the GitHub Link header
|
||||
public static Optional<String> getNextLink(HttpHeaders headers) {
|
||||
var linkHeader = headers.map().get("Link");
|
||||
if (linkHeader == null || linkHeader.isEmpty()) return null;
|
||||
|
||||
var links = linkHeader.getFirst();
|
||||
var linksRegex = Pattern.compile("<(.+)>;\\s*rel=\"next\"");
|
||||
return Pattern.compile(",")
|
||||
.splitAsStream(links)
|
||||
.map(x -> linksRegex.matcher(x).results()
|
||||
.map(g -> g.group(1))
|
||||
.findFirst()
|
||||
)
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::orElseThrow)
|
||||
.findFirst();
|
||||
}
|
||||
|
||||
// HTTP request helper, sets GITHUB_TOKEN if present
|
||||
private static HttpRequest NewGithubRequest(String url) {
|
||||
var token = System.getenv().get("GITHUB_TOKEN");
|
||||
var builder = HttpRequest.newBuilder()
|
||||
.uri(URI.create(url));
|
||||
if (token != null)
|
||||
builder.setHeader("Authorization", "Bearer " + token);
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private static GitHubResult getLatestTag(String url) {
|
||||
var request = NewGithubRequest(url);
|
||||
|
||||
var response =
|
||||
HttpClient.newHttpClient().sendAsync(request, HttpResponse.BodyHandlers.ofString())
|
||||
.join();
|
||||
|
||||
var json = new JSONArray(response.body());
|
||||
|
||||
Optional<String> version = StreamSupport.stream(json.spliterator(), false)
|
||||
.map(JSONObject.class::cast)
|
||||
.map(x -> x.getString("name").replaceFirst("jdk-", ""))
|
||||
.filter(x -> x.contains("-ga"))
|
||||
.max(Comparator.comparing(Runtime.Version::parse));
|
||||
|
||||
return new GitHubResult(version, getNextLink(response.headers()));
|
||||
}
|
||||
|
||||
public String findNewerVersion() {
|
||||
var url = Optional.of("https://api.github.com/repos/openjdk/" + getRepo() + "/tags?per_page=100");
|
||||
String version = getCurrentVersion();
|
||||
do {
|
||||
GitHubResult response = getLatestTag(url.orElseThrow());
|
||||
if (response.latestVersion.isPresent() && response.latestVersion.orElseThrow().equals(version)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String latestVersion = Stream.of(version, response.latestVersion.orElse(version))
|
||||
.max(Comparator.comparing(Runtime.Version::parse)).orElseThrow();
|
||||
|
||||
if (latestVersion != version)
|
||||
return latestVersion;
|
||||
|
||||
url = response.next;
|
||||
} while (url.isPresent());
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private static String prettyPrint(JSONObject json) {
|
||||
|
||||
Iterable<String> iterable = () -> json.keys();
|
||||
|
||||
return StreamSupport
|
||||
.stream(iterable.spliterator(), false)
|
||||
.sorted(Comparator.reverseOrder())
|
||||
.map(majorVersion -> (new JsonInfo(json.getJSONObject(majorVersion))).toJsonString(majorVersion))
|
||||
.collect(
|
||||
Collectors.joining(",\n", "{\n", "\n}")
|
||||
);
|
||||
}
|
||||
|
||||
public void updateJsonInfo(String newVersion) {
|
||||
try {
|
||||
JSONObject json = getJsonInfo();
|
||||
var info = json.getJSONObject(featureNumber);
|
||||
info.put("version", newVersion);
|
||||
info.put("hash", nixHash(newVersion));
|
||||
|
||||
try (PrintWriter out = new PrintWriter(infoJsonPath)) {
|
||||
out.println(prettyPrint(json));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private String nixHash(String version) {
|
||||
try {
|
||||
var process = new ProcessBuilder("nix", "flake", "prefetch",
|
||||
"--extra-experimental-features", "'nix-command flakes'",
|
||||
"--json", "github:openjdk/" + getRepo() + "/jdk-" + version).start();
|
||||
|
||||
var json = new JSONObject(new String(process.getInputStream().readAllBytes()));
|
||||
process.waitFor();
|
||||
return json.getString("hash");
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private final String featureNumber;
|
||||
private final String infoJsonPath;
|
||||
private final JSONObject jsonInfo;
|
||||
|
||||
public String getCurrentVersion() {
|
||||
return this.jsonInfo.getJSONObject(this.featureNumber).getString("version");
|
||||
}
|
||||
|
||||
public String getRepo() {
|
||||
return this.jsonInfo.getJSONObject(this.featureNumber).getString("repo");
|
||||
}
|
||||
|
||||
public JSONObject getJsonInfo() {
|
||||
try {
|
||||
String infoStr = Files.readString(Path.of(this.infoJsonPath));
|
||||
return new JSONObject(infoStr);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public JavaUpdater(String featureNumber, String infoJsonPath) {
|
||||
this.featureNumber = featureNumber;
|
||||
this.infoJsonPath = infoJsonPath;
|
||||
this.jsonInfo = getJsonInfo();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
var updater = new JavaUpdater(args[0], args[1]);
|
||||
String newerVersion = updater.findNewerVersion();
|
||||
if (newerVersion != null) {
|
||||
updater.updateJsonInfo(newerVersion);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
Taken from https://build.opensuse.org/package/view_file/Java:Factory/java-15-openjdk/openjdk-glibc234.patch
|
||||
|
||||
--- openjdk/test/hotspot/jtreg/runtime/StackGuardPages/exeinvoke.c 2021-04-09 11:36:58.000000000 +0200
|
||||
+++ openjdk/test/hotspot/jtreg/runtime/StackGuardPages/exeinvoke.c 2021-08-26 15:42:52.326232581 +0200
|
||||
@@ -67,8 +67,17 @@
|
||||
longjmp(context, 1);
|
||||
}
|
||||
|
||||
+static char* altstack = NULL;
|
||||
+
|
||||
void set_signal_handler() {
|
||||
- static char altstack[SIGSTKSZ];
|
||||
+ if (altstack == NULL) {
|
||||
+ // Dynamically allocated in case SIGSTKSZ is not constant
|
||||
+ altstack = malloc(SIGSTKSZ);
|
||||
+ if (altstack == NULL) {
|
||||
+ fprintf(stderr, "Test ERROR. Unable to malloc altstack space\n");
|
||||
+ exit(7);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
stack_t ss = {
|
||||
.ss_size = SIGSTKSZ,
|
||||
|
660
pkgs/development/compilers/openjdk/generic.nix
Normal file
660
pkgs/development/compilers/openjdk/generic.nix
Normal file
@ -0,0 +1,660 @@
|
||||
{
|
||||
featureVersion,
|
||||
|
||||
lib,
|
||||
stdenv,
|
||||
|
||||
fetchurl,
|
||||
fetchpatch,
|
||||
|
||||
pkg-config,
|
||||
autoconf,
|
||||
lndir,
|
||||
unzip,
|
||||
ensureNewerSourcesForZipFilesHook,
|
||||
|
||||
cpio,
|
||||
file,
|
||||
which,
|
||||
zip,
|
||||
perl,
|
||||
zlib,
|
||||
cups,
|
||||
freetype,
|
||||
harfbuzz,
|
||||
alsa-lib,
|
||||
libjpeg,
|
||||
giflib,
|
||||
libpng,
|
||||
lcms2,
|
||||
libX11,
|
||||
libICE,
|
||||
libXext,
|
||||
libXrender,
|
||||
libXtst,
|
||||
libXt,
|
||||
libXi,
|
||||
libXinerama,
|
||||
libXcursor,
|
||||
libXrandr,
|
||||
fontconfig,
|
||||
|
||||
setJavaClassPath,
|
||||
|
||||
versionCheckHook,
|
||||
|
||||
bash,
|
||||
liberation_ttf,
|
||||
cacert,
|
||||
|
||||
nixpkgs-openjdk-updater,
|
||||
|
||||
# TODO(@sternenseemann): gtk3 fails to evaluate in pkgsCross.ghcjs.buildPackages
|
||||
# which should be fixable, this is a no-rebuild workaround for GHC.
|
||||
headless ? lib.versionAtLeast featureVersion "21" && stdenv.targetPlatform.isGhcjs,
|
||||
|
||||
enableJavaFX ? false,
|
||||
openjfx17,
|
||||
openjfx21,
|
||||
openjfx23,
|
||||
openjfx_jdk ?
|
||||
{
|
||||
"17" = openjfx17;
|
||||
"21" = openjfx21;
|
||||
"23" = openjfx23;
|
||||
}
|
||||
.${featureVersion} or (throw "JavaFX is not supported on OpenJDK ${featureVersion}"),
|
||||
|
||||
enableGtk ? true,
|
||||
gtk3,
|
||||
gtk2,
|
||||
glib,
|
||||
|
||||
temurin-bin-8,
|
||||
temurin-bin-11,
|
||||
temurin-bin-17,
|
||||
temurin-bin-21,
|
||||
temurin-bin-23,
|
||||
jdk-bootstrap ?
|
||||
{
|
||||
"8" = temurin-bin-8;
|
||||
"11" = temurin-bin-11;
|
||||
"17" = temurin-bin-17;
|
||||
"21" = temurin-bin-21;
|
||||
"23" = temurin-bin-23;
|
||||
}
|
||||
.${featureVersion},
|
||||
}:
|
||||
|
||||
let
|
||||
sourceFile = ./. + "/${featureVersion}/source.json";
|
||||
source = nixpkgs-openjdk-updater.openjdkSource {
|
||||
inherit sourceFile;
|
||||
featureVersionPrefix = tagPrefix + featureVersion;
|
||||
};
|
||||
|
||||
atLeast11 = lib.versionAtLeast featureVersion "11";
|
||||
atLeast17 = lib.versionAtLeast featureVersion "17";
|
||||
atLeast21 = lib.versionAtLeast featureVersion "21";
|
||||
atLeast23 = lib.versionAtLeast featureVersion "23";
|
||||
|
||||
tagPrefix = if atLeast11 then "jdk-" else "jdk";
|
||||
# TODO: Merge these `lib.removePrefix` calls once update scripts have
|
||||
# been run.
|
||||
version = lib.removePrefix tagPrefix (lib.removePrefix "refs/tags/" source.src.rev);
|
||||
versionSplit =
|
||||
# TODO: Remove `-ga` logic once update scripts have been run.
|
||||
builtins.match (if atLeast11 then "(.+)[-+](.+)" else "(.+)-b?(.+)") version;
|
||||
versionBuild = lib.elemAt versionSplit 1;
|
||||
|
||||
# The JRE 8 libraries are in directories that depend on the CPU.
|
||||
architecture =
|
||||
if atLeast11 then
|
||||
""
|
||||
else
|
||||
{
|
||||
i686-linux = "i386";
|
||||
x86_64-linux = "amd64";
|
||||
aarch64-linux = "aarch64";
|
||||
powerpc64le-linux = "ppc64le";
|
||||
}
|
||||
.${stdenv.system} or (throw "Unsupported platform ${stdenv.system}");
|
||||
|
||||
jdk-bootstrap' = jdk-bootstrap.override {
|
||||
# when building a headless jdk, also bootstrap it with a headless jdk
|
||||
gtkSupport = !headless;
|
||||
};
|
||||
in
|
||||
|
||||
assert lib.assertMsg (lib.pathExists sourceFile)
|
||||
"OpenJDK ${featureVersion} is not a supported version";
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "openjdk" + lib.optionalString headless "-headless";
|
||||
inherit version;
|
||||
|
||||
outputs =
|
||||
[
|
||||
"out"
|
||||
]
|
||||
++ lib.optionals (!atLeast11) [
|
||||
"jre"
|
||||
];
|
||||
|
||||
inherit (source) src;
|
||||
|
||||
patches =
|
||||
[
|
||||
(
|
||||
if atLeast21 then
|
||||
./21/patches/fix-java-home-jdk21.patch
|
||||
else if atLeast11 then
|
||||
./11/patches/fix-java-home-jdk10.patch
|
||||
else
|
||||
./8/patches/fix-java-home-jdk8.patch
|
||||
)
|
||||
(
|
||||
if atLeast11 then
|
||||
./11/patches/read-truststore-from-env-jdk10.patch
|
||||
else
|
||||
./8/patches/read-truststore-from-env-jdk8.patch
|
||||
)
|
||||
]
|
||||
++ lib.optionals (!atLeast23) [
|
||||
(
|
||||
if atLeast11 then
|
||||
./11/patches/currency-date-range-jdk10.patch
|
||||
else
|
||||
./8/patches/currency-date-range-jdk8.patch
|
||||
)
|
||||
]
|
||||
++ lib.optionals atLeast11 [
|
||||
(
|
||||
if atLeast17 then
|
||||
./17/patches/increase-javadoc-heap-jdk13.patch
|
||||
else
|
||||
./11/patches/increase-javadoc-heap.patch
|
||||
)
|
||||
]
|
||||
++ lib.optionals atLeast17 [
|
||||
(
|
||||
if atLeast21 then
|
||||
./21/patches/ignore-LegalNoticeFilePlugin-jdk18.patch
|
||||
else
|
||||
./17/patches/ignore-LegalNoticeFilePlugin-jdk17.patch
|
||||
)
|
||||
]
|
||||
++ lib.optionals (!atLeast21) [
|
||||
(
|
||||
if atLeast17 then
|
||||
./17/patches/fix-library-path-jdk17.patch
|
||||
else if atLeast11 then
|
||||
./11/patches/fix-library-path-jdk11.patch
|
||||
else
|
||||
./8/patches/fix-library-path-jdk8.patch
|
||||
)
|
||||
]
|
||||
++ lib.optionals (atLeast17 && !atLeast23) [
|
||||
# -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 (featureVersion == "17") [
|
||||
# Patch borrowed from Alpine to fix build errors with musl libc and recent gcc.
|
||||
# This is applied anywhere to prevent patchrot.
|
||||
(fetchurl {
|
||||
url = "https://git.alpinelinux.org/aports/plain/community/openjdk17/FixNullPtrCast.patch?id=41e78a067953e0b13d062d632bae6c4f8028d91c";
|
||||
sha256 = "sha256-LzmSew51+DyqqGyyMw2fbXeBluCiCYsS1nCjt9hX6zo=";
|
||||
})
|
||||
]
|
||||
++ lib.optionals atLeast11 [
|
||||
# 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 (featureVersion == "17") [
|
||||
# Backport fixes for musl 1.2.4 which are already applied in jdk21+
|
||||
# Fetching patch from chimera because they already went through the effort of rebasing it onto jdk17
|
||||
(fetchurl {
|
||||
name = "lfs64.patch";
|
||||
url = "https://raw.githubusercontent.com/chimera-linux/cports/4614075d19e9c9636f3f7e476687247f63330a35/contrib/openjdk17/patches/lfs64.patch";
|
||||
hash = "sha256-t2mRbdEiumBAbIAC0zsJNwCn59WYWHsnRtuOSL6bWB4=";
|
||||
})
|
||||
]
|
||||
++ lib.optionals (!headless && enableGtk) [
|
||||
(
|
||||
if atLeast17 then
|
||||
./17/patches/swing-use-gtk-jdk13.patch
|
||||
else if atLeast11 then
|
||||
./11/patches/swing-use-gtk-jdk10.patch
|
||||
else
|
||||
./8/patches/swing-use-gtk-jdk8.patch
|
||||
)
|
||||
];
|
||||
|
||||
nativeBuildInputs =
|
||||
[
|
||||
pkg-config
|
||||
]
|
||||
++ lib.optionals atLeast11 [
|
||||
autoconf
|
||||
]
|
||||
++ lib.optionals (!atLeast11) [
|
||||
lndir
|
||||
]
|
||||
++ [
|
||||
unzip
|
||||
]
|
||||
++ lib.optionals atLeast21 [
|
||||
ensureNewerSourcesForZipFilesHook
|
||||
];
|
||||
|
||||
buildInputs =
|
||||
[
|
||||
# TODO: Many of these should likely be in `nativeBuildInputs`.
|
||||
cpio
|
||||
file
|
||||
which
|
||||
zip
|
||||
perl
|
||||
zlib
|
||||
cups
|
||||
freetype
|
||||
]
|
||||
++ lib.optionals (atLeast11 && !atLeast21) [
|
||||
harfbuzz
|
||||
]
|
||||
++ [
|
||||
alsa-lib
|
||||
libjpeg
|
||||
giflib
|
||||
]
|
||||
++ lib.optionals atLeast11 [
|
||||
libpng
|
||||
zlib # duplicate
|
||||
lcms2
|
||||
]
|
||||
++ [
|
||||
libX11
|
||||
libICE
|
||||
]
|
||||
++ lib.optionals (!atLeast11) [
|
||||
libXext
|
||||
]
|
||||
++ [
|
||||
libXrender
|
||||
]
|
||||
++ lib.optionals atLeast11 [
|
||||
libXext
|
||||
]
|
||||
++ [
|
||||
libXtst
|
||||
libXt
|
||||
libXtst # duplicate
|
||||
libXi
|
||||
libXinerama
|
||||
libXcursor
|
||||
libXrandr
|
||||
fontconfig
|
||||
jdk-bootstrap'
|
||||
]
|
||||
++ lib.optionals (!headless && enableGtk) [
|
||||
(if atLeast11 then gtk3 else gtk2)
|
||||
glib
|
||||
];
|
||||
|
||||
propagatedBuildInputs = lib.optionals (!atLeast11) [ setJavaClassPath ];
|
||||
|
||||
nativeInstallCheckInputs = lib.optionals atLeast23 [
|
||||
versionCheckHook
|
||||
];
|
||||
|
||||
# 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
|
||||
${if atLeast17 then "configurePlatforms" else null} = [
|
||||
"build"
|
||||
"host"
|
||||
];
|
||||
|
||||
# https://openjdk.org/groups/build/doc/building.html
|
||||
configureFlags =
|
||||
[
|
||||
"--with-boot-jdk=${jdk-bootstrap'.home}"
|
||||
]
|
||||
++ (
|
||||
if atLeast23 then
|
||||
[
|
||||
"--with-version-string=${version}"
|
||||
"--with-vendor-version-string=(nix)"
|
||||
]
|
||||
else if atLeast11 then
|
||||
lib.optionals atLeast17 [
|
||||
"--with-version-build=${versionBuild}"
|
||||
"--with-version-opt=nixos"
|
||||
]
|
||||
++ [
|
||||
"--with-version-pre="
|
||||
]
|
||||
else
|
||||
[
|
||||
"--with-update-version=${lib.removePrefix "${featureVersion}u" (lib.elemAt versionSplit 0)}"
|
||||
"--with-build-number=${versionBuild}"
|
||||
"--with-milestone=fcs"
|
||||
]
|
||||
)
|
||||
++ [
|
||||
"--enable-unlimited-crypto"
|
||||
"--with-native-debug-symbols=internal"
|
||||
]
|
||||
++ lib.optionals (!atLeast21) (
|
||||
if atLeast11 then
|
||||
[
|
||||
"--with-freetype=system"
|
||||
"--with-harfbuzz=system"
|
||||
]
|
||||
else
|
||||
[
|
||||
"--disable-freetype-bundling"
|
||||
]
|
||||
)
|
||||
++ (
|
||||
if atLeast11 then
|
||||
[
|
||||
"--with-libjpeg=system"
|
||||
"--with-giflib=system"
|
||||
"--with-libpng=system"
|
||||
"--with-zlib=system"
|
||||
"--with-lcms=system"
|
||||
]
|
||||
else
|
||||
[
|
||||
"--with-zlib=system"
|
||||
"--with-giflib=system"
|
||||
]
|
||||
)
|
||||
++ [
|
||||
"--with-stdc++lib=dynamic"
|
||||
]
|
||||
++ lib.optionals (featureVersion == "11") [
|
||||
"--disable-warnings-as-errors"
|
||||
]
|
||||
# OpenJDK 11 cannot be built by recent versions of Clang, as far as I can tell (see
|
||||
# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=260319). Known to
|
||||
# compile with LLVM 12.
|
||||
++ lib.optionals (atLeast11 && stdenv.cc.isClang) [
|
||||
"--with-toolchain-type=clang"
|
||||
# Explicitly tell Clang to compile C++ files as C++, see
|
||||
# https://github.com/NixOS/nixpkgs/issues/150655#issuecomment-1935304859
|
||||
"--with-extra-cxxflags=-xc++"
|
||||
]
|
||||
# This probably shouldn’t apply to OpenJDK 21; see
|
||||
# b7e68243306833845cbf92e2ea1e0cf782481a51 which removed it for
|
||||
# versions 15 through 20.
|
||||
++ lib.optional (
|
||||
(featureVersion == "11" || featureVersion == "21") && stdenv.hostPlatform.isx86_64
|
||||
) "--with-jvm-features=zgc"
|
||||
++ lib.optional headless (if atLeast11 then "--enable-headless-only" else "--disable-headful")
|
||||
++ lib.optional (!headless && enableJavaFX) "--with-import-modules=${openjfx_jdk}";
|
||||
|
||||
buildFlags = if atLeast17 then [ "images" ] else [ "all" ];
|
||||
|
||||
separateDebugInfo = true;
|
||||
|
||||
# -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;
|
||||
|
||||
env =
|
||||
{
|
||||
NIX_CFLAGS_COMPILE =
|
||||
if atLeast17 then
|
||||
"-Wno-error"
|
||||
else if atLeast11 then
|
||||
# Workaround for
|
||||
# `cc1plus: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]`
|
||||
# when building jtreg
|
||||
"-Wformat"
|
||||
else
|
||||
lib.concatStringsSep " " (
|
||||
[
|
||||
# glibc 2.24 deprecated readdir_r so we need this
|
||||
# See https://www.mail-archive.com/openembedded-devel@lists.openembedded.org/msg49006.html
|
||||
"-Wno-error=deprecated-declarations"
|
||||
]
|
||||
++ lib.optionals stdenv.cc.isGNU [
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1306558
|
||||
# https://github.com/JetBrains/jdk8u/commit/eaa5e0711a43d64874111254d74893fa299d5716
|
||||
"-fno-lifetime-dse"
|
||||
"-fno-delete-null-pointer-checks"
|
||||
"-std=gnu++98"
|
||||
"-Wno-error"
|
||||
]
|
||||
);
|
||||
|
||||
NIX_LDFLAGS = lib.concatStringsSep " " (
|
||||
lib.optionals (!headless) [
|
||||
"-lfontconfig"
|
||||
"-lcups"
|
||||
"-lXinerama"
|
||||
"-lXrandr"
|
||||
"-lmagic"
|
||||
]
|
||||
++ lib.optionals (!headless && enableGtk) [
|
||||
(if atLeast11 then "-lgtk-3" else "-lgtk-x11-2.0")
|
||||
"-lgio-2.0"
|
||||
]
|
||||
);
|
||||
}
|
||||
// lib.optionalAttrs (!atLeast11) {
|
||||
# OpenJDK 8 Hotspot cares about the host(!) version otherwise
|
||||
DISABLE_HOTSPOT_OS_VERSION_CHECK = "ok";
|
||||
};
|
||||
|
||||
${if atLeast23 then "versionCheckProgram" else null} = "${placeholder "out"}/bin/java";
|
||||
|
||||
${if !atLeast11 then "doCheck" else null} = false; # fails with "No rule to make target 'y'."
|
||||
|
||||
doInstallCheck = atLeast23;
|
||||
|
||||
${if atLeast17 then "postPatch" else null} = ''
|
||||
chmod +x configure
|
||||
patchShebangs --build configure
|
||||
'';
|
||||
|
||||
${if !atLeast17 then "preConfigure" else null} =
|
||||
''
|
||||
chmod +x configure
|
||||
substituteInPlace configure --replace /bin/bash "${bash}/bin/bash"
|
||||
''
|
||||
+ lib.optionalString (!atLeast11) ''
|
||||
substituteInPlace hotspot/make/linux/adlc_updater --replace /bin/sh "${stdenv.shell}"
|
||||
substituteInPlace hotspot/make/linux/makefiles/dtrace.make --replace /usr/include/sys/sdt.h "/no-such-path"
|
||||
'';
|
||||
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out/lib
|
||||
|
||||
mv build/*/images/${if atLeast11 then "jdk" else "j2sdk-image"} $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
|
||||
''
|
||||
+ lib.optionalString atLeast17 ''
|
||||
|
||||
# IDEs use the provided src.zip to navigate the Java codebase (https://github.com/NixOS/nixpkgs/pull/95081)
|
||||
''
|
||||
+ lib.optionalString atLeast11 ''
|
||||
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 (!atLeast11) " $out/lib/openjdk/sample"}
|
||||
${lib.optionalString headless (
|
||||
if atLeast11 then
|
||||
''
|
||||
rm $out/lib/openjdk/lib/{libjsound,libfontmanager}.so
|
||||
''
|
||||
else
|
||||
''
|
||||
rm $out/lib/openjdk/jre/lib/${architecture}/{libjsound,libjsoundalsa,libsplashscreen,libawt*,libfontmanager}.so
|
||||
rm $out/lib/openjdk/jre/bin/policytool
|
||||
rm $out/lib/openjdk/bin/{policytool,appletviewer}
|
||||
''
|
||||
)}
|
||||
''
|
||||
+ lib.optionalString (!atLeast11) ''
|
||||
|
||||
# Move the JRE to a separate output
|
||||
mkdir -p $jre/lib/openjdk
|
||||
mv $out/lib/openjdk/jre $jre/lib/openjdk/jre
|
||||
mkdir $out/lib/openjdk/jre
|
||||
lndir $jre/lib/openjdk/jre $out/lib/openjdk/jre
|
||||
|
||||
# Make sure cmm/*.pf are not symlinks:
|
||||
# https://youtrack.jetbrains.com/issue/IDEA-147272
|
||||
rm -rf $out/lib/openjdk/jre/lib/cmm
|
||||
ln -s {$jre,$out}/lib/openjdk/jre/lib/cmm
|
||||
|
||||
# Setup fallback fonts
|
||||
${lib.optionalString (!headless) ''
|
||||
mkdir -p $jre/lib/openjdk/jre/lib/fonts
|
||||
ln -s ${liberation_ttf}/share/fonts/truetype $jre/lib/openjdk/jre/lib/fonts/fallback
|
||||
''}
|
||||
|
||||
# Remove duplicate binaries.
|
||||
for i in $(cd $out/lib/openjdk/bin && echo *); do
|
||||
if [ "$i" = java ]; then continue; fi
|
||||
if cmp -s $out/lib/openjdk/bin/$i $jre/lib/openjdk/jre/bin/$i; then
|
||||
ln -sfn $jre/lib/openjdk/jre/bin/$i $out/lib/openjdk/bin/$i
|
||||
fi
|
||||
done
|
||||
|
||||
# Generate certificates.
|
||||
(
|
||||
cd $jre/lib/openjdk/jre/lib/security
|
||||
rm cacerts
|
||||
perl ${./8/generate-cacerts.pl} $jre/lib/openjdk/jre/bin/keytool ${cacert}/etc/ssl/certs/ca-bundle.crt
|
||||
)
|
||||
''
|
||||
+ ''
|
||||
|
||||
ln -s $out/lib/openjdk/bin $out/bin
|
||||
''
|
||||
+ lib.optionalString (!atLeast11) ''
|
||||
ln -s $jre/lib/openjdk/jre/bin $jre/bin
|
||||
ln -s $jre/lib/openjdk/jre $out/jre
|
||||
'';
|
||||
|
||||
preFixup =
|
||||
(
|
||||
if atLeast11 then
|
||||
''
|
||||
# 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
|
||||
''
|
||||
else
|
||||
''
|
||||
# Propagate the setJavaClassPath setup hook from the JRE so that
|
||||
# any package that depends on the JRE has $CLASSPATH set up
|
||||
# properly.
|
||||
mkdir -p $jre/nix-support
|
||||
printWords ${setJavaClassPath} > $jre/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 {} \+ | ${
|
||||
if atLeast17 then "sort -u" else "sort | uniq"
|
||||
} | 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
|
||||
'';
|
||||
|
||||
# TODO: The OpenJDK 8 derivation got this wrong.
|
||||
disallowedReferences = [
|
||||
(if atLeast11 then jdk-bootstrap' else jdk-bootstrap)
|
||||
];
|
||||
|
||||
passthru =
|
||||
{
|
||||
home = "${finalAttrs.finalPackage}/lib/openjdk";
|
||||
inherit jdk-bootstrap;
|
||||
inherit (source) updateScript;
|
||||
}
|
||||
// (if atLeast11 then { inherit gtk3; } else { inherit gtk2; })
|
||||
// lib.optionalAttrs (!atLeast23) {
|
||||
inherit architecture;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Open-source Java Development Kit";
|
||||
homepage = "https://openjdk.java.net/";
|
||||
license = lib.licenses.gpl2Only;
|
||||
maintainers = with lib.maintainers; [
|
||||
edwtjo
|
||||
infinidoge
|
||||
];
|
||||
mainProgram = "java";
|
||||
platforms =
|
||||
[
|
||||
"i686-linux"
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
]
|
||||
++ lib.optionals atLeast11 [
|
||||
"armv7l-linux"
|
||||
"armv6l-linux"
|
||||
"powerpc64le-linux"
|
||||
];
|
||||
# OpenJDK 8 was broken for musl at 2024-01-17. Tracking issue:
|
||||
# https://github.com/NixOS/nixpkgs/issues/281618
|
||||
# error: ‘isnanf’ was not declared in this scope
|
||||
broken = !atLeast11 && stdenv.hostPlatform.isMusl;
|
||||
};
|
||||
})
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"23": {
|
||||
"version": "23-ga",
|
||||
"repo": "jdk23u",
|
||||
"hash": "sha256-lcLnWAiskWindOqWmOWiIHiYKXGSJZK4d20k19QZfrE="
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
lib: version: with lib; {
|
||||
homepage = "https://openjdk.java.net/";
|
||||
license = licenses.gpl2Only;
|
||||
description = "Open-source Java Development Kit";
|
||||
maintainers = with maintainers; [ edwtjo infinidoge ];
|
||||
platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux" "armv6l-linux" "powerpc64le-linux" ];
|
||||
mainProgram = "java";
|
||||
knownVulnerabilities = optionals (builtins.elem (versions.major version) [ "12" "13" "14" "15" "16" "18" "19" "20" ]) [
|
||||
"This OpenJDK version has reached its end of life."
|
||||
];
|
||||
}
|
@ -1,98 +0,0 @@
|
||||
{ stdenv, lib, pkgs, fetchFromGitHub, writeText, openjdk17_headless, gradle_7
|
||||
, pkg-config, perl, cmake, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsa-lib
|
||||
, ffmpeg-headless, python3, ruby
|
||||
, withMedia ? true
|
||||
, withWebKit ? false
|
||||
}:
|
||||
|
||||
let
|
||||
pname = "openjfx-modular-sdk";
|
||||
major = "17";
|
||||
update = ".0.11";
|
||||
build = "-ga";
|
||||
repover = "${major}${update}${build}";
|
||||
jdk = openjdk17_headless;
|
||||
gradle = gradle_7;
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
version = "${major}${update}${build}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "openjdk";
|
||||
repo = "jfx${major}u";
|
||||
rev = repover;
|
||||
sha256 = "sha256-9VfXk2EfMebMyVKPohPRP2QXRFf8XemUtfY0JtBCHyw=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
../backport-ffmpeg-6-support-jfx11.patch
|
||||
../backport-ffmpeg-7-support-jfx11.patch
|
||||
];
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg-headless ];
|
||||
nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
||||
config = writeText "gradle.properties" ''
|
||||
CONF = Release
|
||||
JDK_HOME = ${jdk.home}
|
||||
COMPILE_MEDIA = ${lib.boolToString withMedia}
|
||||
COMPILE_WEBKIT = ${lib.boolToString withWebKit}
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
# Add missing includes for gcc-13 for webkit build:
|
||||
sed -e '1i #include <cstdio>' \
|
||||
-i modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/Heap.cpp \
|
||||
modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/IsoSharedPageInlines.h
|
||||
|
||||
substituteInPlace modules/javafx.web/src/main/native/Source/JavaScriptCore/offlineasm/parser.rb \
|
||||
--replace-fail "File.exists?" "File.exist?"
|
||||
|
||||
ln -s $config gradle.properties
|
||||
'';
|
||||
|
||||
mitmCache = gradle.fetchDeps {
|
||||
attrPath = "openjfx${major}";
|
||||
pkg = pkgs."openjfx${major}".override { withWebKit = true; };
|
||||
data = ./deps.json;
|
||||
};
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
preBuild = ''
|
||||
export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
|
||||
export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
|
||||
'';
|
||||
|
||||
enableParallelBuilding = false;
|
||||
|
||||
gradleBuildTask = "sdk";
|
||||
|
||||
installPhase = ''
|
||||
cp -r build/modular-sdk $out
|
||||
'';
|
||||
|
||||
stripDebugList = [ "." ];
|
||||
|
||||
postFixup = ''
|
||||
# Remove references to bootstrap.
|
||||
export openjdkOutPath='${jdk.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 = [ jdk gradle.jdk ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "http://openjdk.java.net/projects/openjfx/";
|
||||
license = licenses.gpl2;
|
||||
description = "Next-generation Java client toolkit";
|
||||
maintainers = with maintainers; [ abbradar ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
{ stdenv, lib, pkgs, fetchFromGitHub, writeText
|
||||
, openjdk21_headless, gradle_7, pkg-config, perl, cmake, gperf, gtk2, gtk3, libXtst
|
||||
, libXxf86vm, glib, alsa-lib, ffmpeg, python3, ruby
|
||||
, withMedia ? true
|
||||
, withWebKit ? false
|
||||
}:
|
||||
|
||||
let
|
||||
pname = "openjfx-modular-sdk";
|
||||
major = "21";
|
||||
update = ".0.3";
|
||||
build = "-ga";
|
||||
repover = "${major}${update}${build}";
|
||||
jdk = openjdk21_headless;
|
||||
gradle = gradle_7;
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
version = "${major}${update}${build}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "openjdk";
|
||||
repo = "jfx21u";
|
||||
rev = repover;
|
||||
hash = "sha256-7z0GIbkQwG9mXY9dssaicqaKpMo3FkNEpyAvkswoQQ4=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
../backport-ffmpeg-7-support-jfx21.patch
|
||||
];
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg ];
|
||||
nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
||||
config = writeText "gradle.properties" ''
|
||||
CONF = Release
|
||||
JDK_HOME = ${jdk.home}
|
||||
COMPILE_MEDIA = ${lib.boolToString withMedia}
|
||||
COMPILE_WEBKIT = ${lib.boolToString withWebKit}
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
# Add missing includes for gcc-13 for webkit build:
|
||||
sed -e '1i #include <cstdio>' \
|
||||
-i modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/Heap.cpp \
|
||||
modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/IsoSharedPageInlines.h
|
||||
|
||||
ln -s $config gradle.properties
|
||||
'';
|
||||
|
||||
mitmCache = gradle.fetchDeps {
|
||||
attrPath = "openjfx${major}";
|
||||
pkg = pkgs."openjfx${major}".override { withWebKit = true; };
|
||||
data = ./deps.json;
|
||||
};
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
preBuild = ''
|
||||
export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
|
||||
export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
|
||||
'';
|
||||
|
||||
enableParallelBuilding = false;
|
||||
|
||||
gradleBuildTask = "sdk";
|
||||
|
||||
installPhase = ''
|
||||
cp -r build/modular-sdk $out
|
||||
'';
|
||||
|
||||
stripDebugList = [ "." ];
|
||||
|
||||
postFixup = ''
|
||||
# Remove references to bootstrap.
|
||||
export openjdkOutPath='${jdk.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 = [ jdk gradle.jdk ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://openjdk.org/projects/openjfx/";
|
||||
license = licenses.gpl2Classpath;
|
||||
description = "Next-generation Java client toolkit";
|
||||
maintainers = with maintainers; [ abbradar ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
@ -1,111 +0,0 @@
|
||||
{ stdenv
|
||||
, lib
|
||||
, pkgs
|
||||
, fetchFromGitHub
|
||||
, fetchpatch2
|
||||
, writeText
|
||||
, openjdk23_headless
|
||||
, gradle
|
||||
, pkg-config
|
||||
, perl
|
||||
, cmake
|
||||
, gperf
|
||||
, gtk2
|
||||
, gtk3
|
||||
, libXtst
|
||||
, libXxf86vm
|
||||
, glib
|
||||
, alsa-lib
|
||||
, ffmpeg
|
||||
, python3
|
||||
, ruby
|
||||
, withMedia ? true
|
||||
, withWebKit ? false
|
||||
}:
|
||||
|
||||
let
|
||||
pname = "openjfx-modular-sdk";
|
||||
major = "23";
|
||||
update = "";
|
||||
build = "-ga";
|
||||
repover = "${major}${update}${build}";
|
||||
jdk = openjdk23_headless;
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
version = "${major}${update}${build}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "openjdk";
|
||||
repo = "jfx23u";
|
||||
rev = repover;
|
||||
hash = "sha256-a/ev91Rq7D3z9O56ZZQCgvvbfj5GBt5Lonow2NH3s/E=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# 8338701: Provide media support for libavcodec version 61
|
||||
# <https://github.com/openjdk/jfx23u/pull/18>
|
||||
(fetchpatch2 {
|
||||
url = "https://github.com/openjdk/jfx23u/commit/aba60fda1c82f00e8e685107592305c403a31287.patch?full_index=1";
|
||||
hash = "sha256-+aRhTwi4VQthAq1SH1jxPl0mTosNMKoTY52jm+jiKso=";
|
||||
})
|
||||
];
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg ];
|
||||
nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
||||
config = writeText "gradle.properties" ''
|
||||
CONF = Release
|
||||
JDK_HOME = ${jdk.home}
|
||||
COMPILE_MEDIA = ${lib.boolToString withMedia}
|
||||
COMPILE_WEBKIT = ${lib.boolToString withWebKit}
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
ln -s $config gradle.properties
|
||||
'';
|
||||
|
||||
mitmCache = gradle.fetchDeps {
|
||||
attrPath = "openjfx${major}";
|
||||
pkg = pkgs."openjfx${major}".override { withWebKit = true; };
|
||||
data = ./deps.json;
|
||||
};
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
preBuild = ''
|
||||
export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
|
||||
export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
|
||||
'';
|
||||
|
||||
enableParallelBuilding = false;
|
||||
|
||||
gradleBuildTask = "sdk";
|
||||
|
||||
installPhase = ''
|
||||
cp -r build/modular-sdk $out
|
||||
'';
|
||||
|
||||
stripDebugList = [ "." ];
|
||||
|
||||
postFixup = ''
|
||||
# Remove references to bootstrap.
|
||||
export openjdkOutPath='${jdk.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 = [ jdk gradle.jdk ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://openjdk.org/projects/openjfx/";
|
||||
license = licenses.gpl2Classpath;
|
||||
description = "Next-generation Java client toolkit";
|
||||
maintainers = with maintainers; [ abbradar ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
@ -155,13 +155,14 @@ let
|
||||
home = jdk;
|
||||
};
|
||||
|
||||
meta = (import ../openjdk/meta.nix lib version) // {
|
||||
meta = {
|
||||
description = "Certified builds of OpenJDK";
|
||||
longDescription = ''
|
||||
Certified builds of OpenJDK that can be deployed across multiple
|
||||
operating systems, containers, hypervisors and Cloud platforms.
|
||||
'';
|
||||
homepage = "https://www.azul.com/products/zulu/";
|
||||
license = lib.licenses.gpl2Only;
|
||||
mainProgram = "java";
|
||||
maintainers = [ ];
|
||||
platforms = builtins.attrNames dists;
|
||||
|
@ -43,10 +43,13 @@ buildPythonPackage rec {
|
||||
"tests/subtests/test_subtest.py"
|
||||
];
|
||||
|
||||
# need to set MPLBACKEND=agg for headless matplotlib for darwin
|
||||
# https://github.com/matplotlib/matplotlib/issues/26292
|
||||
# The default tolerance is too strict in our build environment
|
||||
# https://github.com/matplotlib/pytest-mpl/pull/9
|
||||
# https://github.com/matplotlib/pytest-mpl/issues/225
|
||||
preCheck = ''
|
||||
export MPLBACKEND=agg
|
||||
substituteInPlace pytest_mpl/plugin.py \
|
||||
--replace-fail "DEFAULT_TOLERANCE = 2" "DEFAULT_TOLERANCE = 10"
|
||||
substituteInPlace tests/test_pytest_mpl.py \
|
||||
|
@ -2,7 +2,7 @@
|
||||
let
|
||||
jdk = openjdk.override (lib.optionalAttrs stdenv.hostPlatform.isLinux {
|
||||
enableJavaFX = true;
|
||||
openjfx = openjfx.override { withWebKit = true; };
|
||||
openjfx_jdk = openjfx.override { withWebKit = true; };
|
||||
});
|
||||
|
||||
pname = "scenic-view";
|
||||
|
@ -843,17 +843,17 @@ mapAliases {
|
||||
openimageio2 = openimageio; # Added 2023-01-05
|
||||
openisns = throw "'openisns' has been renamed to/replaced by 'open-isns'"; # Converted to throw 2024-10-17
|
||||
openjdk19 = throw "OpenJDK 19 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
openjdk19_headless = openjdk19; # Added 2024-08-01
|
||||
jdk19 = openjdk19; # Added 2024-08-01
|
||||
jdk19_headless = openjdk19; # Added 2024-08-01
|
||||
openjdk19_headless = throw "OpenJDK 19 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
jdk19 = throw "OpenJDK 19 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
jdk19_headless = throw "OpenJDK 19 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
openjdk20 = throw "OpenJDK 20 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
openjdk20_headless = openjdk20; # Added 2024-08-01
|
||||
jdk20 = openjdk20; # Added 2024-08-01
|
||||
jdk20_headless = openjdk20; # Added 2024-08-01
|
||||
openjdk20_headless = throw "OpenJDK 20 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
jdk20 = throw "OpenJDK 20 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
jdk20_headless = throw "OpenJDK 20 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
openjdk22 = throw "OpenJDK 22 was removed as it has reached its end of life"; # Added 2024-09-24
|
||||
openjdk22_headless = openjdk22; # Added 2024-09-24
|
||||
jdk22 = openjdk22; # Added 2024-09-24
|
||||
jdk22_headless = openjdk22; # Added 2024-09-24
|
||||
openjdk22_headless = throw "OpenJDK 22 was removed as it has reached its end of life"; # Added 2024-09-24
|
||||
jdk22 = throw "OpenJDK 22 was removed as it has reached its end of life"; # Added 2024-09-24
|
||||
jdk22_headless = throw "OpenJDK 22 was removed as it has reached its end of life"; # Added 2024-09-24
|
||||
openjfx11 = throw "OpenJFX 11 was removed as it has reached its end of life"; # Added 2024-10-07
|
||||
openjfx19 = throw "OpenJFX 19 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
openjfx20 = throw "OpenJFX 20 was removed as it has reached its end of life"; # Added 2024-08-01
|
||||
|
@ -15039,8 +15039,9 @@ with pkgs;
|
||||
|
||||
hugs = callPackage ../development/interpreters/hugs { };
|
||||
|
||||
inherit (javaPackages) openjfx17 openjfx21 openjfx23;
|
||||
openjfx = openjfx17;
|
||||
openjfx17 = openjfx;
|
||||
openjfx21 = callPackage ../by-name/op/openjfx/package.nix { featureVersion = "21"; };
|
||||
openjfx23 = callPackage ../by-name/op/openjfx/package.nix { featureVersion = "23"; };
|
||||
|
||||
openjdk8-bootstrap = javaPackages.compiler.openjdk8-bootstrap;
|
||||
openjdk8 = javaPackages.compiler.openjdk8;
|
||||
@ -28359,7 +28360,7 @@ with pkgs;
|
||||
bluej = callPackage ../applications/editors/bluej {
|
||||
openjdk = openjdk17.override {
|
||||
enableJavaFX = true;
|
||||
openjfx = openjfx17.override { withWebKit = true; };
|
||||
openjfx_jdk = openjfx17.override { withWebKit = true; };
|
||||
};
|
||||
};
|
||||
|
||||
@ -29004,7 +29005,7 @@ with pkgs;
|
||||
greenfoot = callPackage ../applications/editors/greenfoot {
|
||||
openjdk = openjdk17.override {
|
||||
enableJavaFX = true;
|
||||
openjfx = openjfx17.override { withWebKit = true; };
|
||||
openjfx_jdk = openjfx17.override { withWebKit = true; };
|
||||
};
|
||||
};
|
||||
|
||||
@ -30277,7 +30278,7 @@ with pkgs;
|
||||
jabref = callPackage ../applications/office/jabref {
|
||||
jdk = jdk21.override {
|
||||
enableJavaFX = true;
|
||||
openjfx = openjfx23.override { withWebKit = true; };
|
||||
openjfx_jdk = openjfx23.override { withWebKit = true; };
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -2,24 +2,19 @@
|
||||
|
||||
with pkgs;
|
||||
|
||||
let
|
||||
openjfx17 = callPackage ../development/compilers/openjdk/openjfx/17 { };
|
||||
openjfx21 = callPackage ../development/compilers/openjdk/openjfx/21 { };
|
||||
openjfx23 = callPackage ../development/compilers/openjdk/openjfx/23 { };
|
||||
|
||||
in {
|
||||
inherit openjfx17 openjfx21 openjfx23;
|
||||
{
|
||||
inherit (pkgs) openjfx17 openjfx21 openjfx23;
|
||||
|
||||
compiler = let
|
||||
mkOpenjdk = path-linux: path-darwin: args:
|
||||
mkOpenjdk = featureVersion: path-darwin:
|
||||
if stdenv.hostPlatform.isLinux
|
||||
then mkOpenjdkLinuxOnly path-linux args
|
||||
then mkOpenjdkLinuxOnly featureVersion
|
||||
else let
|
||||
openjdk = callPackage path-darwin {};
|
||||
in openjdk // { headless = openjdk; };
|
||||
|
||||
mkOpenjdkLinuxOnly = path-linux: args: let
|
||||
openjdk = callPackage path-linux (args);
|
||||
mkOpenjdkLinuxOnly = featureVersion: let
|
||||
openjdk = callPackage ../development/compilers/openjdk/generic.nix { inherit featureVersion; };
|
||||
in assert stdenv.hostPlatform.isLinux; openjdk // {
|
||||
headless = openjdk.override { headless = true; };
|
||||
};
|
||||
@ -29,45 +24,16 @@ in {
|
||||
corretto17 = callPackage ../development/compilers/corretto/17.nix { };
|
||||
corretto21 = callPackage ../development/compilers/corretto/21.nix { };
|
||||
|
||||
openjdk8-bootstrap = temurin-bin.jdk-8;
|
||||
openjdk8 = mkOpenjdk "8" ../development/compilers/zulu/8.nix;
|
||||
openjdk11 = mkOpenjdk "11" ../development/compilers/zulu/11.nix;
|
||||
openjdk17 = mkOpenjdk "17" ../development/compilers/zulu/17.nix;
|
||||
openjdk21 = mkOpenjdk "21" ../development/compilers/zulu/21.nix;
|
||||
openjdk23 = mkOpenjdk "23" ../development/compilers/zulu/23.nix;
|
||||
|
||||
openjdk11-bootstrap = temurin-bin.jdk-11;
|
||||
|
||||
openjdk17-bootstrap = temurin-bin.jdk-17;
|
||||
|
||||
openjdk8 = mkOpenjdk
|
||||
../development/compilers/openjdk/8.nix
|
||||
../development/compilers/zulu/8.nix
|
||||
{ };
|
||||
|
||||
openjdk11 = mkOpenjdk
|
||||
../development/compilers/openjdk/11.nix
|
||||
../development/compilers/zulu/11.nix
|
||||
{ openjfx = throw "JavaFX is not supported on OpenJDK 11"; };
|
||||
|
||||
openjdk17 = mkOpenjdk
|
||||
../development/compilers/openjdk/17.nix
|
||||
../development/compilers/zulu/17.nix
|
||||
{
|
||||
inherit openjdk17-bootstrap;
|
||||
openjfx = openjfx17;
|
||||
};
|
||||
|
||||
openjdk21 = mkOpenjdk
|
||||
../development/compilers/openjdk/21.nix
|
||||
../development/compilers/zulu/21.nix
|
||||
{
|
||||
openjdk21-bootstrap = temurin-bin.jdk-21;
|
||||
openjfx = openjfx21;
|
||||
};
|
||||
|
||||
openjdk23 = mkOpenjdk
|
||||
../development/compilers/openjdk/23.nix
|
||||
../development/compilers/zulu/23.nix
|
||||
{
|
||||
openjdk23-bootstrap = temurin-bin.jdk-23;
|
||||
openjfx = openjfx23;
|
||||
};
|
||||
# Legacy aliases
|
||||
openjdk8-bootstrap = openjdk8.jdk-bootstrap;
|
||||
openjdk11-bootstrap = openjdk11.jdk-bootstrap;
|
||||
openjdk17-bootstrap = openjdk17.jdk-bootstrap;
|
||||
|
||||
temurin-bin = recurseIntoAttrs (callPackage (
|
||||
if stdenv.hostPlatform.isLinux
|
||||
|
Loading…
Reference in New Issue
Block a user