about summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/apache-ant
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-09-24 14:49:15 +0000
committerLudovic Courtès <ludo@gnu.org>2009-09-24 14:49:15 +0000
commit18e946cb9d89b80bdd69fb1023134e7dee0d8606 (patch)
treee0003d706fd31b769dfd8d31882d2dea3b78768d /pkgs/development/tools/build-managers/apache-ant
parent3c021b4a97a7bf46cbe60ece10a4b685a499cbcf (diff)
downloadnixlib-18e946cb9d89b80bdd69fb1023134e7dee0d8606.tar
nixlib-18e946cb9d89b80bdd69fb1023134e7dee0d8606.tar.gz
nixlib-18e946cb9d89b80bdd69fb1023134e7dee0d8606.tar.bz2
nixlib-18e946cb9d89b80bdd69fb1023134e7dee0d8606.tar.lz
nixlib-18e946cb9d89b80bdd69fb1023134e7dee0d8606.tar.xz
nixlib-18e946cb9d89b80bdd69fb1023134e7dee0d8606.tar.zst
nixlib-18e946cb9d89b80bdd69fb1023134e7dee0d8606.zip
Add Apache Ant, built from source with GCJ.
svn path=/nixpkgs/trunk/; revision=17401
Diffstat (limited to 'pkgs/development/tools/build-managers/apache-ant')
-rw-r--r--pkgs/development/tools/build-managers/apache-ant/from-source.nix89
1 files changed, 89 insertions, 0 deletions
diff --git a/pkgs/development/tools/build-managers/apache-ant/from-source.nix b/pkgs/development/tools/build-managers/apache-ant/from-source.nix
new file mode 100644
index 000000000000..698066aaba26
--- /dev/null
+++ b/pkgs/development/tools/build-managers/apache-ant/from-source.nix
@@ -0,0 +1,89 @@
+{ stdenv, fetchurl, javac, jvm, junit }:
+
+let version = "1.7.1"; in
+
+/* TODO: Once we have Icedtea, use this Nix expression to build Ant with
+   Sun's javac.  */
+
+stdenv.mkDerivation {
+  name = "ant-gcj-${version}";
+
+  src = fetchurl {
+    url = "http://mirrors.linhub.com/apache/ant/source/apache-ant-${version}-src.tar.bz2";
+    sha256 = "19pvqvgkxgpgsqm4lvbki5sm0z84kxmykdqicvfad47gc1r9mi2d";
+  };
+
+  patches = [ ./use-gcj.patch ];
+
+  buildInputs = [ javac jvm junit ];
+
+  configurePhase = ''
+    mkdir -p "tool-aliases/bin"
+    cd "tool-aliases/bin"
+    cat > javac <<EOF
+#!/bin/sh
+opts="-C"
+echo 'running \`gcj '"\$opts \$@'..."
+exec "$(type -P gcj)" \$opts \$@
+EOF
+    chmod +x javac
+    ln -sv $(type -P gij) java
+    export PATH="$PWD:$PATH"
+
+    cd ../..
+    export JAVA_HOME="$PWD/tool-aliases"
+
+    # Make JUnit visible.
+    export CLASSPATH="$(find ${junit} -name \*.jar -printf "%p:")"
+  '';
+
+  # Note: We don't build the javadoc.
+  buildPhase = ''
+    ensureDir "$out"
+    ./build.sh -Dant.install="$out" install-lite
+  '';
+
+  installPhase = ''
+    # Actually, everything is already installed at this point, so we just
+    # rearrange a few things.
+    rm -v "$out/bin/"*.bat
+
+    ensureDir "$out/lib/java"
+    mv -v "$out/lib/"*.jar "$out/lib/java"
+    sed -i "$out/bin/ant" \
+        -e "s|^ANT_LIB=.*$|ANT_LIB=$out/lib/java|g ;
+            s|JAVACMD=java.*$|JAVACMD=$(type -P gij)|g ;
+            /^ant_exec_command/i export ANT_HOME=$out"
+  '';
+
+  meta = {
+    description = "Apache Ant, a Java-based build tool";
+
+    longDescription = ''
+      Apache Ant is a Java-based build tool.  In theory, it is kind of like
+      Make, but without Make's wrinkles.
+
+      Why another build tool when there is already make, gnumake, nmake, jam,
+      and others? Because all those tools have limitations that Ant's
+      original author couldn't live with when developing software across
+      multiple platforms.  Make-like tools are inherently shell-based -- they
+      evaluate a set of dependencies, then execute commands not unlike what
+      you would issue in a shell.  This means that you can easily extend
+      these tools by using or writing any program for the OS that you are
+      working on.  However, this also means that you limit yourself to the
+      OS, or at least the OS type such as Unix, that you are working on.
+
+      Ant is different.  Instead of a model where it is extended with
+      shell-based commands, Ant is extended using Java classes.  Instead of
+      writing shell commands, the configuration files are XML-based, calling
+      out a target tree where various tasks get executed.  Each task is run
+      by an object that implements a particular Task interface.
+    '';
+
+    homepage = http://ant.apache.org/;
+
+    license = "Apache-2.0";
+
+    maintainers = [ stdenv.lib.maintainers.ludo ];
+  };
+}