From 88904928729ea72e879a5dddfbdddfdb0e61f729 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 20 Jan 2014 14:54:50 +0100 Subject: [PATCH] openjdk: Ugly hack to fix nix-env installation Nix-env always wants to install all outputs of a derivation, but this failed for openjdk/openjre because openjdk has some symlinks (such as bin/java) to openjre. Also, it prevents installing the openjre without the openjdk. So as a workaround, mess with the "outputs" attribute to fool nix-env. Also, give openjre a separate name and description. Fixes #1535. --- lib/meta.nix | 6 +++--- pkgs/top-level/all-packages.nix | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/meta.nix b/lib/meta.nix index 74e9cfb411c..1af31473348 100644 --- a/lib/meta.nix +++ b/lib/meta.nix @@ -14,7 +14,7 @@ rec { addMetaAttrs {description = "Bla blah";} somePkg */ addMetaAttrs = newAttrs: drv: - drv // { meta = (if drv ? meta then drv.meta else {}) // newAttrs; }; + drv // { meta = (drv.meta or {}) // newAttrs; }; /* Change the symbolic name of a package for presentation purposes @@ -51,7 +51,7 @@ rec { /* Apply lowPrio to an attrset with derivations */ - lowPrioSet = set: mapDerivationAttrset lowPrio set; + lowPrioSet = set: mapDerivationAttrset lowPrio set; /* Increase the nix-env priority of the package, i.e., this @@ -63,5 +63,5 @@ rec { /* Apply hiPrio to an attrset with derivations */ hiPrioSet = set: mapDerivationAttrset hiPrio set; - + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 72bdda00bfe..096880a6331 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2851,11 +2851,14 @@ let else let openjdkBootstrap = callPackage ../development/compilers/openjdk/bootstrap.nix { }; - in callPackage ../development/compilers/openjdk { + in (callPackage ../development/compilers/openjdk { jdk = openjdkBootstrap; - }; + }) // { outputs = [ "out" ]; }; - openjre = pkgs.openjdk.jre; + # FIXME: Need a way to set per-output meta attributes. + openjre = (lib.setName "openjre-${lib.getVersion pkgs.openjdk.jre}" (lib.addMetaAttrs + { description = "The open-source Java Runtime Environment"; } + pkgs.openjdk.jre)) // { outputs = [ "jre" ]; }; jdk = if stdenv.isDarwin || stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux" then pkgs.openjdk