opendjk: Make boostraps for each major version and update openjdk7

This commit is contained in:
William A. Kennington III 2015-06-07 21:01:17 -07:00
parent a8d1010027
commit a5ef488b11
4 changed files with 203 additions and 129 deletions

View File

@ -1,17 +1,34 @@
{ stdenv, runCommand, glibc, fetchurl, file }: { stdenv, runCommand, glibc, fetchurl, file
, version
}:
let let
# !!! These should be on nixos.org # !!! These should be on nixos.org
src = if glibc.system == "x86_64-linux" then src = if glibc.system == "x86_64-linux" then
fetchurl { (if version == "8" then
url = http://pub.wak.io/nixos/tarballs/openjdk-bootstrap-x86_64-linux.tar.xz; fetchurl {
sha256 = "13m3df54mnr2nb67284s2zf5n8y502ck47gc39lcafrh40hzjil5"; url = "https://www.dropbox.com/s/a0lsq2ig4uguky5/openjdk8-bootstrap-x86_64-linux.tar.xz?dl=1";
} sha256 = "18zqx6jhm3lizn9hh6ryyqc9dz3i96pwaz8f6nxfllk70qi5gvks";
}
else if version == "7" then
fetchurl {
url = "https://www.dropbox.com/s/rssfbeommrfbsjf/openjdk7-bootstrap-x86_64-linux.tar.xz?dl=1";
sha256 = "024gg2sgg4labxbc1nhn8lxls2p7d9h3b82hnsahwaja2pm1hbra";
}
else throw "No bootstrap for version")
else if glibc.system == "i686-linux" then else if glibc.system == "i686-linux" then
fetchurl { (if version == "8" then
url = http://pub.wak.io/nixos/tarballs/openjdk-bootstrap-i686-linux.tar.xz; fetchurl {
sha256 = "18kzv4h9skxg5g5c7ar2ji3qny880h5svcn207b4d6xv4sa0a6ks"; url = "https://www.dropbox.com/s/rneqjhlerijsw74/openjdk8-bootstrap-i686-linux.tar.xz?dl=1";
} sha256 = "1yx04xh8bqz7amg12d13rw5vwa008rav59mxjw1b9s6ynkvfgqq9";
}
else if version == "7" then
fetchurl {
url = "https://www.dropbox.com/s/6xe64td7eg2wurs/openjdk7-bootstrap-i686-linux.tar.xz?dl=1";
sha256 = "0xwqjk1zx8akziw8q9sbjc1rs8s7c0w6mw67jdmmi26cwwp8ijnx";
}
else throw "No bootstrap for version")
else throw "No bootstrap for system"; else throw "No bootstrap for system";
bootstrap = runCommand "openjdk-bootstrap" { bootstrap = runCommand "openjdk-bootstrap" {
@ -20,9 +37,16 @@ let
tar xvf ${src} tar xvf ${src}
mv openjdk-bootstrap $out mv openjdk-bootstrap $out
LIBDIRS="$(find $out -name \*.so\* -exec dirname {} \; | sort | uniq | tr '\n' ':')"
for i in $out/bin/*; do for i in $out/bin/*; do
patchelf --set-interpreter ${glibc}/lib/ld-linux*.so.2 $i || true patchelf --set-interpreter ${glibc}/lib/ld-linux*.so.2 $i || true
patchelf --set-rpath ${glibc}/lib:$out/lib $i || true patchelf --set-rpath "${glibc}/lib:$LIBDIRS" $i || true
done
find $out -name \*.so\* | while read lib; do
patchelf --set-interpreter ${glibc}/lib/ld-linux*.so.2 $lib || true
patchelf --set-rpath "${glibc}/lib:${stdenv.cc.cc}/lib:$LIBDIRS" $lib || true
done done
# Temporarily, while NixOS's OpenJDK bootstrap tarball doesn't have PaX markings: # Temporarily, while NixOS's OpenJDK bootstrap tarball doesn't have PaX markings:

View File

@ -1,6 +1,8 @@
{ stdenv, fetchurl, unzip, zip, procps, coreutils, alsaLib, ant, freetype { stdenv, fetchurl, unzip, zip, procps, coreutils, alsaLib, ant, freetype
, which, bootjdk, nettools, xorg, file , which, bootjdk, nettools, xorg, file
, fontconfig, cpio, cacert, perl, setJavaClassPath }: , fontconfig, cpio, cacert, perl, setJavaClassPath
, minimal ? false
}:
let let
@ -27,13 +29,41 @@ let
md5 = "de3006e5cf1ee78a9c6145ce62c4e982"; md5 = "de3006e5cf1ee78a9c6145ce62c4e982";
}; };
baseurl = "http://hg.openjdk.java.net/jdk7u/jdk7u";
repover = "jdk7u${update}-b${build}";
jdk7 = fetchurl {
url = "${baseurl}/archive/${repover}.tar.gz";
sha256 = "1r8xnn87nmqaq2f8i3cp3i9ngq66k0c0wgkdq5cf59lkgs8wkcdi";
};
langtools = fetchurl {
url = "${baseurl}/langtools/archive/${repover}.tar.gz";
sha256 = "01alj6pfrjqyf4irll9wg34h4w9nmb3973lvbacs528qm1nxgh9r";
};
hotspot = fetchurl {
url = "${baseurl}/hotspot/archive/${repover}.tar.gz";
sha256 = "14zla8axmg5344zf45i4cj7yyli0kmdjsh9yalmzqaphpkqjqpf2";
};
corba = fetchurl {
url = "${baseurl}/corba/archive/${repover}.tar.gz";
sha256 = "19z3ay3f2q7r2ra03c6wy8b5rbdbrkq5g2dzhrqcg0n4iydd3c40";
};
jdk = fetchurl {
url = "${baseurl}/jdk/archive/${repover}.tar.gz";
sha256 = "1q0r2l9bz2cyx4fq79x6cb2f5xycw83hl5cn1d1mazgsckp590lb";
};
jaxws = fetchurl {
url = "${baseurl}/jaxws/archive/${repover}.tar.gz";
sha256 = "1lp0mww2x3b6xavb7idrzckh6iw8jd6s1fvqgfvzs853z4ifksqj";
};
jaxp = fetchurl {
url = "${baseurl}/jaxp/archive/${repover}.tar.gz";
sha256 = "0pd874dkgxkb7frxg4n9py61kkhhck4x33dcynynwb3vl6k6iy79";
};
openjdk = stdenv.mkDerivation rec { openjdk = stdenv.mkDerivation rec {
name = "openjdk-7u${update}b${build}"; name = "openjdk-7u${update}b${build}";
src = fetchurl { srcs = [ jdk7 langtools hotspot corba jdk jaxws jaxp ];
url = "http://tarballs.nixos.org/openjdk-7u${update}-b${build}.tar.xz"; sourceRoot = ".";
sha256 = "0lyp75sl5w4b9azphb2nq5cwzli85inpksq4943q4j349rkmdprx";
};
outputs = [ "out" "jre" ]; outputs = [ "out" "jre" ];
@ -41,18 +71,23 @@ let
[ unzip procps ant which zip cpio nettools alsaLib [ unzip procps ant which zip cpio nettools alsaLib
xorg.libX11 xorg.libXt xorg.libXext xorg.libXrender xorg.libXtst xorg.libX11 xorg.libXt xorg.libXext xorg.libXrender xorg.libXtst
xorg.libXi xorg.libXinerama xorg.libXcursor xorg.lndir xorg.libXi xorg.libXinerama xorg.libXcursor xorg.lndir
fontconfig perl file fontconfig perl file bootjdk
]; ];
NIX_LDFLAGS = "-lfontconfig -lXcursor -lXinerama"; NIX_LDFLAGS = if minimal then null else "-lfontconfig -lXcursor -lXinerama";
postUnpack = '' postUnpack = ''
ls | grep jdk | grep -v '^jdk7u' | awk -F- '{print $1}' | while read p; do
mv $p-* $(ls | grep '^jdk7u')/$p
done
cd jdk7u-*
sed -i -e "s@/usr/bin/test@${coreutils}/bin/test@" \ sed -i -e "s@/usr/bin/test@${coreutils}/bin/test@" \
-e "s@/bin/ls@${coreutils}/bin/ls@" \ -e "s@/bin/ls@${coreutils}/bin/ls@" \
openjdk*/hotspot/make/linux/makefiles/sa.make hotspot/make/linux/makefiles/sa.make
sed -i "s@/bin/echo -e@${coreutils}/bin/echo -e@" \ sed -i "s@/bin/echo -e@${coreutils}/bin/echo -e@" \
openjdk*/{jdk,corba}/make/common/shared/Defs-utils.gmk {jdk,corba}/make/common/shared/Defs-utils.gmk
tar xf ${cupsSrc} tar xf ${cupsSrc}
cupsDir=$(echo $(pwd)/cups-*) cupsDir=$(echo $(pwd)/cups-*)
@ -75,7 +110,7 @@ let
"ALSA_INCLUDE=${alsaLib}/include/alsa/version.h" "ALSA_INCLUDE=${alsaLib}/include/alsa/version.h"
"FREETYPE_HEADERS_PATH=${freetype}/include" "FREETYPE_HEADERS_PATH=${freetype}/include"
"FREETYPE_LIB_PATH=${freetype}/lib" "FREETYPE_LIB_PATH=${freetype}/lib"
"MILESTONE=u${update}" "MILESTONE=${update}"
"BUILD_NUMBER=b${build}" "BUILD_NUMBER=b${build}"
"USRBIN_PATH=" "USRBIN_PATH="
"COMPILER_PATH=" "COMPILER_PATH="
@ -85,7 +120,7 @@ let
"STATIC_CXX=false" "STATIC_CXX=false"
"UNLIMITED_CRYPTO=1" "UNLIMITED_CRYPTO=1"
"FULL_DEBUG_SYMBOLS=0" "FULL_DEBUG_SYMBOLS=0"
]; ] ++ stdenv.lib.optional minimal "BUILD_HEADLESS=1";
configurePhase = "true"; configurePhase = "true";

