From 94db68d2834b13bc6ea68fe568f9217ae5985fcb Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 16 Jul 2014 18:35:35 +0200 Subject: Move jdk -> oraclejdk --- .../compilers/jdk/dlj-bundle-builder.sh | 60 ----- pkgs/development/compilers/jdk/jdk-linux-base.nix | 185 -------------- pkgs/development/compilers/jdk/jdk6-construct.sh | 273 --------------------- pkgs/development/compilers/jdk/jdk6-linux.nix | 84 ------- pkgs/development/compilers/jdk/jdk7-linux.nix | 10 - pkgs/development/compilers/jdk/jdk8-linux.nix | 10 - .../compilers/oraclejdk/dlj-bundle-builder.sh | 60 +++++ .../compilers/oraclejdk/jdk-linux-base.nix | 185 ++++++++++++++ .../compilers/oraclejdk/jdk6-construct.sh | 273 +++++++++++++++++++++ .../development/compilers/oraclejdk/jdk6-linux.nix | 84 +++++++ .../development/compilers/oraclejdk/jdk7-linux.nix | 10 + .../development/compilers/oraclejdk/jdk8-linux.nix | 10 + 12 files changed, 622 insertions(+), 622 deletions(-) delete mode 100644 pkgs/development/compilers/jdk/dlj-bundle-builder.sh delete mode 100644 pkgs/development/compilers/jdk/jdk-linux-base.nix delete mode 100644 pkgs/development/compilers/jdk/jdk6-construct.sh delete mode 100644 pkgs/development/compilers/jdk/jdk6-linux.nix delete mode 100644 pkgs/development/compilers/jdk/jdk7-linux.nix delete mode 100644 pkgs/development/compilers/jdk/jdk8-linux.nix create mode 100644 pkgs/development/compilers/oraclejdk/dlj-bundle-builder.sh create mode 100644 pkgs/development/compilers/oraclejdk/jdk-linux-base.nix create mode 100644 pkgs/development/compilers/oraclejdk/jdk6-construct.sh create mode 100644 pkgs/development/compilers/oraclejdk/jdk6-linux.nix create mode 100644 pkgs/development/compilers/oraclejdk/jdk7-linux.nix create mode 100644 pkgs/development/compilers/oraclejdk/jdk8-linux.nix (limited to 'pkgs/development/compilers') diff --git a/pkgs/development/compilers/jdk/dlj-bundle-builder.sh b/pkgs/development/compilers/jdk/dlj-bundle-builder.sh deleted file mode 100644 index 028164ac3955..000000000000 --- a/pkgs/development/compilers/jdk/dlj-bundle-builder.sh +++ /dev/null @@ -1,60 +0,0 @@ -source $stdenv/setup - -echo "Unpacking distribution" -unzip ${src} || true - -# set the dynamic linker of unpack200, necessary for construct script -echo "patching unpack200" -patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" --set-rpath "" */bin/unpack200 - -echo "constructing JDK and JRE installations" -if test -z "$installjdk"; then - sh ${construct} . tmp-linux-jdk tmp-linux-jre - mkdir -p $out - cp -R tmp-linux-jre/* $out -else - sh ${construct} . $out tmp-linux-jre -fi - -echo "removing files at top level of installation" -for file in $out/* -do - if test -f $file ; then - rm $file - fi -done -rm -rf $out/docs - -# construct the rpath -rpath= -for i in $libraries; do - rpath=$rpath${rpath:+:}$i/lib -done - -if test -z "$installjdk"; then - jrePath=$out -else - jrePath=$out/jre -fi - -if test -n "$jce"; then - unzip $jce - cp -v jce/*.jar $jrePath/lib/security -fi - -rpath=$rpath${rpath:+:}$jrePath/lib/$architecture/jli - -# set all the dynamic linkers -find $out -type f -perm +100 \ - -exec patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ - --set-rpath "$rpath" {} \; - -find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; - -if test -z "$pluginSupport"; then - rm -f $out/bin/javaws -fi - -mkdir $jrePath/lib/$architecture/plugins -ln -s $jrePath/lib/$architecture/libnpjp2.so $jrePath/lib/$architecture/plugins - diff --git a/pkgs/development/compilers/jdk/jdk-linux-base.nix b/pkgs/development/compilers/jdk/jdk-linux-base.nix deleted file mode 100644 index 90a64ecd5217..000000000000 --- a/pkgs/development/compilers/jdk/jdk-linux-base.nix +++ /dev/null @@ -1,185 +0,0 @@ -{ productVersion -, patchVersion -, downloadUrl -, sha256_i686 -, sha256_x86_64 -, jceName -, jceDownloadUrl -, sha256JCE -}: - -{ swingSupport ? true -, stdenv -, requireFile -, unzip -, file -, xlibs ? null -, installjdk ? true -, pluginSupport ? true -, installjce ? false -, glib -, libxml2 -, libav_0_8 -, ffmpeg -, libxslt -, mesa_noglu -, freetype -, fontconfig -, gnome -, cairo -, alsaLib -, atk -, gdk_pixbuf -, setJavaClassPath -}: - -assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; -assert swingSupport -> xlibs != null; - -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 - abort "jdk requires i686-linux or x86_64 linux"; - - jce = - if installjce then - requireFile { - name = jceName; - url = jceDownloadUrl; - sha256 = sha256JCE; - } - else - ""; -in - -let result = stdenv.mkDerivation rec { - name = - if installjdk then "oraclejdk-${productVersion}u${patchVersion}" else "oraclejre-${productVersion}u${patchVersion}"; - - src = - if stdenv.system == "i686-linux" then - requireFile { - name = "jdk-${productVersion}u${patchVersion}-linux-i586.tar.gz"; - url = downloadUrl; - sha256 = sha256_i686; - } - else if stdenv.system == "x86_64-linux" then - requireFile { - name = "jdk-${productVersion}u${patchVersion}-linux-x64.tar.gz"; - url = downloadUrl; - sha256 = sha256_x86_64; - } - else - abort "jdk requires i686-linux or x86_64 linux"; - - nativeBuildInputs = [ file ] - ++ stdenv.lib.optional installjce unzip; - - # See: https://github.com/NixOS/patchelf/issues/10 - dontStrip = 1; - - installPhase = '' - cd .. - - # Set PaX markings - exes=$(file $sourceRoot/bin/* $sourceRoot/jre/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 - - if test -z "$installjdk"; then - mv $sourceRoot/jre $out - else - mv $sourceRoot $out - fi - - for file in $out/* - do - if test -f $file ; then - rm $file - fi - done - - if test -n "$installjdk"; then - for file in $out/jre/* - do - if test -f $file ; then - rm $file - fi - done - fi - - # construct the rpath - rpath= - for i in $libraries; do - rpath=$rpath''${rpath:+:}$i/lib:$i/lib64 - done - - if test -z "$installjdk"; then - jrePath=$out - else - jrePath=$out/jre - fi - - if test -n "${jce}"; then - unzip ${jce} - cp -v UnlimitedJCEPolicy/*.jar $jrePath/lib/security - fi - - rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture}/jli - rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture}/server - rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture}/xawt - rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture} - - # set all the dynamic linkers - find $out -type f -perm +100 \ - -exec patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ - --set-rpath "$rpath" {} \; - - find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; - - if test -z "$pluginSupport"; then - rm -f $out/bin/javaws - if test -n "$installjdk"; then - rm -f $out/jre/bin/javaws - fi - fi - - mkdir $jrePath/lib/${architecture}/plugins - ln -s $jrePath/lib/${architecture}/libnpjp2.so $jrePath/lib/${architecture}/plugins - - mkdir -p $out/nix-support - echo -n "${setJavaClassPath}" > $out/nix-support/propagated-native-build-inputs - - # Set JAVA_HOME automatically. - cat <> $out/nix-support/setup-hook - if [ -z "\$JAVA_HOME" ]; then export JAVA_HOME=$out; fi - EOF - ''; - - inherit installjdk pluginSupport; - - /** - * libXt is only needed on amd64 - */ - libraries = - [stdenv.gcc.libc glib libxml2 libav_0_8 ffmpeg libxslt mesa_noglu xlibs.libXxf86vm alsaLib fontconfig freetype gnome.pango gnome.gtk cairo gdk_pixbuf atk] ++ - (if swingSupport then [xlibs.libX11 xlibs.libXext xlibs.libXtst xlibs.libXi xlibs.libXp xlibs.libXt xlibs.libXrender stdenv.gcc.gcc] else []); - - passthru.mozillaPlugin = if installjdk then "/jre/lib/${architecture}/plugins" else "/lib/${architecture}/plugins"; - - passthru.jre = result; # FIXME: use multiple outputs or return actual JRE package - - meta.license = "unfree"; - -}; in result diff --git a/pkgs/development/compilers/jdk/jdk6-construct.sh b/pkgs/development/compilers/jdk/jdk6-construct.sh deleted file mode 100644 index 16ee0f5a2f04..000000000000 --- a/pkgs/development/compilers/jdk/jdk6-construct.sh +++ /dev/null @@ -1,273 +0,0 @@ -#!/bin/bash -# construct.sh -# example construction of JRE and JDK directories from the DLJ bundles -# -# Copyright © 2006 Sun Microsystems, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Sun, Sun Microsystems, the Sun logo and Java, Java HotSpot, -# and JVM trademarks or registered trademarks of Sun Microsystems, -# Inc. in the U.S. and other countries. - - -program=`basename $0` - -usage () { - echo "usage: ${program} path/to/unbundle-jdk path/to/linux-jdk path/to/linux-jre" -} - -getargs() { - undir=$1 - jdkdir=$2 - jredir=$3 - if [ ! -d $undir ]; then - echo "${program}: unbundle directory not found: $undir" - exit 2 - fi - # make sure javahome is the JDK - javahome=`echo $undir/*/db/demo` - if [ ! -d $javahome ]; then - echo "${program}: unbundle directory incorrect: $undir" - echo " expecting $undir/jdk1.5.0_xx" - exit 2 - else - javahome=$(dirname $(dirname $javahome)) - fi - # verify JDK dir - jdkdirp=`dirname $jdkdir` - jdkbase=`basename $jdkdir` - if [ ! -d $jdkdirp ]; then - echo "${program}: parent directory for JDK does not exist: $jdkdirp" - exit 2 - fi - savedir=`pwd` - cd $jdkdirp - jdkdirp=`pwd` - cd $savedir - jdkdir=$jdkdirp/$jdkbase - # verify JRE dir - jredirp=`dirname $jredir` - jrebase=`basename $jredir` - if [ ! -d $jredirp ]; then - echo "${program}: parent directory for JRE does not exist: $jredirp" - exit 2 - fi - savedir=`pwd` - cd $jredirp - jredirp=`pwd` - cd $savedir - jredir=$jredirp/$jrebase -} - -checkfiles() { - if [ -r $jdkdir ]; then - echo "${program}: directory for JDK already exists: $jdkdir" - exit 2 - fi - if [ -r $jredir ]; then - echo "${program}: directory for JRE already exists: $jredir" - exit 2 - fi -} - -copytree() { - echo "copying over the JDK tree..." - cp -a $javahome $jdkdir -} - -linkrel() { - target=$1 - link=$2 - # make a softlink from the $link to the $target - # make this a relative link - targetb=(`echo $target | tr '/' ' '`) - linkb=(`echo $link | tr '/' ' '`) - (( n = ${#targetb[*]} )) - (( m = ${#linkb[*]} )) - c=$n # common length - if [ $m -lt $c ]; then - (( c = m )) - fi - for (( i = 0 ; i < c ; i++ )); do - if [ ${targetb[$i]} != ${linkb[$i]} ]; then - # echo components differ, stopping - break - fi - done - rel="" - for (( j = i + 1; j < m ; j++ )); do - if [ -z $rel ]; then - rel=".." - else - rel="$rel/.." - fi - done - for (( j = i; j < n ; j++ )); do - if [ -z $rel ]; then - rel=${targetb[$j]} - else - rel="$rel/${targetb[$j]}" - fi - done - ln -s $rel $link -} - -createjre() { - echo "creating JRE directory..." - # absolute link - # ln -s $jdkdir/jre $jredir - # relative link - linkrel $jdkdir/jre $jredir -} - -unpackjars() { - echo "unpacking jars..." - unpack200=$jdkdir/bin/unpack200 - if [ ! -x $unpack200 ]; then - echo "${program}: file missing $unpack200" - exit 1 - fi - cd $jdkdir - PACKED_JARS=`find . -name '*.pack'` - for i in $PACKED_JARS; do - # echo $i - jdir=`dirname $i` - jbase=`basename $i .pack` - if ! $unpack200 $jdkdir/$jdir/$jbase.pack $jdkdir/$jdir/$jbase.jar; then - echo "${program}: error unpacking $jdkdir/$jdir/$jbase.jar" - fi - if [ ! -r $jdkdir/$jdir/$jbase.jar ]; then - echo "${program}: missing $jdkdir/$jdir/$jbase.jar" - else - echo " $jdir/$jbase.jar" - # remove pack file - rm $jdkdir/$jdir/$jbase.pack - fi - done -} - -preparecds() { - # if this is a client installation... - compiler="`$jdkdir/bin/java -client -version 2>&1 | tail -n +3 | cut -d' ' -f1-4`" - if [ "X$compiler" = "XJava HotSpot(TM) Client VM" ]; then - # create the CDS archive - echo "creating the class data sharing archive..." - if ! $jdkdir/bin/java -client -Xshare:dump > /dev/null 2>&1; then - echo "returned error code $?" - fi - fi -} - -jreman () { - echo "setting up the JRE man pages..." - # note this list is slightly different for OpenSolaris bundles - jreman=/tmp/jre.man.txt -cat < $jreman -man/ja_JP.eucJP/man1/java.1 -man/ja_JP.eucJP/man1/javaws.1 -man/ja_JP.eucJP/man1/keytool.1 -man/ja_JP.eucJP/man1/orbd.1 -man/ja_JP.eucJP/man1/pack200.1 -man/ja_JP.eucJP/man1/policytool.1 -man/ja_JP.eucJP/man1/rmid.1 -man/ja_JP.eucJP/man1/rmiregistry.1 -man/ja_JP.eucJP/man1/servertool.1 -man/ja_JP.eucJP/man1/tnameserv.1 -man/ja_JP.eucJP/man1/unpack200.1 -man/man1/java.1 -man/man1/javaws.1 -man/man1/keytool.1 -man/man1/orbd.1 -man/man1/pack200.1 -man/man1/policytool.1 -man/man1/rmid.1 -man/man1/rmiregistry.1 -man/man1/servertool.1 -man/man1/tnameserv.1 -man/man1/unpack200.1 -EOF - # create jre/man directory - # mkdir $jdkdir/jre/man - # move the real JRE man pages to jre/man - # link the JDK JRE man pages to jre/man - # real JDK man pages stay where they are - for m in `cat $jreman`; do - manpath=`dirname $jdkdir/jre/$m` - mkdir -p $manpath - mv $jdkdir/$m $jdkdir/jre/$m - linkrel $jdkdir/jre/$m $jdkdir/$m - done - # link in Japanese man pages - ln -s ja_JP.eucJP $jdkdir/jre/man/ja - rm $jreman -} - -elimdups() { - echo "eliminating duplication between the JDK and JDK/jre..." - jdkcomm=/tmp/jdk.bin.comm.txt -cat < $jdkcomm -bin/ControlPanel -bin/java -bin/javaws -bin/keytool -bin/orbd -bin/pack200 -bin/policytool -bin/rmid -bin/rmiregistry -bin/servertool -bin/tnameserv -bin/unpack200 -EOF - # note there is little point in linking these common files - # COPYRIGHT - # LICENSE - # THIRDPARTYLICENSEREADME.txt - # And this file is unique to the JDK - # README.html - # And these files are unique to the JDK/jre/ - # CHANGES - # README - # Welcome.html - for p in `cat $jdkcomm`; do - rm $jdkdir/$p - # this is a relative link - ln -s ../jre/$p $jdkdir/$p - done - rm $jdkcomm -} - -if [ $# -eq 3 ] ; then - getargs $1 $2 $3 - checkfiles - copytree - createjre - unpackjars - preparecds - jreman - elimdups -else - usage - exit 1 -fi - -exit 0 - diff --git a/pkgs/development/compilers/jdk/jdk6-linux.nix b/pkgs/development/compilers/jdk/jdk6-linux.nix deleted file mode 100644 index 97ec6b56305c..000000000000 --- a/pkgs/development/compilers/jdk/jdk6-linux.nix +++ /dev/null @@ -1,84 +0,0 @@ -{ swingSupport ? true -, stdenv -, requireFile -, unzip -, makeWrapper -, xlibs ? null -, installjdk ? true -, pluginSupport ? true -, installjce ? false -}: - -assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; -assert swingSupport -> xlibs != null; - -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 - abort "jdk requires i686-linux or x86_64 linux"; - - jce = - if installjce then - requireFile { - name = "jce_policy-6.zip"; - url = http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html; - sha256 = "0qljzfxbikm8br5k7rkamibp1vkyjrf6blbxpx6hn4k46f62bhnh"; - } - else - null; -in - -stdenv.mkDerivation { - name = - if installjdk then "jdk-1.6.0_45b06" else "jre-1.6.0_45b06"; - - src = - if stdenv.system == "i686-linux" then - requireFile { - name = "jdk-6u45-linux-i586.bin"; - url = http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html; - sha256 = "0mx3d2qlal5zyz1a7ld1yk2rs8pf9sjxs2jzasais3nq30jmlfym"; - } - else if stdenv.system == "x86_64-linux" then - requireFile { - name = "jdk-6u45-linux-x64.bin"; - url = http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html; - sha256 = "1s0j1pdr6y8c816d9i86rx4zp12nbhmas1rxksp0r53cn7m3ljbb"; - } - else - abort "jdk requires i686-linux or x86_64 linux"; - - builder = ./dlj-bundle-builder.sh; - - /** - * If jdk5 is added, make sure to use the original construct script. - * This copy removes references to kinit, klist, ktab, which seem to be - * gone in jdk6. - */ - construct = ./jdk6-construct.sh; - inherit installjdk; - - buildInputs = [unzip makeWrapper]; - - /** - * libXt is only needed on amd64 - */ - libraries = - [stdenv.gcc.libc] ++ - (if swingSupport then [xlibs.libX11 xlibs.libXext xlibs.libXtst xlibs.libXi xlibs.libXp xlibs.libXt] else []); - - inherit swingSupport pluginSupport architecture jce; - inherit (xlibs) libX11; - - mozillaPlugin = if installjdk then "/jre/lib/${architecture}/plugins" else "/lib/${architecture}/plugins"; - - meta.license = "unfree"; -} diff --git a/pkgs/development/compilers/jdk/jdk7-linux.nix b/pkgs/development/compilers/jdk/jdk7-linux.nix deleted file mode 100644 index 55e8ad45085f..000000000000 --- a/pkgs/development/compilers/jdk/jdk7-linux.nix +++ /dev/null @@ -1,10 +0,0 @@ -import ./jdk-linux-base.nix { - productVersion = "7"; - patchVersion = "65"; - downloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html; - sha256_i686 = "e3032c561deb237c033b485a358cc429ec83b621303bc6b31768855778a9eaa0"; - sha256_x86_64 = "33fac9630ca8c2d374247abc5c010ac8d2875a3384968aa3e74448361808e4b7"; - jceName = "UnlimitedJCEPolicyJDK7.zip"; - jceDownloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html; - sha256JCE = "7a8d790e7bd9c2f82a83baddfae765797a4a56ea603c9150c87b7cdb7800194d"; -} diff --git a/pkgs/development/compilers/jdk/jdk8-linux.nix b/pkgs/development/compilers/jdk/jdk8-linux.nix deleted file mode 100644 index 0c3eed75f4c2..000000000000 --- a/pkgs/development/compilers/jdk/jdk8-linux.nix +++ /dev/null @@ -1,10 +0,0 @@ -import ./jdk-linux-base.nix { - productVersion = "8"; - patchVersion = "5"; - downloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html; - sha256_i686 = "779f83efb8dc9ce7c1143ba9bbd38fa2d8a1c49dcb61f7d36972d37d109c5fc9"; - sha256_x86_64 = "44901389e9fb118971534ad0f58558ba8c43f315b369117135bd6617ae631edc"; - jceName = "jce_policy-8.zip"; - jceDownloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html; - sha256JCE = "f3020a3922efd6626c2fff45695d527f34a8020e938a49292561f18ad1320b59"; -} diff --git a/pkgs/development/compilers/oraclejdk/dlj-bundle-builder.sh b/pkgs/development/compilers/oraclejdk/dlj-bundle-builder.sh new file mode 100644 index 000000000000..028164ac3955 --- /dev/null +++ b/pkgs/development/compilers/oraclejdk/dlj-bundle-builder.sh @@ -0,0 +1,60 @@ +source $stdenv/setup + +echo "Unpacking distribution" +unzip ${src} || true + +# set the dynamic linker of unpack200, necessary for construct script +echo "patching unpack200" +patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" --set-rpath "" */bin/unpack200 + +echo "constructing JDK and JRE installations" +if test -z "$installjdk"; then + sh ${construct} . tmp-linux-jdk tmp-linux-jre + mkdir -p $out + cp -R tmp-linux-jre/* $out +else + sh ${construct} . $out tmp-linux-jre +fi + +echo "removing files at top level of installation" +for file in $out/* +do + if test -f $file ; then + rm $file + fi +done +rm -rf $out/docs + +# construct the rpath +rpath= +for i in $libraries; do + rpath=$rpath${rpath:+:}$i/lib +done + +if test -z "$installjdk"; then + jrePath=$out +else + jrePath=$out/jre +fi + +if test -n "$jce"; then + unzip $jce + cp -v jce/*.jar $jrePath/lib/security +fi + +rpath=$rpath${rpath:+:}$jrePath/lib/$architecture/jli + +# set all the dynamic linkers +find $out -type f -perm +100 \ + -exec patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ + --set-rpath "$rpath" {} \; + +find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; + +if test -z "$pluginSupport"; then + rm -f $out/bin/javaws +fi + +mkdir $jrePath/lib/$architecture/plugins +ln -s $jrePath/lib/$architecture/libnpjp2.so $jrePath/lib/$architecture/plugins + diff --git a/pkgs/development/compilers/oraclejdk/jdk-linux-base.nix b/pkgs/development/compilers/oraclejdk/jdk-linux-base.nix new file mode 100644 index 000000000000..90a64ecd5217 --- /dev/null +++ b/pkgs/development/compilers/oraclejdk/jdk-linux-base.nix @@ -0,0 +1,185 @@ +{ productVersion +, patchVersion +, downloadUrl +, sha256_i686 +, sha256_x86_64 +, jceName +, jceDownloadUrl +, sha256JCE +}: + +{ swingSupport ? true +, stdenv +, requireFile +, unzip +, file +, xlibs ? null +, installjdk ? true +, pluginSupport ? true +, installjce ? false +, glib +, libxml2 +, libav_0_8 +, ffmpeg +, libxslt +, mesa_noglu +, freetype +, fontconfig +, gnome +, cairo +, alsaLib +, atk +, gdk_pixbuf +, setJavaClassPath +}: + +assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; +assert swingSupport -> xlibs != null; + +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 + abort "jdk requires i686-linux or x86_64 linux"; + + jce = + if installjce then + requireFile { + name = jceName; + url = jceDownloadUrl; + sha256 = sha256JCE; + } + else + ""; +in + +let result = stdenv.mkDerivation rec { + name = + if installjdk then "oraclejdk-${productVersion}u${patchVersion}" else "oraclejre-${productVersion}u${patchVersion}"; + + src = + if stdenv.system == "i686-linux" then + requireFile { + name = "jdk-${productVersion}u${patchVersion}-linux-i586.tar.gz"; + url = downloadUrl; + sha256 = sha256_i686; + } + else if stdenv.system == "x86_64-linux" then + requireFile { + name = "jdk-${productVersion}u${patchVersion}-linux-x64.tar.gz"; + url = downloadUrl; + sha256 = sha256_x86_64; + } + else + abort "jdk requires i686-linux or x86_64 linux"; + + nativeBuildInputs = [ file ] + ++ stdenv.lib.optional installjce unzip; + + # See: https://github.com/NixOS/patchelf/issues/10 + dontStrip = 1; + + installPhase = '' + cd .. + + # Set PaX markings + exes=$(file $sourceRoot/bin/* $sourceRoot/jre/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 + + if test -z "$installjdk"; then + mv $sourceRoot/jre $out + else + mv $sourceRoot $out + fi + + for file in $out/* + do + if test -f $file ; then + rm $file + fi + done + + if test -n "$installjdk"; then + for file in $out/jre/* + do + if test -f $file ; then + rm $file + fi + done + fi + + # construct the rpath + rpath= + for i in $libraries; do + rpath=$rpath''${rpath:+:}$i/lib:$i/lib64 + done + + if test -z "$installjdk"; then + jrePath=$out + else + jrePath=$out/jre + fi + + if test -n "${jce}"; then + unzip ${jce} + cp -v UnlimitedJCEPolicy/*.jar $jrePath/lib/security + fi + + rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture}/jli + rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture}/server + rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture}/xawt + rpath=$rpath''${rpath:+:}$jrePath/lib/${architecture} + + # set all the dynamic linkers + find $out -type f -perm +100 \ + -exec patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ + --set-rpath "$rpath" {} \; + + find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; + + if test -z "$pluginSupport"; then + rm -f $out/bin/javaws + if test -n "$installjdk"; then + rm -f $out/jre/bin/javaws + fi + fi + + mkdir $jrePath/lib/${architecture}/plugins + ln -s $jrePath/lib/${architecture}/libnpjp2.so $jrePath/lib/${architecture}/plugins + + mkdir -p $out/nix-support + echo -n "${setJavaClassPath}" > $out/nix-support/propagated-native-build-inputs + + # Set JAVA_HOME automatically. + cat <> $out/nix-support/setup-hook + if [ -z "\$JAVA_HOME" ]; then export JAVA_HOME=$out; fi + EOF + ''; + + inherit installjdk pluginSupport; + + /** + * libXt is only needed on amd64 + */ + libraries = + [stdenv.gcc.libc glib libxml2 libav_0_8 ffmpeg libxslt mesa_noglu xlibs.libXxf86vm alsaLib fontconfig freetype gnome.pango gnome.gtk cairo gdk_pixbuf atk] ++ + (if swingSupport then [xlibs.libX11 xlibs.libXext xlibs.libXtst xlibs.libXi xlibs.libXp xlibs.libXt xlibs.libXrender stdenv.gcc.gcc] else []); + + passthru.mozillaPlugin = if installjdk then "/jre/lib/${architecture}/plugins" else "/lib/${architecture}/plugins"; + + passthru.jre = result; # FIXME: use multiple outputs or return actual JRE package + + meta.license = "unfree"; + +}; in result diff --git a/pkgs/development/compilers/oraclejdk/jdk6-construct.sh b/pkgs/development/compilers/oraclejdk/jdk6-construct.sh new file mode 100644 index 000000000000..16ee0f5a2f04 --- /dev/null +++ b/pkgs/development/compilers/oraclejdk/jdk6-construct.sh @@ -0,0 +1,273 @@ +#!/bin/bash +# construct.sh +# example construction of JRE and JDK directories from the DLJ bundles +# +# Copyright © 2006 Sun Microsystems, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Sun, Sun Microsystems, the Sun logo and Java, Java HotSpot, +# and JVM trademarks or registered trademarks of Sun Microsystems, +# Inc. in the U.S. and other countries. + + +program=`basename $0` + +usage () { + echo "usage: ${program} path/to/unbundle-jdk path/to/linux-jdk path/to/linux-jre" +} + +getargs() { + undir=$1 + jdkdir=$2 + jredir=$3 + if [ ! -d $undir ]; then + echo "${program}: unbundle directory not found: $undir" + exit 2 + fi + # make sure javahome is the JDK + javahome=`echo $undir/*/db/demo` + if [ ! -d $javahome ]; then + echo "${program}: unbundle directory incorrect: $undir" + echo " expecting $undir/jdk1.5.0_xx" + exit 2 + else + javahome=$(dirname $(dirname $javahome)) + fi + # verify JDK dir + jdkdirp=`dirname $jdkdir` + jdkbase=`basename $jdkdir` + if [ ! -d $jdkdirp ]; then + echo "${program}: parent directory for JDK does not exist: $jdkdirp" + exit 2 + fi + savedir=`pwd` + cd $jdkdirp + jdkdirp=`pwd` + cd $savedir + jdkdir=$jdkdirp/$jdkbase + # verify JRE dir + jredirp=`dirname $jredir` + jrebase=`basename $jredir` + if [ ! -d $jredirp ]; then + echo "${program}: parent directory for JRE does not exist: $jredirp" + exit 2 + fi + savedir=`pwd` + cd $jredirp + jredirp=`pwd` + cd $savedir + jredir=$jredirp/$jrebase +} + +checkfiles() { + if [ -r $jdkdir ]; then + echo "${program}: directory for JDK already exists: $jdkdir" + exit 2 + fi + if [ -r $jredir ]; then + echo "${program}: directory for JRE already exists: $jredir" + exit 2 + fi +} + +copytree() { + echo "copying over the JDK tree..." + cp -a $javahome $jdkdir +} + +linkrel() { + target=$1 + link=$2 + # make a softlink from the $link to the $target + # make this a relative link + targetb=(`echo $target | tr '/' ' '`) + linkb=(`echo $link | tr '/' ' '`) + (( n = ${#targetb[*]} )) + (( m = ${#linkb[*]} )) + c=$n # common length + if [ $m -lt $c ]; then + (( c = m )) + fi + for (( i = 0 ; i < c ; i++ )); do + if [ ${targetb[$i]} != ${linkb[$i]} ]; then + # echo components differ, stopping + break + fi + done + rel="" + for (( j = i + 1; j < m ; j++ )); do + if [ -z $rel ]; then + rel=".." + else + rel="$rel/.." + fi + done + for (( j = i; j < n ; j++ )); do + if [ -z $rel ]; then + rel=${targetb[$j]} + else + rel="$rel/${targetb[$j]}" + fi + done + ln -s $rel $link +} + +createjre() { + echo "creating JRE directory..." + # absolute link + # ln -s $jdkdir/jre $jredir + # relative link + linkrel $jdkdir/jre $jredir +} + +unpackjars() { + echo "unpacking jars..." + unpack200=$jdkdir/bin/unpack200 + if [ ! -x $unpack200 ]; then + echo "${program}: file missing $unpack200" + exit 1 + fi + cd $jdkdir + PACKED_JARS=`find . -name '*.pack'` + for i in $PACKED_JARS; do + # echo $i + jdir=`dirname $i` + jbase=`basename $i .pack` + if ! $unpack200 $jdkdir/$jdir/$jbase.pack $jdkdir/$jdir/$jbase.jar; then + echo "${program}: error unpacking $jdkdir/$jdir/$jbase.jar" + fi + if [ ! -r $jdkdir/$jdir/$jbase.jar ]; then + echo "${program}: missing $jdkdir/$jdir/$jbase.jar" + else + echo " $jdir/$jbase.jar" + # remove pack file + rm $jdkdir/$jdir/$jbase.pack + fi + done +} + +preparecds() { + # if this is a client installation... + compiler="`$jdkdir/bin/java -client -version 2>&1 | tail -n +3 | cut -d' ' -f1-4`" + if [ "X$compiler" = "XJava HotSpot(TM) Client VM" ]; then + # create the CDS archive + echo "creating the class data sharing archive..." + if ! $jdkdir/bin/java -client -Xshare:dump > /dev/null 2>&1; then + echo "returned error code $?" + fi + fi +} + +jreman () { + echo "setting up the JRE man pages..." + # note this list is slightly different for OpenSolaris bundles + jreman=/tmp/jre.man.txt +cat < $jreman +man/ja_JP.eucJP/man1/java.1 +man/ja_JP.eucJP/man1/javaws.1 +man/ja_JP.eucJP/man1/keytool.1 +man/ja_JP.eucJP/man1/orbd.1 +man/ja_JP.eucJP/man1/pack200.1 +man/ja_JP.eucJP/man1/policytool.1 +man/ja_JP.eucJP/man1/rmid.1 +man/ja_JP.eucJP/man1/rmiregistry.1 +man/ja_JP.eucJP/man1/servertool.1 +man/ja_JP.eucJP/man1/tnameserv.1 +man/ja_JP.eucJP/man1/unpack200.1 +man/man1/java.1 +man/man1/javaws.1 +man/man1/keytool.1 +man/man1/orbd.1 +man/man1/pack200.1 +man/man1/policytool.1 +man/man1/rmid.1 +man/man1/rmiregistry.1 +man/man1/servertool.1 +man/man1/tnameserv.1 +man/man1/unpack200.1 +EOF + # create jre/man directory + # mkdir $jdkdir/jre/man + # move the real JRE man pages to jre/man + # link the JDK JRE man pages to jre/man + # real JDK man pages stay where they are + for m in `cat $jreman`; do + manpath=`dirname $jdkdir/jre/$m` + mkdir -p $manpath + mv $jdkdir/$m $jdkdir/jre/$m + linkrel $jdkdir/jre/$m $jdkdir/$m + done + # link in Japanese man pages + ln -s ja_JP.eucJP $jdkdir/jre/man/ja + rm $jreman +} + +elimdups() { + echo "eliminating duplication between the JDK and JDK/jre..." + jdkcomm=/tmp/jdk.bin.comm.txt +cat < $jdkcomm +bin/ControlPanel +bin/java +bin/javaws +bin/keytool +bin/orbd +bin/pack200 +bin/policytool +bin/rmid +bin/rmiregistry +bin/servertool +bin/tnameserv +bin/unpack200 +EOF + # note there is little point in linking these common files + # COPYRIGHT + # LICENSE + # THIRDPARTYLICENSEREADME.txt + # And this file is unique to the JDK + # README.html + # And these files are unique to the JDK/jre/ + # CHANGES + # README + # Welcome.html + for p in `cat $jdkcomm`; do + rm $jdkdir/$p + # this is a relative link + ln -s ../jre/$p $jdkdir/$p + done + rm $jdkcomm +} + +if [ $# -eq 3 ] ; then + getargs $1 $2 $3 + checkfiles + copytree + createjre + unpackjars + preparecds + jreman + elimdups +else + usage + exit 1 +fi + +exit 0 + diff --git a/pkgs/development/compilers/oraclejdk/jdk6-linux.nix b/pkgs/development/compilers/oraclejdk/jdk6-linux.nix new file mode 100644 index 000000000000..97ec6b56305c --- /dev/null +++ b/pkgs/development/compilers/oraclejdk/jdk6-linux.nix @@ -0,0 +1,84 @@ +{ swingSupport ? true +, stdenv +, requireFile +, unzip +, makeWrapper +, xlibs ? null +, installjdk ? true +, pluginSupport ? true +, installjce ? false +}: + +assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; +assert swingSupport -> xlibs != null; + +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 + abort "jdk requires i686-linux or x86_64 linux"; + + jce = + if installjce then + requireFile { + name = "jce_policy-6.zip"; + url = http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html; + sha256 = "0qljzfxbikm8br5k7rkamibp1vkyjrf6blbxpx6hn4k46f62bhnh"; + } + else + null; +in + +stdenv.mkDerivation { + name = + if installjdk then "jdk-1.6.0_45b06" else "jre-1.6.0_45b06"; + + src = + if stdenv.system == "i686-linux" then + requireFile { + name = "jdk-6u45-linux-i586.bin"; + url = http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html; + sha256 = "0mx3d2qlal5zyz1a7ld1yk2rs8pf9sjxs2jzasais3nq30jmlfym"; + } + else if stdenv.system == "x86_64-linux" then + requireFile { + name = "jdk-6u45-linux-x64.bin"; + url = http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html; + sha256 = "1s0j1pdr6y8c816d9i86rx4zp12nbhmas1rxksp0r53cn7m3ljbb"; + } + else + abort "jdk requires i686-linux or x86_64 linux"; + + builder = ./dlj-bundle-builder.sh; + + /** + * If jdk5 is added, make sure to use the original construct script. + * This copy removes references to kinit, klist, ktab, which seem to be + * gone in jdk6. + */ + construct = ./jdk6-construct.sh; + inherit installjdk; + + buildInputs = [unzip makeWrapper]; + + /** + * libXt is only needed on amd64 + */ + libraries = + [stdenv.gcc.libc] ++ + (if swingSupport then [xlibs.libX11 xlibs.libXext xlibs.libXtst xlibs.libXi xlibs.libXp xlibs.libXt] else []); + + inherit swingSupport pluginSupport architecture jce; + inherit (xlibs) libX11; + + mozillaPlugin = if installjdk then "/jre/lib/${architecture}/plugins" else "/lib/${architecture}/plugins"; + + meta.license = "unfree"; +} diff --git a/pkgs/development/compilers/oraclejdk/jdk7-linux.nix b/pkgs/development/compilers/oraclejdk/jdk7-linux.nix new file mode 100644 index 000000000000..55e8ad45085f --- /dev/null +++ b/pkgs/development/compilers/oraclejdk/jdk7-linux.nix @@ -0,0 +1,10 @@ +import ./jdk-linux-base.nix { + productVersion = "7"; + patchVersion = "65"; + downloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html; + sha256_i686 = "e3032c561deb237c033b485a358cc429ec83b621303bc6b31768855778a9eaa0"; + sha256_x86_64 = "33fac9630ca8c2d374247abc5c010ac8d2875a3384968aa3e74448361808e4b7"; + jceName = "UnlimitedJCEPolicyJDK7.zip"; + jceDownloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html; + sha256JCE = "7a8d790e7bd9c2f82a83baddfae765797a4a56ea603c9150c87b7cdb7800194d"; +} diff --git a/pkgs/development/compilers/oraclejdk/jdk8-linux.nix b/pkgs/development/compilers/oraclejdk/jdk8-linux.nix new file mode 100644 index 000000000000..0c3eed75f4c2 --- /dev/null +++ b/pkgs/development/compilers/oraclejdk/jdk8-linux.nix @@ -0,0 +1,10 @@ +import ./jdk-linux-base.nix { + productVersion = "8"; + patchVersion = "5"; + downloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html; + sha256_i686 = "779f83efb8dc9ce7c1143ba9bbd38fa2d8a1c49dcb61f7d36972d37d109c5fc9"; + sha256_x86_64 = "44901389e9fb118971534ad0f58558ba8c43f315b369117135bd6617ae631edc"; + jceName = "jce_policy-8.zip"; + jceDownloadUrl = http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html; + sha256JCE = "f3020a3922efd6626c2fff45695d527f34a8020e938a49292561f18ad1320b59"; +} -- cgit 1.4.1