Merge commit staging+systemd into closure-size
Many non-conflict problems weren't (fully) resolved in this commit yet.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
{ stdenv, fetchurl, unzip, zip, procps, coreutils, alsaLib, ant, freetype
|
||||
, which, jdk, nettools, xorg, file
|
||||
, fontconfig, cpio, cacert, perl, setJavaClassPath }:
|
||||
, which, bootjdk, nettools, xorg, file
|
||||
, fontconfig, cpio, cacert, perl, setJavaClassPath
|
||||
, minimal ? false
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
@@ -15,7 +17,7 @@ let
|
||||
else
|
||||
throw "openjdk requires i686-linux or x86_64 linux";
|
||||
|
||||
update = "65";
|
||||
update = "80";
|
||||
|
||||
build = "32";
|
||||
|
||||
@@ -27,13 +29,41 @@ let
|
||||
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 {
|
||||
name = "openjdk-7u${update}b${build}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://tarballs.nixos.org/openjdk-7u${update}-b${build}.tar.xz";
|
||||
sha256 = "0lyp75sl5w4b9azphb2nq5cwzli85inpksq4943q4j349rkmdprx";
|
||||
};
|
||||
srcs = [ jdk7 langtools hotspot corba jdk jaxws jaxp ];
|
||||
sourceRoot = ".";
|
||||
|
||||
outputs = [ "out" "jre" ];
|
||||
|
||||
@@ -41,18 +71,23 @@ let
|
||||
[ unzip procps ant which zip cpio nettools alsaLib
|
||||
xorg.libX11 xorg.libXt xorg.libXext xorg.libXrender xorg.libXtst
|
||||
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 = ''
|
||||
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@" \
|
||||
-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@" \
|
||||
openjdk*/{jdk,corba}/make/common/shared/Defs-utils.gmk
|
||||
{jdk,corba}/make/common/shared/Defs-utils.gmk
|
||||
|
||||
tar xf ${cupsSrc}
|
||||
cupsDir=$(echo $(pwd)/cups-*)
|
||||
@@ -75,17 +110,17 @@ let
|
||||
"ALSA_INCLUDE=${alsaLib}/include/alsa/version.h"
|
||||
"FREETYPE_HEADERS_PATH=${freetype}/include"
|
||||
"FREETYPE_LIB_PATH=${freetype}/lib"
|
||||
"MILESTONE=u${update}"
|
||||
"MILESTONE=${update}"
|
||||
"BUILD_NUMBER=b${build}"
|
||||
"USRBIN_PATH="
|
||||
"COMPILER_PATH="
|
||||
"DEVTOOLS_PATH="
|
||||
"UNIXCOMMAND_PATH="
|
||||
"BOOTDIR=${jdk}"
|
||||
"BOOTDIR=${bootjdk.home}"
|
||||
"STATIC_CXX=false"
|
||||
"UNLIMITED_CRYPTO=1"
|
||||
"FULL_DEBUG_SYMBOLS=0"
|
||||
];
|
||||
] ++ stdenv.lib.optional minimal "BUILD_HEADLESS=1";
|
||||
|
||||
configurePhase = "true";
|
||||
|
||||
@@ -142,7 +177,7 @@ let
|
||||
# Generate certificates.
|
||||
pushd $jre/lib/openjdk/jre/lib/security
|
||||
rm cacerts
|
||||
perl ${./generate-cacerts.pl} $jre/lib/openjdk/jre/bin/keytool ${cacert}/etc/ca-bundle.crt
|
||||
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
|
||||
@@ -168,11 +203,37 @@ let
|
||||
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 = {
|
||||
homepage = http://openjdk.java.net/;
|
||||
license = stdenv.lib.licenses.gpl2;
|
||||
description = "The open-source Java Development Kit";
|
||||
maintainers = [ stdenv.lib.maintainers.eelco stdenv.lib.maintainers.shlevy ];
|
||||
maintainers = [ stdenv.lib.maintainers.eelco ];
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
};
|
||||
|
||||
224
pkgs/development/compilers/openjdk/8.nix
Normal file
224
pkgs/development/compilers/openjdk/8.nix
Normal file
@@ -0,0 +1,224 @@
|
||||
{ stdenv, fetchurl, cpio, file, which, unzip, zip, xorg, cups, freetype
|
||||
, alsaLib, bootjdk, cacert, perl, liberation_ttf, fontconfig, zlib
|
||||
, setJavaClassPath
|
||||
, minimal ? false
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
/**
|
||||
* The JRE libraries are in directories that depend on the CPU.
|
||||
*/
|
||||
architecture =
|
||||
if stdenv.system == "i686-linux" then
|
||||
"i386"
|
||||
else if stdenv.system == "x86_64-linux" then
|
||||
"amd64"
|
||||
else
|
||||
throw "openjdk requires i686-linux or x86_64 linux";
|
||||
|
||||
update = "60";
|
||||
build = "24";
|
||||
baseurl = "http://hg.openjdk.java.net/jdk8u/jdk8u";
|
||||
repover = "jdk8u${update}-b${build}";
|
||||
paxflags = if stdenv.isi686 then "msp" else "m";
|
||||
jdk8 = fetchurl {
|
||||
url = "${baseurl}/archive/${repover}.tar.gz";
|
||||
sha256 = "1gxfyz5kdl3xgfmn6gr65hj66zh5p67y1g0hxdbps1h8gcc6iqwp";
|
||||
};
|
||||
langtools = fetchurl {
|
||||
url = "${baseurl}/langtools/archive/${repover}.tar.gz";
|
||||
sha256 = "0a8kmfcnw92hvhivmpa9g22k1lvcr64zjw7x1gjj1j6zx7r579ck";
|
||||
};
|
||||
hotspot = fetchurl {
|
||||
url = "${baseurl}/hotspot/archive/${repover}.tar.gz";
|
||||
sha256 = "0k68wqwg5fz8i2za9dg2zfx4db5zcbls31vk2abrqrwp31ik0y4y";
|
||||
};
|
||||
corba = fetchurl {
|
||||
url = "${baseurl}/corba/archive/${repover}.tar.gz";
|
||||
sha256 = "0rc8m5jrwjzrbxnzbhxjm265z23ky6v11g8sgcb6flr0l636fwvn";
|
||||
};
|
||||
jdk = fetchurl {
|
||||
url = "${baseurl}/jdk/archive/${repover}.tar.gz";
|
||||
sha256 = "11c90zz728p30zc6zas9ip67n9sd09i0v6afxs608k9s451057wr";
|
||||
};
|
||||
jaxws = fetchurl {
|
||||
url = "${baseurl}/jaxws/archive/${repover}.tar.gz";
|
||||
sha256 = "15pzczqwrr47qv51bsisjylilhljban8938n1436hsjd5k1dhhwn";
|
||||
};
|
||||
jaxp = fetchurl {
|
||||
url = "${baseurl}/jaxp/archive/${repover}.tar.gz";
|
||||
sha256 = "0gcc7pb07yl76drcynpz5gjjv3y6s1c0k4kfp9fayha5f624k1fb";
|
||||
};
|
||||
nashorn = fetchurl {
|
||||
url = "${baseurl}/nashorn/archive/${repover}.tar.gz";
|
||||
sha256 = "00g849wwqxljqpml6r7rv3pscj0ma0jaamyvxsxlfxbqvwid93ai";
|
||||
};
|
||||
openjdk8 = stdenv.mkDerivation {
|
||||
name = "openjdk-8u${update}b${build}";
|
||||
|
||||
srcs = [ jdk8 langtools hotspot corba jdk jaxws jaxp nashorn ];
|
||||
sourceRoot = ".";
|
||||
|
||||
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 zlib
|
||||
];
|
||||
|
||||
prePatch = ''
|
||||
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')
|
||||
'';
|
||||
|
||||
patches = [
|
||||
./fix-java-home-jdk8.patch
|
||||
./read-truststore-from-env-jdk8.patch
|
||||
./currency-date-range-jdk8.patch
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
chmod +x configure
|
||||
substituteInPlace configure --replace /bin/bash "$shell"
|
||||
substituteInPlace hotspot/make/linux/adlc_updater --replace /bin/sh "$shell"
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
"--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"
|
||||
]);
|
||||
|
||||
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
|
||||
|
||||
# Move some stuff to top-level.
|
||||
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.
|
||||
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
|
||||
'';
|
||||
|
||||
# FIXME: this is unnecessary once the multiple-outputs branch is merged.
|
||||
preFixup = ''
|
||||
prefix=$jre stripDirs "$stripDebugList" "''${stripDebugFlags:--S}"
|
||||
patchELF $jre
|
||||
propagatedNativeBuildInputs+=" $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
|
||||
echo -n "${setJavaClassPath}" > $jre/nix-support/propagated-native-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 = platforms.linux;
|
||||
};
|
||||
|
||||
passthru = {
|
||||
inherit architecture;
|
||||
home = "${openjdk8}/lib/openjdk";
|
||||
};
|
||||
};
|
||||
in openjdk8
|
||||
@@ -1,33 +1,60 @@
|
||||
{ stdenv, runCommand, glibc, fetchurl, file }:
|
||||
{ stdenv, runCommand, glibc, fetchurl, file
|
||||
|
||||
, version
|
||||
}:
|
||||
|
||||
let
|
||||
# !!! These should be on nixos.org
|
||||
src = if glibc.system == "x86_64-linux" then
|
||||
fetchurl {
|
||||
url = http://tarballs.nixos.org/openjdk-bootstrap-x86_64-linux-2012-08-24.tar.xz;
|
||||
sha256 = "0gla9dxrfq2w1hvgsnn8jg8a60k27im6z43a6iidi0qmwa0wah32";
|
||||
}
|
||||
(if version == "8" then
|
||||
fetchurl {
|
||||
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
|
||||
fetchurl {
|
||||
url = http://tarballs.nixos.org/openjdk-bootstrap-i686-linux-2012-08-24.tar.xz;
|
||||
sha256 = "184wq212bycwbbq4ix8cc6jwjxkrqw9b01zb86q95kqpa8zy5206";
|
||||
}
|
||||
(if version == "8" then
|
||||
fetchurl {
|
||||
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";
|
||||
in
|
||||
|
||||
runCommand "openjdk-bootstrap" {} ''
|
||||
tar xvf ${src}
|
||||
mv openjdk-bootstrap $out
|
||||
bootstrap = runCommand "openjdk-bootstrap" {
|
||||
passthru.home = "${bootstrap}/lib/openjdk";
|
||||
} ''
|
||||
tar xvf ${src}
|
||||
mv openjdk-bootstrap $out
|
||||
|
||||
for i in $out/bin/*; do
|
||||
patchelf --set-interpreter ${glibc.out}/lib/ld-linux*.so.2 $i
|
||||
done
|
||||
LIBDIRS="$(find $out -name \*.so\* -exec dirname {} \; | sort | uniq | tr '\n' ':')"
|
||||
|
||||
# Temporarily, while NixOS's OpenJDK bootstrap tarball doesn't have PaX markings:
|
||||
exes=$(${file}/bin/file $out/bin/* 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//')
|
||||
for file in $exes; do
|
||||
paxmark m "$file"
|
||||
# On x86 for heap sizes over 700MB disable SEGMEXEC and PAGEEXEC as well.
|
||||
${stdenv.lib.optionalString stdenv.isi686 ''paxmark msp "$file"''}
|
||||
done
|
||||
''
|
||||
for i in $out/bin/*; do
|
||||
patchelf --set-interpreter ${glibc.out}/lib/ld-linux*.so.2 $i || true
|
||||
patchelf --set-rpath "${glibc.out}/lib:$LIBDIRS" $i || true
|
||||
done
|
||||
|
||||
find $out -name \*.so\* | while read lib; do
|
||||
patchelf --set-interpreter ${glibc.out}/lib/ld-linux*.so.2 $lib || true
|
||||
patchelf --set-rpath "${glibc.out}/lib:${stdenv.cc.cc.lib}/lib:$LIBDIRS" $lib || true
|
||||
done
|
||||
|
||||
# Temporarily, while NixOS's OpenJDK bootstrap tarball doesn't have PaX markings:
|
||||
exes=$(${file}/bin/file $out/bin/* 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//')
|
||||
for file in $exes; do
|
||||
paxmark m "$file"
|
||||
# On x86 for heap sizes over 700MB disable SEGMEXEC and PAGEEXEC as well.
|
||||
${stdenv.lib.optionalString stdenv.isi686 ''paxmark msp "$file"''}
|
||||
done
|
||||
'';
|
||||
in bootstrap
|
||||
|
||||
15
pkgs/development/compilers/openjdk/fix-java-home-jdk8.patch
Normal file
15
pkgs/development/compilers/openjdk/fix-java-home-jdk8.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
--- a/hotspot/src/os/linux/vm/os_linux.cpp 2015-02-04 21:14:39.000000000 +0100
|
||||
+++ b/hotspot/src/os/linux/vm/os_linux.cpp 2015-05-19 16:17:29.960107613 +0200
|
||||
@@ -2304,10 +2304,8 @@
|
||||
assert(ret, "cannot locate libjvm");
|
||||
char *rp = NULL;
|
||||
if (ret && dli_fname[0] != '\0') {
|
||||
- rp = realpath(dli_fname, buf);
|
||||
+ snprintf(buf, buflen, "%s", dli_fname);
|
||||
}
|
||||
- if (rp == NULL)
|
||||
- return;
|
||||
|
||||
if (Arguments::created_by_gamma_launcher()) {
|
||||
// Support for the gamma launcher. Typical value for buf is
|
||||
|
||||
@@ -1,26 +1,31 @@
|
||||
{ runCommand, openjdk, nukeReferences }:
|
||||
|
||||
let arch = openjdk.architecture; in
|
||||
|
||||
runCommand "${openjdk.name}-bootstrap.tar.xz" {} ''
|
||||
mkdir -p openjdk-bootstrap/bin
|
||||
mkdir -p openjdk-bootstrap/lib
|
||||
mkdir -p openjdk-bootstrap/jre/lib/{security,ext,${arch}/{jli,server,client,headless}}
|
||||
cp ${openjdk}/bin/{idlj,ja{va{,c,p,h},r},rmic} openjdk-bootstrap/bin
|
||||
cp ${openjdk}/lib/tools.jar openjdk-bootstrap/lib
|
||||
cp ${openjdk}/jre/lib/{meta-index,{charsets,jce,jsse,rt,resources}.jar,currency.data} openjdk-bootstrap/jre/lib
|
||||
cp ${openjdk}/jre/lib/security/java.security openjdk-bootstrap/jre/lib/security
|
||||
cp ${openjdk}/jre/lib/ext/{meta-index,sunjce_provider.jar} openjdk-bootstrap/jre/lib/ext
|
||||
cp ${openjdk}/jre/lib/${arch}/{jvm.cfg,lib{awt,java,verify,zip,nio,net}.so} openjdk-bootstrap/jre/lib/${arch}
|
||||
cp ${openjdk}/jre/lib/${arch}/jli/libjli.so openjdk-bootstrap/jre/lib/${arch}/jli
|
||||
cp ${openjdk}/jre/lib/${arch}/server/libjvm.so openjdk-bootstrap/jre/lib/${arch}/server
|
||||
cp ${openjdk}/jre/lib/${arch}/client/libjvm.so openjdk-bootstrap/jre/lib/${arch}/client ||
|
||||
rmdir openjdk-bootstrap/jre/lib/${arch}/client
|
||||
cp ${openjdk}/jre/lib/${arch}/headless/libmawt.so openjdk-bootstrap/jre/lib/${arch}/headless
|
||||
cp -a ${openjdk}/include openjdk-bootstrap
|
||||
mkdir -pv openjdk-bootstrap/lib
|
||||
|
||||
# Do a deep copy of the openjdk
|
||||
cp -vrL ${openjdk.home} openjdk-bootstrap/lib
|
||||
|
||||
# Includes are needed for building the native jvm
|
||||
cp -vrL ${openjdk}/include openjdk-bootstrap
|
||||
|
||||
# The binaries are actually stored in the openjdk lib
|
||||
ln -sv lib/openjdk/bin openjdk-bootstrap/bin
|
||||
find . -name libjli.so
|
||||
(cd openjdk-bootstrap/lib; find . -name libjli.so -exec ln -sfv {} libjli.so \;)
|
||||
|
||||
chmod -R +w openjdk-bootstrap
|
||||
|
||||
# Remove components we don't need
|
||||
find openjdk-bootstrap -name \*.diz -exec rm {} \;
|
||||
find openjdk-bootstrap -name \*.ttf -exec rm {} \;
|
||||
find openjdk-bootstrap -name \*.gif -exec rm {} \;
|
||||
find openjdk-bootstrap -name src.zip -exec rm {} \;
|
||||
rm -rf openjdk-bootstrap/lib/openjdk/jre/bin
|
||||
|
||||
# Remove all of the references to the native nix store
|
||||
find openjdk-bootstrap -print0 | xargs -0 ${nukeReferences}/bin/nuke-refs
|
||||
|
||||
# Create the output tarball
|
||||
tar cv openjdk-bootstrap | xz > $out
|
||||
''
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
{ stdenv, fetchurl, cpio, file, which, unzip, zip, xorg, cups, freetype, alsaLib, openjdk, cacert, perl, liberation_ttf, fontconfig } :
|
||||
let
|
||||
update = "40";
|
||||
build = "25";
|
||||
baseurl = "http://hg.openjdk.java.net/jdk8u/jdk8u40";
|
||||
repover = "jdk8u${update}-b${build}";
|
||||
paxflags = if stdenv.isi686 then "msp" else "m";
|
||||
jdk8 = fetchurl {
|
||||
url = "${baseurl}/archive/${repover}.tar.gz";
|
||||
sha256 = "05s5j0rq45n8piymv9c1n0hxr4bk3j8lz6fw2wbp0m8kam6zzpza";
|
||||
};
|
||||
langtools = fetchurl {
|
||||
url = "${baseurl}/langtools/archive/${repover}.tar.gz";
|
||||
sha256 = "0p1z38szm63cf5f83697awbqwpf7b8q1ymrqc0v6r9hb5yf0p22r";
|
||||
};
|
||||
hotspot = fetchurl {
|
||||
url = "${baseurl}/hotspot/archive/${repover}.tar.gz";
|
||||
sha256 = "0sl0ima3zlbd1ai7qrg4msy5ibg64qpwdrv7z4l8cpalwby26y6p";
|
||||
};
|
||||
corba = fetchurl {
|
||||
url = "${baseurl}/corba/archive/${repover}.tar.gz";
|
||||
sha256 = "1ahvhap8av519813yf20v3hbvg82j9bq3gnqlayng1qggfivsb5s";
|
||||
};
|
||||
jdk = fetchurl {
|
||||
url = "${baseurl}/jdk/archive/${repover}.tar.gz";
|
||||
sha256 = "0n86fcy1z4z22jcgfnn9agzfi949709hn2x6s8wyhwwa055rjd1a";
|
||||
};
|
||||
jaxws = fetchurl {
|
||||
url = "${baseurl}/jaxws/archive/${repover}.tar.gz";
|
||||
sha256 = "0hp19hq0dw3j8zz4mxd6bjk9zqlyr56fhwzgjwmm56b6pwkcmsn7";
|
||||
};
|
||||
jaxp = fetchurl {
|
||||
url = "${baseurl}/jaxp/archive/${repover}.tar.gz";
|
||||
sha256 = "037za0hjiwvzvbzsckfxnrrbak1vbd52pmrnd855vxkik08jxp8c";
|
||||
};
|
||||
nashorn = fetchurl {
|
||||
url = "${baseurl}/nashorn/archive/${repover}.tar.gz";
|
||||
sha256 = "1np8hkg2fmj5s6ipd1vb8x0z6xy00kbi2ipqca9pxzib58caj6b2";
|
||||
};
|
||||
openjdk8 = stdenv.mkDerivation {
|
||||
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 openjdk perl liberation_ttf fontconfig ];
|
||||
setSourceRoot = ''
|
||||
sourceRoot="jdk8u${update}-jdk8u${update}-b${build}";
|
||||
'';
|
||||
prePatch = ''
|
||||
# despite --with-override-jdk the build still searchs here
|
||||
ln -s "../jdk-${repover}" "jdk";
|
||||
ln -s "../hotspot-${repover}" "hotspot";
|
||||
'';
|
||||
patches = [
|
||||
./fix-java-home.patch
|
||||
./read-truststore-from-env-jdk8.patch
|
||||
./currency-date-range-jdk8.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=${openjdk}/lib/openjdk/"
|
||||
"--with-update-version=${update}"
|
||||
"--with-build-number=b${build}"
|
||||
"--with-milestone=fcs"
|
||||
];
|
||||
NIX_LDFLAGS= "-lfontconfig";
|
||||
buildFlags = "DEBUG_BINARIES=true all";
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib/openjdk $out/share $jre/lib/openjdk
|
||||
|
||||
cp -av build"/"*/images/j2sdk-image"/"* $out/lib/openjdk
|
||||
|
||||
# Move some stuff to top-level.
|
||||
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.
|
||||
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/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
|
||||
Reference in New Issue
Block a user