View File

@ -1,4 +1,5 @@
{ stdenv, fetchurl, cpio, file, which, unzip, zip, xorg, cups, freetype, alsaLib, bootjdk, cacert, perl, liberation_ttf, fontconfig { stdenv, fetchurl, cpio, file, which, unzip, zip, xorg, cups, freetype
, alsaLib, bootjdk, cacert, perl, liberation_ttf, fontconfig, zlib
, minimal ? false } : , minimal ? false } :
let let
@ -40,118 +41,123 @@ let
sha256 = "1llf3l4483kd8m1a77n7y9fgvm6fa63nim3qhp5z4gnw68ldbhra"; sha256 = "1llf3l4483kd8m1a77n7y9fgvm6fa63nim3qhp5z4gnw68ldbhra";
}; };
openjdk8 = stdenv.mkDerivation { openjdk8 = stdenv.mkDerivation {
name = "openjdk-8u${update}b${build}"; name = "openjdk-8u${update}b${build}";
srcs = [ jdk8 langtools hotspot corba jdk jaxws jaxp nashorn ];
outputs = [ "out" "jre" ];
buildInputs = [ cpio file which unzip zip
xorg.libX11 xorg.libXt xorg.libXext xorg.libXrender xorg.libXtst
xorg.libXi xorg.libXinerama xorg.libXcursor xorg.lndir
cups freetype alsaLib perl liberation_ttf fontconfig bootjdk ];
setSourceRoot = ''
sourceRoot="jdk8u${update}-jdk8u${update}-b${build}";
'';
prePatch = ''
# despite --with-override-jdk the build still searchs here
# GNU Patch bug, --follow-symlinks only follow the last dir part symlink
mv "../jdk-${repover}" "jdk";
mv "../hotspot-${repover}" "hotspot";
'';
postPatch = ''
mv jdk "../jdk-${repover}";
mv hotspot "../hotspot-${repover}";
# Patching is over, lets re-add the links
ln -s "../jdk-${repover}" "jdk"
ln -s "../hotspot-${repover}" "hotspot"
'';
patches = [
./fix-java-home-jdk8.patch
./read-truststore-from-env-jdk8.patch
./currency-date-range-jdk8.patch
./JDK-8074312-hotspot.patch
];
preConfigure = ''
chmod +x configure
substituteInPlace configure --replace /bin/bash "$shell"
substituteInPlace ../hotspot-${repover}/make/linux/adlc_updater --replace /bin/sh "$shell"
'';
configureFlags = [
"--with-freetype=${freetype}"
"--with-override-langtools=../langtools-${repover}"
"--with-override-hotspot=../hotspot-${repover}"
"--with-override-corba=../corba-${repover}"
"--with-override-jdk=../jdk-${repover}"
"--with-override-jaxws=../jaxws-${repover}"
"--with-override-jaxp=../jaxp-${repover}"
"--with-override-nashorn=../nashorn-${repover}"
"--with-boot-jdk=${bootjdk.home}"
"--with-update-version=${update}"
"--with-build-number=${build}"
"--with-milestone=fcs"
"--disable-debug-symbols"
] ++ stdenv.lib.optional minimal "--disable-headful";
NIX_LDFLAGS= if minimal then null else "-lfontconfig";
buildFlags = "all";
installPhase = ''
mkdir -p $out/lib/openjdk $out/share $jre/lib/openjdk
cp -av build"/"*/images/j2sdk-image"/"* $out/lib/openjdk srcs = [ jdk8 langtools hotspot corba jdk jaxws jaxp nashorn ];
sourceRoot = ".";
# Move some stuff to top-level. outputs = [ "out" "jre" ];
mv $out/lib/openjdk/include $out/include
mv $out/lib/openjdk/man $out/share/man
# jni.h expects jni_md.h to be in the header search path. buildInputs = [
ln -s $out/include/linux"/"*_md.h $out/include/ cpio file which unzip zip
xorg.libX11 xorg.libXt xorg.libXext xorg.libXrender xorg.libXtst
xorg.libXi xorg.libXinerama xorg.libXcursor xorg.lndir
cups freetype alsaLib perl liberation_ttf fontconfig bootjdk zlib
];
# Remove some broken manpages. prePatch = ''
rm -rf $out/share/man/ja* ls | grep jdk | grep -v '^jdk8u' | awk -F- '{print $1}' | while read p; do
mv $p-* $(ls | grep '^jdk8u')/$p
done
cd $(ls | grep '^jdk8u')
'';
# Remove crap from the installation. patches = [
rm -rf $out/lib/openjdk/demo $out/lib/openjdk/sample ./fix-java-home-jdk8.patch
./read-truststore-from-env-jdk8.patch
./currency-date-range-jdk8.patch
./JDK-8074312-hotspot.patch
];
# Move the JRE to a separate output and setup fallback fonts preConfigure = ''
mv $out/lib/openjdk/jre $jre/lib/openjdk/ chmod +x configure
mkdir $out/lib/openjdk/jre substituteInPlace configure --replace /bin/bash "$shell"
mkdir -p $jre/lib/openjdk/jre/lib/fonts/fallback substituteInPlace hotspot/make/linux/adlc_updater --replace /bin/sh "$shell"
lndir ${liberation_ttf}/share/fonts/truetype $jre/lib/openjdk/jre/lib/fonts/fallback '';
lndir $jre/lib/openjdk/jre $out/lib/openjdk/jre
rm -rf $out/lib/openjdk/jre/bina configureFlags = [
ln -s $out/lib/openjdk/bin $out/lib/openjdk/jre/bin "--with-freetype=${freetype}"
"--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"
] ++ (if minimal then [
"--disable-headful"
"--with-zlib=bundled"
"--with-giflib=bundled"
] else [
"--with-zlib=system"
]);
# Set PaX markings NIX_LDFLAGS= if minimal then null else "-lfontconfig";
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. buildFlags = "all";
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. installPhase = ''
pushd $jre/lib/openjdk/jre/lib/security mkdir -p $out/lib/openjdk $out/share $jre/lib/openjdk
rm cacerts
perl ${./generate-cacerts.pl} $jre/lib/openjdk/jre/bin/keytool ${cacert}/etc/ssl/certs/ca-bundle.crt
popd
ln -s $out/lib/openjdk/bin $out/bin cp -av build"/"*/images/j2sdk-image"/"* $out/lib/openjdk
ln -s $jre/lib/openjdk/jre/bin $jre/bin
'';
meta = with stdenv.lib; { # Move some stuff to top-level.
homepage = http://openjdk.java.net/; mv $out/lib/openjdk/include $out/include
license = licenses.gpl2; mv $out/lib/openjdk/man $out/share/man
description = "The open-source Java Development Kit";
maintainers = with maintainers; [ edwtjo ]; # jni.h expects jni_md.h to be in the header search path.
platforms = platforms.linux; ln -s $out/include/linux"/"*_md.h $out/include/
# Remove some broken manpages.
rm -rf $out/share/man/ja*
# Remove crap from the installation.
rm -rf $out/lib/openjdk/demo $out/lib/openjdk/sample
# Move the JRE to a separate output and setup fallback fonts
mv $out/lib/openjdk/jre $jre/lib/openjdk/
mkdir $out/lib/openjdk/jre
mkdir -p $jre/lib/openjdk/jre/lib/fonts/fallback
lndir ${liberation_ttf}/share/fonts/truetype $jre/lib/openjdk/jre/lib/fonts/fallback
lndir $jre/lib/openjdk/jre $out/lib/openjdk/jre
rm -rf $out/lib/openjdk/jre/bina
ln -s $out/lib/openjdk/bin $out/lib/openjdk/jre/bin
# 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.
pushd $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
popd
ln -s $out/lib/openjdk/bin $out/bin
ln -s $jre/lib/openjdk/jre/bin $jre/bin
'';
meta = with stdenv.lib; {
homepage = http://openjdk.java.net/;
license = licenses.gpl2;
description = "The open-source Java Development Kit";
maintainers = with maintainers; [ edwtjo ];
platforms = platforms.linux;
};
passthru.home = "${openjdk8}/lib/openjdk";
}; };
in openjdk8
passthru.home = "${openjdk8}/lib/openjdk";
}; in openjdk8

