about summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/apache-ant
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-01-09 11:14:36 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-01-09 11:14:36 +0100
commit4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef (patch)
tree570a63d5d5ac6187401d7fc905e9e50a20b07039 /pkgs/development/tools/build-managers/apache-ant
parentc32d0180e4fda3c69e9a50dfabb45dac004788f9 (diff)
downloadnixlib-4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef.tar
nixlib-4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef.tar.gz
nixlib-4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef.tar.bz2
nixlib-4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef.tar.lz
nixlib-4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef.tar.xz
nixlib-4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef.tar.zst
nixlib-4e29062fbcecf2ac3e7c146cd3b458c1e0eb57ef.zip
ant: Support the OpenJRE (without OpenJDK) and the GNU JVM
For instance, a package can now say:

  buildInputs = [ ant jre ecj ];

which would cause the Eclipse compiler to be used with the OpenJRE.
Similarly:

  buildInputs = [ ant gcj ];

uses the GNU JVM with the GNU Java compiler.
Diffstat (limited to 'pkgs/development/tools/build-managers/apache-ant')
-rw-r--r--pkgs/development/tools/build-managers/apache-ant/default.nix33
1 files changed, 28 insertions, 5 deletions
diff --git a/pkgs/development/tools/build-managers/apache-ant/default.nix b/pkgs/development/tools/build-managers/apache-ant/default.nix
index c3b00227c69c..97483e2a016d 100644
--- a/pkgs/development/tools/build-managers/apache-ant/default.nix
+++ b/pkgs/development/tools/build-managers/apache-ant/default.nix
@@ -36,17 +36,40 @@ stdenv.mkDerivation {
 
       ANT_HOME=$out/lib/ant
 
+      # Find the JDK by looking for javac.  As a fall-back, find the
+      # JRE by looking for java.  The latter allows just the JRE to be
+      # used with (say) ECJ as the compiler.  Finally, allow the GNU
+      # JVM.
       if [ -z "\$JAVA_HOME" ]; then
-          if ! JAVACCMD="\$(type -p javac)"; then
-              echo "\$0: cannot find the Java SDK" >&2
+          for i in javac java gij; do
+              if p="\$(type -p \$i)"; then
+                  export JAVA_HOME="\$(dirname \$(dirname \$(readlink -f \$p)))"
+                  break
+              fi
+          done
+          if [ -z "\$JAVA_HOME" ]; then
+              echo "\$0: cannot find the JDK or JRE" >&2
               exit 1
           fi
-          export JAVA_HOME="\$(dirname \$(dirname \$(readlink -f \$JAVACCMD)))"
       fi
 
-      LOCALCLASSPATH="\$ANT_HOME/lib/ant-launcher.jar:\$JAVA_HOME/lib/tools.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
+      if [ -z \$NIX_JVM ]; then
+          if [ -e \$JAVA_HOME/bin/java ]; then
+              NIX_JVM=\$JAVA_HOME/bin/java
+          elif [ -e \$JAVA_HOME/bin/gij ]; then
+              NIX_JVM=\$JAVA_HOME/bin/gij
+          else
+              NIX_JVM=java
+          fi
+      fi
+
+      LOCALCLASSPATH="\$ANT_HOME/lib/ant-launcher.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
+
+      if [ -e \$JAVA_HOME/lib/tools.jar ]; then
+          LOCALCLASSPATH="\$JAVA_HOME/lib/tools.jar\''${LOCALCLASSPATH:+:}\$LOCALCLASSPATH"
+      fi
 
-      exec "\$JAVA_HOME/bin/java" \$NIX_ANT_OPTS \$ANT_OPTS -classpath "\$LOCALCLASSPATH" \
+      exec \$NIX_JVM \$NIX_ANT_OPTS \$ANT_OPTS -classpath "\$LOCALCLASSPATH" \
           -Dant.home=\$ANT_HOME -Dant.library.dir="\$ANT_LIB" \
           org.apache.tools.ant.launch.Launcher \$NIX_ANT_ARGS \$ANT_ARGS \
           -cp "\$CLASSPATH" "\$@"