From 5d6259a9739d03f6ae2751b342689c877e7209df Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 6 Jan 2014 13:42:37 +0100 Subject: [PATCH] Add a setup hook that automatically sets up $CLASSPATH All JARs in $pkg/share/java (for each $pkg in the build inputs) are added to $CLASSPATH. Thus, you can say buildInputs = [ setJavaClassPath someJavaDependency ]; and the JARs in someJavaDependency will be found automatically by tools like javac or ant. Note that the manual used to say that JARs should be installed in lib/java; this is now share/java, following the Debian policy: http://www.debian.org/doc/packaging-manuals/java-policy/x110.html The directory share/java makes more sense because JARs are architecture-independent. (Also, a quick grep shows that we were not exactly consistent about this in Nixpkgs.) --- doc/language-support.xml | 2 +- .../setup-hooks/set-java-classpath.sh | 13 +++++++++++++ pkgs/development/eclipse/ecj/default.nix | 16 ++++++---------- pkgs/top-level/all-packages.nix | 2 ++ 4 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 pkgs/build-support/setup-hooks/set-java-classpath.sh diff --git a/doc/language-support.xml b/doc/language-support.xml index cb40be4bf57..277f3115f73 100644 --- a/doc/language-support.xml +++ b/doc/language-support.xml @@ -236,7 +236,7 @@ twisted = buildPythonPackage {
Java Java packages should install JAR files in -$out/lib/java. +$out/share/java.
diff --git a/pkgs/build-support/setup-hooks/set-java-classpath.sh b/pkgs/build-support/setup-hooks/set-java-classpath.sh new file mode 100644 index 00000000000..76e8e42ca26 --- /dev/null +++ b/pkgs/build-support/setup-hooks/set-java-classpath.sh @@ -0,0 +1,13 @@ +# This setup hook adds every JAR in the share/java subdirectories of +# the build inputs to $CLASSPATH. + +export CLASSPATH + +addPkgToClassPath () { + local jar + for jar in $1/share/java/*.jar; do + export CLASSPATH=''${CLASSPATH}''${CLASSPATH:+:}''${jar} + done +} + +envHooks=(''${envHooks[@]} addPkgToClassPath) diff --git a/pkgs/development/eclipse/ecj/default.nix b/pkgs/development/eclipse/ecj/default.nix index 7b3940cc2e1..432bdc72b3c 100644 --- a/pkgs/development/eclipse/ecj/default.nix +++ b/pkgs/development/eclipse/ecj/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, unzip, ant, jdk }: +{ stdenv, fetchurl, unzip, ant, jdk, makeWrapper }: let version = "3.7.2"; @@ -13,7 +13,7 @@ stdenv.mkDerivation rec { sha256 = "0swyysbyfmv068x8q1c5jqpwk5zb4xahg17aypx5rwb660f8fpbm"; }; - buildInputs = [ unzip ant jdk ]; + buildInputs = [ unzip ant jdk makeWrapper ]; unpackPhase = '' mkdir "${name}" @@ -25,16 +25,12 @@ stdenv.mkDerivation rec { buildPhase = "ant build"; installPhase = '' - mkdir -pv $out/lib/java - cp -v *.jar $out/lib/java + mkdir -pv $out/share/java + cp -v *.jar $out/share/java mkdir -pv $out/bin - cat > $out/bin/ecj <