View File

@ -3923,29 +3923,38 @@ let
path64 = callPackage ../development/compilers/path64 { }; path64 = callPackage ../development/compilers/path64 { };
openjdk-bootstrap = callPackage ../development/compilers/openjdk/bootstrap.nix { }; openjdk7-bootstrap = callPackage ../development/compilers/openjdk/bootstrap.nix { version = "7"; };
openjdk8-bootstrap = callPackage ../development/compilers/openjdk/bootstrap.nix { version = "8"; };
openjdk-make-bootstrap = callPackage ../development/compilers/openjdk/make-bootstrap.nix { openjdk7-make-bootstrap = callPackage ../development/compilers/openjdk/make-bootstrap.nix {
openjdk = openjdk.override { minimal = true; }; openjdk = openjdk7.override { minimal = true; };
};
openjdk8-make-bootstrap = callPackage ../development/compilers/openjdk/make-bootstrap.nix {
openjdk = openjdk8.override { minimal = true; };
}; };
openjdk-darwin = callPackage ../development/compilers/openjdk-darwin { }; openjdk-darwin = callPackage ../development/compilers/openjdk-darwin { };
openjdk7 = callPackage ../development/compilers/openjdk { openjdk7 = callPackage ../development/compilers/openjdk {
bootjdk = openjdk-bootstrap; bootjdk = openjdk7-bootstrap;
}; };
openjdk7_jre = openjdk7.jre;
openjdk8 = callPackage ../development/compilers/openjdk/openjdk8.nix { openjdk8 = callPackage ../development/compilers/openjdk/openjdk8.nix {
bootjdk = openjdk-bootstrap; bootjdk = openjdk8-bootstrap;
}; };
openjdk8_jre = openjdk8.jre;
openjdk = if stdenv.isDarwin then openjdk-darwin else openjdk8; openjdk = if stdenv.isDarwin then openjdk-darwin else openjdk8;
jdk7 = openjdk7; jdk7 = openjdk7;
jre7 = jdk7.jre;
jdk8 = openjdk8; jdk8 = openjdk8;
jre8 = jdk8.jre;
jdk = if stdenv.isDarwin then openjdk-darwin else jdk8; jdk = if stdenv.isDarwin then openjdk-darwin else jdk8;
jre = jdk.jre;
oraclejdk = pkgs.jdkdistro true false; oraclejdk = pkgs.jdkdistro true false;