Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d1982e8
commit f00db92
Showing
6 changed files
with
299 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,222 @@ | ||
{ stdenv, lib, fetchurl, bash, cpio, pkgconfig, file, which, unzip, zip, cups, freetype | ||
, alsaLib, bootjdk, cacert, perl, liberation_ttf, fontconfig, zlib, lndir | ||
, libX11, libICE, libXrender, libXext, libXt, libXtst, libXi, libXinerama, libXcursor | ||
, libjpeg, giflib | ||
, setJavaClassPath | ||
, minimal ? false | ||
#, enableInfinality ? true # font rendering patch | ||
, enableGnome2 ? true, gtk2, gnome_vfs, glib, GConf | ||
}: | ||
|
||
let | ||
|
||
/** | ||
* The JRE libraries are in directories that depend on the CPU. | ||
*/ | ||
architecture = | ||
if stdenv.system == "i686-linux" then | ||
"i386" | ||
else "amd64"; | ||
|
||
update = "10"; | ||
build = "46"; | ||
baseurl = "http://hg.openjdk.java.net/jdk/jdk10"; | ||
repover = "jdk-${update}+${build}"; | ||
paxflags = if stdenv.isi686 then "msp" else "m"; | ||
jdk10 = fetchurl { | ||
url = "${baseurl}/archive/${repover}.tar.gz"; | ||
sha256 = "1n5jccf2rw15hzwppnvy87bysb84g3fcnkxbjhj8gi0iv79dxlc7"; | ||
}; | ||
openjdk10 = stdenv.mkDerivation { | ||
name = "openjdk-${update}-b${build}"; | ||
|
||
srcs = [ jdk10 ]; | ||
sourceRoot = "."; | ||
|
||
outputs = [ "out" "jre" ]; | ||
|
||
nativeBuildInputs = [ pkgconfig ]; | ||
buildInputs = [ | ||
cpio file which unzip zip perl bootjdk zlib cups freetype alsaLib | ||
libjpeg giflib libX11 libICE libXext libXrender libXtst libXt libXtst | ||
libXi libXinerama libXcursor lndir fontconfig | ||
] ++ lib.optionals (!minimal && enableGnome2) [ | ||
gtk2 gnome_vfs GConf glib | ||
]; | ||
|
||
prePatch = '' | ||
cd jdk10* | ||
''; | ||
|
||
patches = [ | ||
./fix-java-home-jdk10.patch | ||
./read-truststore-from-env-jdk10.patch | ||
./currency-date-range-jdk10.patch | ||
] ++ lib.optionals (!minimal && enableGnome2) [ | ||
./swing-use-gtk-jdk10.patch | ||
]; | ||
|
||
preConfigure = '' | ||
chmod +x configure | ||
substituteInPlace configure --replace /bin/bash "${bash}/bin/bash" | ||
configureFlagsArray=( | ||
"--with-boot-jdk=${bootjdk.home}" | ||
"--with-update-version=${update}" | ||
"--with-build-number=${build}" | ||
"--with-milestone=fcs" | ||
"--enable-unlimited-crypto" | ||
"--disable-debug-symbols" | ||
"--disable-freetype-bundling" | ||
"--with-zlib=system" | ||
"--with-giflib=system" | ||
"--with-stdc++lib=dynamic" | ||
# glibc 2.24 deprecated readdir_r so we need this | ||
# See https://www.mail-archive.com/openembedded-devel@lists.openembedded.org/msg49006.html | ||
"--with-extra-cflags=-Wno-error=deprecated-declarations -Wno-error=format-contains-nul -Wno-error=unused-result" | ||
'' | ||
+ lib.optionalString minimal "\"--enable-headless-only\"" | ||
+ ");" | ||
# https://bugzilla.redhat.com/show_bug.cgi?id=1306558 | ||
# https://github.com/JetBrains/jdk8u/commit/eaa5e0711a43d64874111254d74893fa299d5716 | ||
+ stdenv.lib.optionalString stdenv.cc.isGNU '' | ||
NIX_CFLAGS_COMPILE+=" -fno-lifetime-dse -fno-delete-null-pointer-checks -std=gnu++98 -Wno-error" | ||
''; | ||
|
||
NIX_LDFLAGS= lib.optionals (!minimal) [ | ||
"-lfontconfig" "-lcups" "-lXinerama" "-lXrandr" "-lmagic" | ||
] ++ lib.optionals (!minimal && enableGnome2) [ | ||
"-lgtk-x11-2.0" "-lgio-2.0" "-lgnomevfs-2" "-lgconf-2" | ||
]; | ||
|
||
buildFlags = [ "all" ]; | ||
|
||
installPhase = '' | ||
mkdir -p $out/lib/openjdk $out/share $jre/lib/openjdk | ||
cp -av build/*/images/jdk/* $out/lib/openjdk | ||
# Remove some broken manpages. | ||
rm -rf $out/lib/openjdk/man/ja* | ||
# Mirror some stuff in top-level. | ||
mkdir $out/include $out/share/man | ||
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/ | ||
# Copy the JRE to a separate output and setup fallback fonts | ||
cp -av build/*/images/jre $jre/lib/openjdk/ | ||
mkdir $out/lib/openjdk/jre | ||
${lib.optionalString (!minimal) '' | ||
mkdir -p $jre/lib/openjdk/jre/lib/fonts/fallback | ||
lndir ${liberation_ttf}/share/fonts/truetype $jre/lib/openjdk/jre/lib/fonts/fallback | ||
''} | ||
# Remove crap from the installation. | ||
rm -rf $out/lib/openjdk/demo | ||
${lib.optionalString minimal '' | ||
for d in $out/lib/openjdk/lib $jre/lib/openjdk/jre/lib; do | ||
rm ''${d}/{libjsound,libjsoundalsa,libawt*,libfontmanager}.so | ||
done | ||
''} | ||
lndir $jre/lib/openjdk/jre $out/lib/openjdk/jre | ||
# Make sure cmm/*.pf are not symlinks: | ||
# https://youtrack.jetbrains.com/issue/IDEA-147272 | ||
# in 9, it seems no *.pf files end up in $out ... ? | ||
# rm -rf $out/lib/openjdk/jre/lib/cmm | ||
# ln -s {$jre,$out}/lib/openjdk/jre/lib/cmm | ||
# Set PaX markings | ||
exes=$(file $out/lib/openjdk/bin/* $jre/lib/openjdk/jre/bin/* 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//') | ||
echo "to mark: *$exes*" | ||
for file in $exes; do | ||
echo "marking *$file*" | ||
paxmark ${paxflags} "$file" | ||
done | ||
# 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 | ||
''; | ||
|
||
# FIXME: this is unnecessary once the multiple-outputs branch is merged. | ||
preFixup = '' | ||
prefix=$jre stripDirs "$stripDebugList" "''${stripDebugFlags:--S}" | ||
patchELF $jre | ||
propagatedBuildInputs+=" $jre" | ||
# 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 | ||
#TODO or printWords? cf https://github.com/NixOS/nixpkgs/pull/27427#issuecomment-317293040 | ||
echo -n "${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 $outputs; do | ||
LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort | uniq | tr '\n' ':'):$LIBDIRS" | ||
done | ||
# Add the local library paths to remove dependencies on the bootstrap | ||
for output in $outputs; do | ||
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 | ||
# Test to make sure that we don't depend on the bootstrap | ||
for output in $outputs; do | ||
if grep -q -r '${bootjdk}' $(eval echo \$$output); then | ||
echo "Extraneous references to ${bootjdk} detected" | ||
exit 1 | ||
fi | ||
done | ||
''; | ||
|
||
meta = with stdenv.lib; { | ||
homepage = http://openjdk.java.net/; | ||
license = licenses.gpl2; | ||
description = "The open-source Java Development Kit"; | ||
maintainers = with maintainers; [ edwtjo ]; | ||
platforms = ["i686-linux" "x86_64-linux"]; | ||
}; | ||
|
||
passthru = { | ||
inherit architecture; | ||
home = "${openjdk10}/lib/openjdk"; | ||
}; | ||
}; | ||
in openjdk10 |
13 changes: 13 additions & 0 deletions
13
pkgs/development/compilers/openjdk/currency-date-range-jdk10.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
--- ./make/jdk/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java | ||
+++ ./make/jdk/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java | ||
@@ -281,8 +281,8 @@ | ||
checkCurrencyCode(newCurrency); | ||
String timeString = currencyInfo.substring(4, length - 4); | ||
long time = format.parse(timeString).getTime(); | ||
- if (Math.abs(time - System.currentTimeMillis()) > ((long) 10) * 365 * 24 * 60 * 60 * 1000) { | ||
- throw new RuntimeException("time is more than 10 years from present: " + time); | ||
+ if (Math.abs(time - System.currentTimeMillis()) > ((long) 20) * 365 * 24 * 60 * 60 * 1000) { | ||
+ throw new RuntimeException("time is more than 20 years from present: " + time); | ||
} | ||
specialCaseCutOverTimes[specialCaseCount] = time; | ||
specialCaseOldCurrencies[specialCaseCount] = oldCurrency; |
14 changes: 14 additions & 0 deletions
14
pkgs/development/compilers/openjdk/fix-java-home-jdk10.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
--- a/src/hotspot/os/linux/os_linux.cpp 2017-07-04 23:09:02.533972226 -0400 | ||
+++ b/src/hotspot/os/linux/os_linux.cpp 2017-07-04 23:07:52.118338845 -0400 | ||
@@ -2270,8 +2270,5 @@ | ||
assert(ret, "cannot locate libjvm"); | ||
char *rp = NULL; | ||
if (ret && dli_fname[0] != '\0') { | ||
- rp = os::Posix::realpath(dli_fname, buf, buflen); | ||
- } | ||
- if (rp == NULL) { | ||
- return; | ||
+ snprintf(buf, buflen, "%s", dli_fname); | ||
} | ||
|
||
if (Arguments::sun_java_launcher_is_altjvm()) { |
20 changes: 20 additions & 0 deletions
20
pkgs/development/compilers/openjdk/read-truststore-from-env-jdk10.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- a/src/java.base/share/classes/sun/security/ssl/TrustStoreManager.java 2017-06-26 21:48:25.000000000 -0400 | ||
+++ b/src/java.base/share/classes/sun/security/ssl/TrustStoreManager.java 2017-07-05 20:45:57.491295030 -0400 | ||
@@ -71,6 +71,7 @@ | ||
* | ||
* The preference of the default trusted KeyStore is: | ||
* javax.net.ssl.trustStore | ||
+ * system environment variable JAVAX_NET_SSL_TRUSTSTORE | ||
* jssecacerts | ||
* cacerts | ||
*/ | ||
@@ -144,6 +145,9 @@ | ||
String temporaryName = ""; | ||
File temporaryFile = null; | ||
long temporaryTime = 0L; | ||
+ if (storePropName == null){ | ||
+ storePropName = System.getenv("JAVAX_NET_SSL_TRUSTSTORE"); | ||
+ } | ||
if (!"NONE".equals(storePropName)) { | ||
String[] fileNames = | ||
new String[] {storePropName, defaultStore}; |
24 changes: 24 additions & 0 deletions
24
pkgs/development/compilers/openjdk/swing-use-gtk-jdk10.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
--- a/src/java.desktop/share/classes/javax/swing/UIManager.java | ||
+++ b/src/java.desktop/share/classes/javax/swing/UIManager.java | ||
@@ -607,11 +607,9 @@ | ||
if (osType == OSInfo.OSType.WINDOWS) { | ||
return "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; | ||
} else { | ||
- String desktop = AccessController.doPrivileged(new GetPropertyAction("sun.desktop")); | ||
Toolkit toolkit = Toolkit.getDefaultToolkit(); | ||
- if ("gnome".equals(desktop) && | ||
- toolkit instanceof SunToolkit && | ||
- ((SunToolkit) toolkit).isNativeGTKAvailable()) { | ||
+ if (toolkit instanceof SunToolkit && | ||
+ ((SunToolkit) toolkit).isNativeGTKAvailable()) { | ||
// May be set on Linux and Solaris boxs. | ||
return "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; | ||
} | ||
@@ -1341,7 +1339,7 @@ | ||
lafName = (String) lafData.remove("defaultlaf"); | ||
} | ||
if (lafName == null) { | ||
- lafName = getCrossPlatformLookAndFeelClassName(); | ||
+ lafName = getSystemLookAndFeelClassName(); | ||
} | ||
lafName = swingProps.getProperty(defaultLAFKey, lafName); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters