diff --git a/aclocal/ax_java.m4 b/aclocal/ax_java.m4
deleted file mode 100644
index 70ec2c3..0000000
--- a/aclocal/ax_java.m4
+++ /dev/null
@@ -1,254 +0,0 @@
-dnl
-dnl The following commonly available Java macros converted to AX prefix 
-dnl in support of proper thrift/autoconf extension naming rules
-dnl
-
-dnl autoconf M4 macros for Java programs
-dnl Copyright Stephane Bortzmeyer <bortzmeyer@pasteur.fr>, 1999
-dnl Released under the GPL licence
-dnl
-dnl A sample configure.in is at the end of this file. Each macro is
-dnl documented by comments before its definition. Here is a summary:
-dnl
-dnl AX_PROG_JAVAC: finds a Java compiler
-dnl AX_PROG_JAVA: finds a Java virtual machine
-dnl AX_CHECK_CLASS: finds if we have the given class (beware of CLASSPATH!)
-dnl AX_CHECK_RQRD_CLASS: finds if we have the given class and stops otherwise
-
-
-dnl AX_PROG_JAVAC tests an existing Java compiler. It uses the environment
-dnl variable JAVAC then tests in sequence various common Java compilers. For
-dnl political reasons, it starts with the free ones.
-dnl If you want to force a specific compiler:
-dnl  - at the configure.in level, set JAVAC=yourcompiler before calling 
-dnl    AX_PROG_JAVAC
-dnl  - at the configure level, setenv JAVAC
-dnl You can use the JAVAC variable in your Makefile.in, with @JAVAC@.
-dnl
-dnl *Warning*: its success or failure can depend on a proper setting of the
-dnl CLASSPATH env. variable.
-dnl
-dnl TODO: allow to exclude compilers (rationale: most Java programs cannot compile
-dnl with some compilers like guavac).
-
-AC_DEFUN([AX_PROG_JAVAC],[
-test -z "$JAVAC" && AC_CHECK_PROGS(JAVAC, "gcj -C" guavac jikes javac)
-test -z "$JAVAC" && AC_MSG_ERROR([no acceptable Java compiler found in \$PATH])
-AX_PROG_JAVAC_WORKS
-])
-
-
-dnl AX_PROG_JAVA tests an existing Java virtual machine. It uses the 
-dnl environment variable JAVA then tests in sequence various common Java 
-dnl virtual machines. For political reasons, it starts with the free ones.
-dnl You *must* call [AX_PROG_JAVAC] before.
-dnl If you want to force a specific VM:
-dnl  - at the configure.in level, set JAVA=yourvm before calling AX_PROG_JAVA
-dnl  - at the configure level, setenv JAVA
-dnl You can use the JAVA variable in your Makefile.in, with @JAVA@.
-dnl
-dnl *Warning*: its success or failure can depend on a proper setting of the
-dnl CLASSPATH env. variable.
-dnl
-dnl TODO: allow to exclude virtual machines (rationale: most Java programs 
-dnl cannot run with some VM like kaffe).
-dnl
-dnl TODO: allow to call this macro without [AX_PROG_JAVAC] before, using a
-dnl class included uuencoded as an here document and uudecoded on the fly
-dnl (check uudecode first) (rationale: a Java package can have no sources).
-
-AC_DEFUN([AX_PROG_JAVA],[
-test -z "$JAVA" && AC_CHECK_PROGS(JAVA, kaffe java)
-test -z "$JAVA" && AC_MSG_ERROR([no acceptable Java virtual machine found in \$PATH])
-AX_PROG_JAVA_WORKS
-])
-
-
-dnl AX_CHECK_CLASS tests the existence of a given Java class, either in
-dnl a jar or in a '.class' file. 
-dnl
-dnl *Warning*: its success or failure can depend on a proper setting of the
-dnl CLASSPATH env. variable.
-
-AC_DEFUN([AX_CHECK_CLASS],[
-CLASS=$1
-echo -n "Testing if we have Java class $CLASS... "
-JAVA_TEST=Test.java
-CLASS=`echo $CLASS|sed 's/\./_/g'`
-cat << \EOF > $JAVA_TEST
-import $1;
-public class Test {
-}
-EOF
-if AC_TRY_COMMAND($JAVAC $JAVA_TEST) >/dev/null 2>&1; then
-  eval HAVE_$CLASS=yes
-  eval HAVE_LAST_CLASS=yes
-  echo "yes"
-else
-  eval HAVE_$CLASS=no
-  eval HAVE_LAST_CLASS=no
-  echo "no (check config.log, CLASSPATH may be wrong?)"
-fi
-rm -f $JAVA_TEST
-])
-
-
-dnl AX_CHECK_RQRD_CLASS tests the existence of a given Java class, either in
-dnl a jar or in a '.class' file and fails if it doesn't exist.
-dnl
-dnl *Warning*: its success or failure can depend on a proper setting of the
-dnl CLASSPATH env. variable.
-
-AC_DEFUN([AX_CHECK_RQRD_CLASS],[
-CLASS=`echo $1|sed 's/\./_/g'`
-AX_CHECK_CLASS($1)
-if test "$HAVE_LAST_CLASS" = "no"; then
-	AC_MSG_ERROR([Required class $1 missing, exiting.])
-fi
-])
-
-
-dnl AX_CHECK_CLASSPATH just displays the CLASSPATH, for the edification
-dnl of the user.
-
-AC_DEFUN([AX_CHECK_CLASSPATH],[
-if test -z "$CLASSPATH"; then
-	echo "You have no CLASSPATH, I hope it is good"
-else
-	echo "You have CLASSPATH $CLASSPATH, hope it is correct"
-fi
-])
-
-
-dnl Internal use
-
-AC_DEFUN([AX_PROG_JAVA_WORKS],[
-echo -n "Testing if $JAVA works... "
-JAVA_TEST=Test.java
-CLASS_TEST=Test.class
-TEST=Test
-changequote(, )dnl
-cat << \EOF > $JAVA_TEST
-public class Test {
-	    public static void main (String args[]) {}
-}
-EOF
-changequote([, ])dnl
-if AC_TRY_COMMAND($JAVAC $JAVA_TEST) >/dev/null 2>&1; then
-  if AC_TRY_COMMAND($JAVA $TEST) >/dev/null 2>&1; then
-    echo "yes"
-  else
-    echo "no"
-    AC_MSG_ERROR(The Java VM $JAVA failed (see config.log, check the CLASSPATH?))
-  fi
-else
-  AC_MSG_ERROR(The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?))
-fi
-rm -f $JAVA_TEST $CLASS_TEST
-]
-)
-
-
-dnl Internal use
-
-AC_DEFUN([AX_PROG_JAVAC_WORKS],[
-echo -n "Testing if $JAVAC works... "
-JAVA_TEST=Test.java
-CLASS_TEST=Test.class
-cat << \EOF > $JAVA_TEST
-public class Test {
-}
-EOF
-if AC_TRY_COMMAND($JAVAC $JAVA_TEST) >/dev/null 2>&1; then
-  echo "yes"
-else
-  echo "no"
-  AC_MSG_ERROR([The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)])
-fi
-rm -f $JAVA_TEST $CLASS_TEST
-])
-
-
-
-
-dnl TODO: add a AX_CHECK_JAVA_SOURCE where the user can give a complete
-dnl Java source to compile or to compile and run.
-
-
-
-dnl dnl This is a sample configure.in
-dnl dnl Process this file with autoconf to produce a configure script.
-dnl dnl Drop the [] around the macro names
-dnl
-dnl [
-dnl
-dnl AC_INIT(UnTag.java)
-dnl
-dnl dnl Checks for programs.
-dnl AX_CHECK_CLASSPATH
-dnl AX_PROG_JAVAC
-dnl AX_PROG_JAVA
-dnl
-dnl dnl Checks for classes
-dnl AX_CHECK_RQRD_CLASS(org.xml.sax.Parser)
-dnl AX_CHECK_RQRD_CLASS(com.jclark.xml.sax.Driver)
-dnl
-dnl AC_OUTPUT(Makefile)
-dnl
-dnl ]
-
-
-dnl @synopsis AX_CHECK_JUNIT
-dnl
-dnl AX_CHECK_JUNIT tests the availability of the Junit testing
-dnl framework, and set some variables for conditional compilation
-dnl of the test suite by automake.
-dnl
-dnl If available, JUNIT is set to a command launching the text
-dnl based user interface of Junit, @JAVA_JUNIT@ is set to $JAVA_JUNIT
-dnl and @TESTS_JUNIT@ is set to $TESTS_JUNIT, otherwise they are set
-dnl to empty values.
-dnl
-dnl You can use these variables in your Makefile.am file like this :
-dnl
-dnl  # Some of the following classes are built only if junit is available
-dnl  JAVA_JUNIT  = Class1Test.java Class2Test.java AllJunitTests.java
-dnl
-dnl  noinst_JAVA = Example1.java Example2.java @JAVA_JUNIT@
-dnl
-dnl  EXTRA_JAVA  = $(JAVA_JUNIT)
-dnl
-dnl  TESTS_JUNIT = AllJunitTests
-dnl
-dnl  TESTS       = StandaloneTest1 StandaloneTest2 @TESTS_JUNIT@
-dnl
-dnl  EXTRA_TESTS = $(TESTS_JUNIT)
-dnl
-dnl  AllJunitTests :
-dnl     echo "#! /bin/sh" > $@
-dnl     echo "exec @JUNIT@ my.package.name.AllJunitTests" >> $@
-dnl     chmod +x $@
-dnl
-dnl @author Luc Maisonobe
-dnl @version $Id: ac_check_junit.ac,v 12.0 2004/11/17 03:43:38 bostic Exp $
-dnl
-AC_DEFUN([AX_CHECK_JUNIT],[
-AC_CACHE_VAL(ax_cv_prog_JUNIT,[
-AX_CHECK_CLASS(junit.textui.TestRunner)
-if test x"`eval 'echo $ac_cv_class_junit_textui_TestRunner'`" != xno ; then
-  ax_cv_prog_JUNIT='$(CLASSPATH_ENV) $(JAVA) $(JAVAFLAGS) junit.textui.TestRunner'
-fi])
-AC_MSG_CHECKING([for junit])
-if test x"`eval 'echo $ax_cv_prog_JUNIT'`" != x ; then
-  JUNIT="$ax_cv_prog_JUNIT"
-  JAVA_JUNIT='$(JAVA_JUNIT)'
-  TESTS_JUNIT='$(TESTS_JUNIT)'
-else
-  JUNIT=
-  JAVA_JUNIT=
-  TESTS_JUNIT=
-fi
-AC_MSG_RESULT($JAVA_JUNIT)
-AC_SUBST(JUNIT)
-AC_SUBST(JAVA_JUNIT)
-AC_SUBST(TESTS_JUNIT)])
diff --git a/aclocal/ax_javac_and_java.m4 b/aclocal/ax_javac_and_java.m4
new file mode 100644
index 0000000..da41fbd
--- /dev/null
+++ b/aclocal/ax_javac_and_java.m4
@@ -0,0 +1,85 @@
+dnl @synopsis AX_JAVAC_AND_JAVA
+dnl
+dnl Test for the presence of a JDK.
+dnl
+dnl If "JAVA" is defined in the environment, that will be the only
+dnl java command tested.  Otherwise, a hard-coded list will be used.
+dnl Similarly for "JAVAC".
+dnl
+dnl This macro does not currenly support testing for a particular
+dnl Java version, the presence of a particular class, testing for
+dnl only one of "java" and "javac", or compiling or running
+dnl user-provided Java code.
+dnl
+dnl After AX_JAVAC_AND_JAVA runs, the shell variables "success" and
+dnl "ax_javac_and_java" are set to "yes" or "no", and "JAVAC" and
+dnl "JAVA" are set to the appropriate commands.
+dnl
+dnl @category Java
+dnl @author David Reiss <dreiss@facebook.com>
+dnl @version 2009-02-09
+dnl @license AllPermissive
+dnl
+dnl Copyright (C) 2009 David Reiss
+dnl Copying and distribution of this file, with or without modification,
+dnl are permitted in any medium without royalty provided the copyright
+dnl notice and this notice are preserved.
+
+
+AC_DEFUN([AX_JAVAC_AND_JAVA],
+         [
+
+          dnl Hard-coded default commands to test.
+          JAVAC_PROGS="javac,jikes,gcj -C"
+          JAVA_PROGS="java,kaffe"
+
+          dnl Allow the user to specify an alternative.
+          if test -n "$JAVAC" ; then
+            JAVAC_PROGS="$JAVAC"
+          fi
+          if test -n "$JAVA" ; then
+            JAVA_PROGS="$JAVA"
+          fi
+
+          AC_MSG_CHECKING(for javac and java)
+
+          echo "public class configtest_ax_javac_and_java { public static void main(String args@<:@@:>@) { } }" > configtest_ax_javac_and_java.java
+          success=no
+          oIFS="$IFS"
+
+          IFS=","
+          for JAVAC in $JAVAC_PROGS ; do
+            IFS="$oIFS"
+
+            echo "Running \"$JAVAC configtest_ax_javac_and_java.java\"" >&AS_MESSAGE_LOG_FD
+            if $JAVAC configtest_ax_javac_and_java.java >&AS_MESSAGE_LOG_FD 2>&1 ; then
+
+              IFS=","
+              for JAVA in $JAVA_PROGS ; do
+                IFS="$oIFS"
+
+                echo "Running \"$JAVA configtest_ax_javac_and_java\"" >&AS_MESSAGE_LOG_FD
+                if $JAVA configtest_ax_javac_and_java >&AS_MESSAGE_LOG_FD 2>&1 ; then
+                  success=yes
+                  break 2
+                fi
+
+              done
+
+            fi
+
+          done
+
+          rm -f configtest_ax_javac_and_java.java configtest_ax_javac_and_java.class
+
+          if test "$success" != "yes" ; then
+            AC_MSG_RESULT(no)
+            JAVAC=""
+            JAVA=""
+          else
+            AC_MSG_RESULT(yes)
+          fi
+
+          ax_javac_and_java="$success"
+
+          ])
