Merge pull request #329823 from ExpidusOS/fix/pkgsllvm/elfutils
[NixPkgs.git] / pkgs / development / compilers / oraclejdk / jdk-linux-base.nix
blobd03419e96570e65584a203aee85d2389f06a8f52
1 { productVersion
2 , patchVersion
3 , sha256
4 , jceName
5 , sha256JCE
6 }:
8 { swingSupport ? true
9 , lib, stdenv
10 , requireFile
11 , makeWrapper
12 , unzip
13 , file
14 , xorg ? null
15 , installjdk ? true
16 , pluginSupport ? true
17 , installjce ? false
18 , config
19 , glib
20 , libxml2
21 , ffmpeg
22 , libxslt
23 , libGL
24 , freetype
25 , fontconfig
26 , gtk2
27 , pango
28 , cairo
29 , alsa-lib
30 , atk
31 , gdk-pixbuf
32 , setJavaClassPath
35 assert swingSupport -> xorg != null;
37 let
39   /**
40    * The JRE libraries are in directories that depend on the CPU.
41    */
42   architecture = {
43     i686-linux    = "i386";
44     x86_64-linux  = "amd64";
45     armv7l-linux  = "arm";
46     aarch64-linux = "aarch64";
47   }.${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
49   jce =
50     if installjce then
51       requireFile {
52         name = jceName;
53         url = "http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html";
54         sha256 = sha256JCE;
55       }
56     else
57       "";
59   rSubPaths = [
60     "lib/${architecture}/jli"
61     "lib/${architecture}/server"
62     "lib/${architecture}/xawt"
63     "lib/${architecture}"
64   ];
68 let result = stdenv.mkDerivation rec {
69   pname = if installjdk then "oraclejdk" else "oraclejre" + lib.optionalString pluginSupport "-with-plugin";
70   version = "${productVersion}u${patchVersion}";
72   src =
73     let
74       platformName = {
75         i686-linux    = "linux-i586";
76         x86_64-linux  = "linux-x64";
77         armv7l-linux  = "linux-arm32-vfp-hflt";
78         aarch64-linux = "linux-aarch64";
79       }.${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
80     in requireFile {
81       name = "jdk-${productVersion}u${patchVersion}-${platformName}.tar.gz";
82       url = "http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html";
83       sha256 = sha256.${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
84     };
86   nativeBuildInputs = [ file makeWrapper ]
87     ++ lib.optional installjce unzip;
89   # See: https://github.com/NixOS/patchelf/issues/10
90   dontStrip = 1;
92   installPhase = ''
93     cd ..
95     if test -z "$installjdk"; then
96       mv $sourceRoot/jre $out
97     else
98       mv $sourceRoot $out
99     fi
101     shopt -s extglob
102     for file in $out/!(*src.zip)
103     do
104       if test -f $file ; then
105         rm $file
106       fi
107     done
109     if test -n "$installjdk"; then
110       for file in $out/jre/*
111       do
112         if test -f $file ; then
113           rm $file
114         fi
115       done
116     fi
118     if test -z "$installjdk"; then
119       jrePath=$out
120     else
121       jrePath=$out/jre
122     fi
124     if test -n "${jce}"; then
125       unzip ${jce}
126       cp -v UnlimitedJCEPolicy*/*.jar $jrePath/lib/security
127     fi
129     if test -z "$pluginSupport"; then
130       rm -f $out/bin/javaws
131       if test -n "$installjdk"; then
132         rm -f $out/jre/bin/javaws
133       fi
134     fi
136     mkdir $jrePath/lib/${architecture}/plugins
137     ln -s $jrePath/lib/${architecture}/libnpjp2.so $jrePath/lib/${architecture}/plugins
139     mkdir -p $out/nix-support
140     printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
142     # Set JAVA_HOME automatically.
143     cat <<EOF >> $out/nix-support/setup-hook
144     if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
145     EOF
146   '';
148   postFixup = ''
149     rpath+="''${rpath:+:}${lib.concatStringsSep ":" (map (a: "$jrePath/${a}") rSubPaths)}"
151     # set all the dynamic linkers
152     find $out -type f -perm -0100 \
153         -exec patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
154         --set-rpath "$rpath" {} \;
156     find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \;
158     # Oracle Java Mission Control needs to know where libgtk-x11 and related is
159     if test -n "$installjdk" -a -x $out/bin/jmc; then
160       wrapProgram "$out/bin/jmc" \
161           --suffix-each LD_LIBRARY_PATH ':' "$rpath"
162     fi
163   '';
165   inherit installjdk pluginSupport;
167   /**
168    * libXt is only needed on amd64
169    */
170   libraries =
171     [stdenv.cc.libc glib libxml2 ffmpeg libxslt libGL xorg.libXxf86vm alsa-lib fontconfig freetype pango gtk2 cairo gdk-pixbuf atk] ++
172     lib.optionals swingSupport [xorg.libX11 xorg.libXext xorg.libXtst xorg.libXi xorg.libXp xorg.libXt xorg.libXrender stdenv.cc.cc];
174   rpath = lib.strings.makeLibraryPath libraries;
176   passthru.mozillaPlugin = if installjdk then "/jre/lib/${architecture}/plugins" else "/lib/${architecture}/plugins";
178   passthru.jre = result; # FIXME: use multiple outputs or return actual JRE package
180   passthru.home = result;
182   passthru.architecture = architecture;
184   meta = with lib; {
185     license = licenses.unfree;
186     platforms = [ "i686-linux" "x86_64-linux" "armv7l-linux" "aarch64-linux" ]; # some inherit jre.meta.platforms
187     mainProgram = "java";
188   };
190 }; in result