More notes in the TODO list.
[libguestfs.git] / configure.ac
index 0a0a450..68b716b 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.4])
 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,168 @@ 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).
+old_libs="$LIBS"
+AC_CHECK_LIB([ruby],[ruby_init])
+LIBS="$old_libs"
+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])
+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)
+
+AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
 
 dnl Run in subdirs.
 AC_CONFIG_SUBDIRS([daemon])
 
 dnl Run in subdirs.
 AC_CONFIG_SUBDIRS([daemon])
@@ -119,10 +311,15 @@ 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?
 AC_OUTPUT
 
 dnl WTF?