Fixes for Java.
[libguestfs.git] / configure.ac
index 0a0a450..b139877 100644 (file)
@@ -15,7 +15,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-AC_INIT([libguestfs],[0.5])
+AC_INIT([libguestfs],[1.0.5])
 AM_INIT_AUTOMAKE
 
 AC_CONFIG_MACRO_DIR([m4])
 AM_INIT_AUTOMAKE
 
 AC_CONFIG_MACRO_DIR([m4])
@@ -30,7 +30,7 @@ AC_PROG_CPP
 AC_C_PROTOTYPES
 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
 
 AC_C_PROTOTYPES
 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
 
-AC_PROG_CC_C_O
+AM_PROG_CC_C_O
 
 dnl Check support for 64 bit file offsets.
 AC_SYS_LARGEFILE
 
 dnl Check support for 64 bit file offsets.
 AC_SYS_LARGEFILE
@@ -90,6 +90,18 @@ AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
 
 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
 
 
 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
 
+dnl --with-updates to specify a Fedora updates repository.
+AC_ARG_WITH([updates],
+       [AS_HELP_STRING([--with-updates],
+         [set name of Fedora updates repository @<:@default=updates-released-f10@:>@])],
+       [],
+       [with_updates=updates-released-f10])
+UPDATES="$with_updates"
+AC_SUBST(UPDATES)
+AC_DEFINE_UNQUOTED([UPDATES],["$UPDATES"],[Name of Fedora updates repository.])
+
+AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
+
 dnl --with-mirror to specify a local Fedora mirror.
 AC_ARG_WITH([mirror],
        [AS_HELP_STRING([--with-mirror],
 dnl --with-mirror to specify a local Fedora mirror.
 AC_ARG_WITH([mirror],
        [AS_HELP_STRING([--with-mirror],
@@ -99,9 +111,30 @@ AC_ARG_WITH([mirror],
 MIRROR="$with_mirror"
 AC_SUBST(MIRROR)
 
 MIRROR="$with_mirror"
 AC_SUBST(MIRROR)
 
+dnl Readline.
+AC_ARG_WITH([readline],
+    [AS_HELP_STRING([--with-readline],
+        [support fancy command line editing @<:@default=check@:>@])],
+    [],
+    [with_readline=check])
+
+LIBREADLINE=
+AS_IF([test "x$with_readline" != xno],
+    [AC_CHECK_LIB([readline], [main],
+        [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+         AC_DEFINE([HAVE_LIBREADLINE], [1],
+                   [Define if you have libreadline])
+        ],
+        [if test "x$with_readline" != xcheck; then
+         AC_MSG_FAILURE(
+             [--with-readline was given, but test for readline failed])
+         fi
+        ], -lncurses)])
+
 dnl Check for OCaml (optional, for OCaml bindings).
 AC_PROG_OCAML
 dnl Check for OCaml (optional, for OCaml bindings).
 AC_PROG_OCAML
-AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno"])
+AC_PROG_FINDLIB
+AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
 
 dnl Check for Perl (optional, for Perl bindings).
 dnl XXX This isn't quite right, we should check for devel libraries.
 
 dnl Check for Perl (optional, for Perl bindings).
 dnl XXX This isn't quite right, we should check for devel libraries.
@@ -109,9 +142,180 @@ AC_CHECK_PROG([PERL],[perl],[perl],[no])
 AM_CONDITIONAL([HAVE_PERL],[test "x$PERL" != "xno"])
 
 dnl Check for Python (optional, for Python bindings).
 AM_CONDITIONAL([HAVE_PERL],[test "x$PERL" != "xno"])
 
 dnl Check for Python (optional, for Python bindings).
-dnl XXX This isn't quite right, we should check for devel libraries.
 AC_CHECK_PROG([PYTHON],[python],[python],[no])
 AC_CHECK_PROG([PYTHON],[python],[python],[no])
-AM_CONDITIONAL([HAVE_PYTHON],[test "x$PYTHON" != "xno"])
+
+PYTHON_PREFIX=
+PYTHON_VERSION=
+PYTHON_INCLUDEDIR=
+PYTHON_SITE_PACKAGES=
+
+if test "x$PYTHON" != "xno"; then
+    PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
+    PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
+    for d in \
+        $PYTHON_PREFIX/include/python$PYTHON_VERSION \
+        /usr/include/python$PYTHON_VERSION \
+        /usr/local/include/python$PYTHON_VERSION
+    do
+        AC_MSG_CHECKING([Python.h in $d])
+        if test -r "$d/Python.h"; then
+           AC_MSG_RESULT([found])
+           PYTHON_INCLUDEDIR=$d
+           break
+       fi
+       AC_MSG_RESULT([not found])
+    done
+    for d in \
+        $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
+        $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
+        /usr/lib64/python$PYTHON_VERSION/site-packages \
+        /usr/lib/python$PYTHON_VERSION/site-packages \
+        /usr/local/lib/python$PYTHON_VERSION/site-packages
+    do
+        AC_MSG_CHECKING([for $d])
+        if test -d "$d"; then
+           AC_MSG_RESULT([found])
+           PYTHON_SITE_PACKAGES=$d
+           break
+       fi
+       AC_MSG_RESULT([not found])
+    done
+fi
+
+AC_SUBST(PYTHON_PREFIX)
+AC_SUBST(PYTHON_VERSION)
+AC_SUBST(PYTHON_INCLUDEDIR)
+AC_SUBST(PYTHON_SITE_PACKAGES)
+
+AM_CONDITIONAL([HAVE_PYTHON],
+    [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
+
+dnl Check for Ruby and rake (optional, for Ruby bindings).
+AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
+AC_CHECK_PROG([RAKE],[rake],[rake],[no])
+
+AM_CONDITIONAL([HAVE_RUBY],
+    [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
+
+dnl Check for Java.
+AC_ARG_WITH(java_home,
+    [AS_HELP_STRING([--with-java-home],
+        [specify path to JDK directory @<:@default=check@:>@])],
+    [],
+    [with_java_home=check])
+
+if test "x$with_java_home" != "xno"; then
+    if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
+    then
+        if test -d "$with_java_home"; then
+           JAVA_HOME="$with_java_home"
+       else
+            AC_MSG_FAILURE([$with_java_home is not a directory])
+       fi
+    fi
+    if test "x$JAVA_HOME" = "x"; then
+        JAVA_HOME=/usr/lib/jvm/java
+    fi
+    AC_MSG_CHECKING(for JDK in $JAVA_HOME)
+    if test ! -x "$JAVA_HOME/bin/java"; then
+        AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary])
+    else
+        JAVA="$JAVA_HOME/bin/java"
+    fi
+    if test ! -x "$JAVA_HOME/bin/javac"; then
+        AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
+    else
+        JAVAC="$JAVA_HOME/bin/javac"
+    fi
+    if test ! -x "$JAVA_HOME/bin/javah"; then
+        AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
+    else
+        JAVAH="$JAVA_HOME/bin/javah"
+    fi
+    if test ! -x "$JAVA_HOME/bin/javadoc"; then
+        AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
+    else
+        JAVADOC="$JAVA_HOME/bin/javadoc"
+    fi
+    if test ! -x "$JAVA_HOME/bin/jar"; then
+        AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
+    else
+        JAR="$JAVA_HOME/bin/jar"
+    fi
+    java_version=`$JAVA -version 2>&1 | grep "java version"`
+    AC_MSG_RESULT(found $java_version in $JAVA_HOME)
+
+    dnl Find jni.h.
+    AC_MSG_CHECKING([for jni.h])
+    if test -f "$JAVA_HOME/include/jni.h"; then
+        JNI_CFLAGS="-I$JAVA_HOME/include"
+    else
+    if test "`find $JAVA_HOME -name jni.h`" != ""; then
+        head=`find $JAVA_HOME -name jni.h | tail -1`
+       dir=`dirname $head`
+       JNI_CFLAGS="-I$dir"
+    else
+       AC_MSG_FAILURE([missing jni.h header file])
+    fi
+    fi
+    AC_MSG_RESULT([$JNI_CFLAGS])
+
+    dnl Find jni_md.h.
+    AC_MSG_CHECKING([for jni_md.h])
+    case "$build_os" in
+    *linux*) system="linux" ;;
+    *SunOS*) system="solaris" ;;
+    *cygwin*) system="win32" ;;
+    *) system="$build_os" ;;
+    esac
+    if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
+        JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
+    else
+    if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
+        head=`find $JAVA_HOME -name jni_md.h | tail -1`
+       dir=`dirname $head`
+       JNI_CFLAGS="$JNI_CFLAGS -I$dir"
+    else
+       AC_MSG_FAILURE([missing jni_md.h header file])
+    fi
+    fi
+    AC_MSG_RESULT([$JNI_CFLAGS])
+
+    dnl Need extra version flag?
+    AC_MSG_CHECKING([extra javac flags])
+    JAVAC_FLAGS=
+    javac_version=`$JAVAC -version 2>&1`
+    case "$javac_version" in
+    *Eclipse*)
+       JAVAC_FLAGS="-source 1.5" ;;
+    esac
+    AC_MSG_RESULT([$JAVAC_FLAGS])
+
+    dnl Where to install jarfiles.
+    dnl XXX How to make it configurable?
+    JAR_INSTALL_DIR=\${prefix}/share/java
+    JNI_INSTALL_DIR=\${libdir}
+
+    dnl JNI version.
+    jni_major_version=`echo $VERSION | awk -F. '{print $1}'`
+    jni_minor_version=`echo $VERSION | awk -F. '{print $2}'`
+    jni_micro_version=`echo $VERSION | awk -F. '{print $3}'`
+    JNI_VERSION_INFO=`expr $jni_major_version + $jni_minor_version`:$jni_micro_version:$jni_minor_version
+fi
+
+AC_SUBST(JAVA_HOME)
+AC_SUBST(JAVA)
+AC_SUBST(JAVAC)
+AC_SUBST(JAVAH)
+AC_SUBST(JAVADOC)
+AC_SUBST(JAR)
+AC_SUBST(JNI_CFLAGS)
+AC_SUBST(JAVAC_FLAGS)
+AC_SUBST(JAR_INSTALL_DIR)
+AC_SUBST(JNI_INSTALL_DIR)
+AC_SUBST(JNI_VERSION_INFO)
+
+AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
 
 dnl Run in subdirs.
 AC_CONFIG_SUBDIRS([daemon])
 
 dnl Run in subdirs.
 AC_CONFIG_SUBDIRS([daemon])
@@ -119,11 +323,45 @@ AC_CONFIG_SUBDIRS([daemon])
 dnl Produce output files.
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_FILES([Makefile src/Makefile fish/Makefile examples/Makefile
 dnl Produce output files.
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_FILES([Makefile src/Makefile fish/Makefile examples/Makefile
-                images/Makefile ocaml/Makefile perl/Makefile
+                images/Makefile
+                ocaml/Makefile ocaml/examples/Makefile
+                perl/Makefile
                 python/Makefile
                 python/Makefile
+                ruby/Makefile ruby/Rakefile
+                java/Makefile
                 make-initramfs.sh update-initramfs.sh
                 make-initramfs.sh update-initramfs.sh
-                libguestfs.spec])
+                libguestfs.spec
+                ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
 dnl WTF?
 chmod +x make-initramfs.sh update-initramfs.sh
 AC_OUTPUT
 
 dnl WTF?
 chmod +x make-initramfs.sh update-initramfs.sh
+
+dnl Produce summary.
+echo
+echo
+echo "------------------------------------------------------------"
+echo "Thank you for downloading $PACKAGE_STRING"
+echo
+echo "This is how we have configured the optional components for you today:"
+echo
+echo -n "OCaml bindings ...................... "
+if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo -n "Perl bindings ....................... "
+if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo -n "Python bindings ..................... "
+if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo -n "Ruby bindings ....................... "
+if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo -n "Java bindings ....................... "
+if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo
+echo "If any optional component is configured 'no' when you expected 'yes'"
+echo "then you should check the preceeding messages."
+echo
+echo "Please report bugs back to the fedora-virt mailing list:"
+echo "http://www.redhat.com/mailman/listinfo/fedora-virt"
+echo
+echo "Next you should type 'make' to build the package,"
+echo "then 'make check' to run the tests."
+echo "------------------------------------------------------------"