about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilliam A. Kennington III <william@wkennington.com>2015-06-07 21:01:17 -0700
committerWilliam A. Kennington III <william@wkennington.com>2015-06-07 21:02:02 -0700
commita5ef488b11734c16151ddad5105c84fc155babf2 (patch)
tree2bb85feffff4086730bebff02289de71db82183b
parenta8d10100279636146b8d66da582e1f23d9d91742 (diff)
downloadnixlib-a5ef488b11734c16151ddad5105c84fc155babf2.tar
nixlib-a5ef488b11734c16151ddad5105c84fc155babf2.tar.gz
nixlib-a5ef488b11734c16151ddad5105c84fc155babf2.tar.bz2
nixlib-a5ef488b11734c16151ddad5105c84fc155babf2.tar.lz
nixlib-a5ef488b11734c16151ddad5105c84fc155babf2.tar.xz
nixlib-a5ef488b11734c16151ddad5105c84fc155babf2.tar.zst
nixlib-a5ef488b11734c16151ddad5105c84fc155babf2.zip
opendjk: Make boostraps for each major version and update openjdk7
-rw-r--r--pkgs/development/compilers/openjdk/bootstrap.nix44
-rw-r--r--pkgs/development/compilers/openjdk/default.nix57
-rw-r--r--pkgs/development/compilers/openjdk/openjdk8.nix236
-rw-r--r--pkgs/top-level/all-packages.nix19
4 files changed, 215 insertions, 141 deletions
diff --git a/pkgs/development/compilers/openjdk/bootstrap.nix b/pkgs/development/compilers/openjdk/bootstrap.nix
index bc63292a145a..a9ca7673dfe9 100644
--- a/pkgs/development/compilers/openjdk/bootstrap.nix
+++ b/pkgs/development/compilers/openjdk/bootstrap.nix
@@ -1,17 +1,34 @@
-{ 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://pub.wak.io/nixos/tarballs/openjdk-bootstrap-x86_64-linux.tar.xz;
-      sha256 = "13m3df54mnr2nb67284s2zf5n8y502ck47gc39lcafrh40hzjil5";
-    }
+    (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://pub.wak.io/nixos/tarballs/openjdk-bootstrap-i686-linux.tar.xz;
-      sha256 = "18kzv4h9skxg5g5c7ar2ji3qny880h5svcn207b4d6xv4sa0a6ks";
-    }
+    (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";
 
   bootstrap = runCommand "openjdk-bootstrap" {
@@ -20,9 +37,16 @@ let
     tar xvf ${src}
     mv openjdk-bootstrap $out
 
+    LIBDIRS="$(find $out -name \*.so\* -exec dirname {} \; | sort | uniq | tr '\n' ':')"
+
     for i in $out/bin/*; do
       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
 
     # Temporarily, while NixOS's OpenJDK bootstrap tarball doesn't have PaX markings:
diff --git a/pkgs/development/compilers/openjdk/default.nix b/pkgs/development/compilers/openjdk/default.nix
index 323bf78ec59d..9bdea7bc7ab9 100644
--- a/pkgs/development/compilers/openjdk/default.nix
+++ b/pkgs/development/compilers/openjdk/default.nix
@@ -1,6 +1,8 @@
 { stdenv, fetchurl, unzip, zip, procps, coreutils, alsaLib, ant, freetype
 , which, bootjdk, nettools, xorg, file
-, fontconfig, cpio, cacert, perl, setJavaClassPath }:
+, fontconfig, cpio, cacert, perl, setJavaClassPath
+, minimal ? false
+}:
 
 let
 
@@ -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,7 +110,7 @@ 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="
@@ -85,7 +120,7 @@ let
       "STATIC_CXX=false"
       "UNLIMITED_CRYPTO=1"
       "FULL_DEBUG_SYMBOLS=0"
-    ];
+    ] ++ stdenv.lib.optional minimal "BUILD_HEADLESS=1";
 
     configurePhase = "true";
 
diff --git a/pkgs/development/compilers/openjdk/openjdk8.nix b/pkgs/development/compilers/openjdk/openjdk8.nix
index 8226f2ea146a..dfac59d859fa 100644
--- a/pkgs/development/compilers/openjdk/openjdk8.nix
+++ b/pkgs/development/compilers/openjdk/openjdk8.nix
@@ -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 } :
 let
@@ -40,118 +41,123 @@ let
              sha256 = "1llf3l4483kd8m1a77n7y9fgvm6fa63nim3qhp5z4gnw68ldbhra";
           };
   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 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
-
-    # 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
-  '';
-
-  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;
-  };
+    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
+      ./JDK-8074312-hotspot.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
 
-  passthru.home = "${openjdk8}/lib/openjdk";
-}; in openjdk8
+      # 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
+    '';
+
+    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
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 60c941a7e270..6daa4b075954 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -3923,29 +3923,38 @@ let
 
   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 {
-    openjdk = openjdk.override { minimal = true; };
+  openjdk7-make-bootstrap = callPackage ../development/compilers/openjdk/make-bootstrap.nix {
+    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 { };
 
   openjdk7 = callPackage ../development/compilers/openjdk {
-    bootjdk = openjdk-bootstrap;
+    bootjdk = openjdk7-bootstrap;
   };
+  openjdk7_jre = openjdk7.jre;
 
   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;
 
   jdk7 = openjdk7;
+  jre7 = jdk7.jre;
 
   jdk8 = openjdk8;
+  jre8 = jdk8.jre;
 
   jdk = if stdenv.isDarwin then openjdk-darwin else jdk8;
+  jre = jdk.jre;
 
   oraclejdk = pkgs.jdkdistro true false;