build: Add ./configure --disable-ocaml option.
[libguestfs.git] / configure.ac
index b5b2026..f0d6ead 100644 (file)
 
 # major/minor/release must be numbers
 m4_define([libguestfs_major],   [1])
 
 # major/minor/release must be numbers
 m4_define([libguestfs_major],   [1])
-m4_define([libguestfs_minor],   [0])
-m4_define([libguestfs_release], [88])
+m4_define([libguestfs_minor],   [7])
+m4_define([libguestfs_release], [2])
 # extra can be any string
 m4_define([libguestfs_extra],   [])
 
 # extra can be any string
 m4_define([libguestfs_extra],   [])
 
-AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release[]libguestfs_extra)
+AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release)
 AC_CONFIG_AUX_DIR([build-aux])
 AM_INIT_AUTOMAKE([foreign])
 
 AC_CONFIG_AUX_DIR([build-aux])
 AM_INIT_AUTOMAKE([foreign])
 
@@ -37,6 +37,33 @@ AC_DEFINE([PACKAGE_VERSION_MINOR],[libguestfs_minor],[Minor version number])
 AC_DEFINE([PACKAGE_VERSION_RELEASE],[libguestfs_release],[Release number])
 AC_DEFINE([PACKAGE_VERSION_EXTRA],["libguestfs_extra"],[Extra version string])
 
 AC_DEFINE([PACKAGE_VERSION_RELEASE],[libguestfs_release],[Release number])
 AC_DEFINE([PACKAGE_VERSION_EXTRA],["libguestfs_extra"],[Extra version string])
 
+dnl Stable or unstable version?
+AC_MSG_CHECKING([if this is a stable or unstable branch of libguestfs])
+AS_IF([test "$((libguestfs_minor % 2))" -eq 0 ],[
+            AC_MSG_RESULT([stable])
+       ],[
+            AC_MSG_RESULT([unstable])
+            AC_MSG_NOTICE([
+***
+This is a development version of libguestfs. Some APIs may be unstable
+until they appear in a stable release of libguestfs (at which point
+the C API and ABI is guaranteed to remain stable forever).  For
+more information about stable and development branches of libguestfs
+please see the section "LIBGUESTFS VERSION NUMBERS" in guestfs(3).
+***])
+       ])
+
+dnl Die if the user tries to configure as root, see:
+dnl https://www.redhat.com/archives/libguestfs/2010-April/msg00098.html
+AC_MSG_CHECKING([if you are trying to configure as root])
+AS_IF([test "`id -u`" = 0 ],[
+            AC_MSG_RESULT([yes])
+            AC_MSG_FAILURE([Don't run './configure' or 'make' as root.])
+      ],[
+            AC_MSG_RESULT([no])
+      ])
+
+dnl Early gnulib initialization.
 gl_EARLY
 gl_INIT
 
 gl_EARLY
 gl_INIT
 
@@ -83,10 +110,11 @@ if test "$gl_gcc_warnings" = yes; then
   nw="$nw -Wmissing-format-attribute" # daemon.h's asprintf_nowarn
   nw="$nw -Winline"                 # daemon.h's asprintf_nowarn
   nw="$nw -Wshadow"                 # numerous, plus we're not unanimous
   nw="$nw -Wmissing-format-attribute" # daemon.h's asprintf_nowarn
   nw="$nw -Winline"                 # daemon.h's asprintf_nowarn
   nw="$nw -Wshadow"                 # numerous, plus we're not unanimous
-  # ?? -Wstrict-overflow
   nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization
                                     # was not possible, safe to ignore
   nw="$nw -Wpacked"                 # Allow attribute((packed)) on structs
   nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization
                                     # was not possible, safe to ignore
   nw="$nw -Wpacked"                 # Allow attribute((packed)) on structs
+  nw="$nw -Wlong-long"              # Allow long long since it's required
+                                    # by Python, Ruby and xstrtoll.
 
   gl_MANYWARN_ALL_GCC([ws])
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
 
   gl_MANYWARN_ALL_GCC([ws])
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
@@ -101,6 +129,9 @@ if test "$gl_gcc_warnings" = yes; then
   # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
   gl_WARN_ADD([-Wno-logical-op])
 
   # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
   gl_WARN_ADD([-Wno-logical-op])
 
+  # Work around warning in src/inspect.c.  This seems to be a bug in gcc 4.5.1.
+  gl_WARN_ADD([-Wno-strict-overflow])
+
   gl_WARN_ADD([-fdiagnostics-show-option])
 
   AC_SUBST([WARN_CFLAGS])
   gl_WARN_ADD([-fdiagnostics-show-option])
 
   AC_SUBST([WARN_CFLAGS])
@@ -157,6 +188,15 @@ AC_ARG_ENABLE([appliance],
 AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
 AC_MSG_RESULT([$enable_appliance])
 
 AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
 AC_MSG_RESULT([$enable_appliance])
 
+dnl Check for PCRE.
+AC_CHECK_LIB([pcre],[pcre_compile],
+        [AC_SUBST([LIBPCRE], ["-lpcre"])],
+        [AC_MSG_FAILURE(
+             [Perl Compatible Regular Expressions library (PCRE) is required])])
+AC_CHECK_HEADER([pcre.h],[],
+        [AC_MSG_FAILURE(
+             [Perl Compatible Regular Expressions library (PCRE) header file pcre.h is required])])
+
 dnl Check for rpcgen and XDR library.  rpcgen is optional.
 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
 dnl Check for rpcgen and XDR library.  rpcgen is optional.
 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
@@ -164,6 +204,16 @@ AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
         ])
 
         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
         ])
 
+dnl Check for cpio which isn't in the default Pardus install amazingly.
+AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
+test "x$CPIO" = "xno" &&
+     AC_MSG_ERROR([cpio must be installed])
+
+dnl Check for gperf.
+AC_CHECK_PROG([GPERF],[gperf],[gperf],[no])
+test "x$GPERF" = "xno" &&
+     AC_MSG_ERROR([gperf must be installed])
+
 dnl Check for pod2man and pod2text.
 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
 test "x$POD2MAN" = "xno" &&
 dnl Check for pod2man and pod2text.
 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
 test "x$POD2MAN" = "xno" &&
@@ -183,7 +233,7 @@ AM_CONDITIONAL([HAVE_XMLLINT],[test "x$XMLLINT" != "xno"])
 
 dnl Check for QEMU for running binaries on this $host_cpu, fall
 dnl back to basic 'qemu'.  Allow the user to override it.
 
 dnl Check for QEMU for running binaries on this $host_cpu, fall
 dnl back to basic 'qemu'.  Allow the user to override it.
-default_qemu="qemu-kvm qemu-system-$host_cpu qemu"
+default_qemu="qemu-kvm kvm qemu-system-$host_cpu qemu"
 AC_ARG_WITH([qemu],
         [AS_HELP_STRING([--with-qemu],
           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
 AC_ARG_WITH([qemu],
         [AS_HELP_STRING([--with-qemu],
           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
@@ -194,50 +244,24 @@ AC_PATH_PROGS([QEMU],[$with_qemu],[no],
 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
 
 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
 
-dnl Check that the chosen qemu has vmchannel support or we can
-dnl fallback to null vmchannel (still using SLIRP).  See the
-dnl discussion in the README file.
+dnl Check that the chosen qemu has virtio-serial support.
 if test "x$vmchannel_test" != "xno"; then
 if test "x$vmchannel_test" != "xno"; then
-    AC_MSG_CHECKING([for guestfwd support in $QEMU])
-    if $QEMU -nographic --help | grep -sq guestfwd; then
+    AC_MSG_CHECKING([for virtio-serial support in $QEMU])
+    if $QEMU -nographic -device \? 2>&1 | grep -sq virtio-serial; then
         AC_MSG_RESULT([yes])
         vmchannel_guestfwd=guestfwd
     else
         AC_MSG_RESULT([no])
         AC_MSG_RESULT([yes])
         vmchannel_guestfwd=guestfwd
     else
         AC_MSG_RESULT([no])
-        # Note that this test must be conditional on the previous
-        # test failing.  This is because recent qemu will throw
-        # up an SDL window and hang if we try to run this test.
-        AC_MSG_CHECKING([for "-net channel" (old guestfwd) support in $QEMU])
-        vmchannelout=`$QEMU -nographic -net channel /dev/zero 2>&1 ||:`
-        echo "vmchannel test command output: $vmchannelout" >&AS_MESSAGE_LOG_FD
-        if echo "$vmchannelout" | grep -sq "vmchannel wrong port number" ; then
-            AC_MSG_RESULT([yes])
-            vmchannel_guestfwd=net_channel
-        else
-            AC_MSG_RESULT([no])
-            vmchannel_guestfwd=no
-        fi
-    fi
-
-    AC_MSG_CHECKING([for "-net user" (user mode network) support in $QEMU])
-    if $QEMU -nographic --help | grep -sq -- "-net user"; then
-        AC_MSG_RESULT([yes])
-        vmchannel_net_user=yes
-    else
-        AC_MSG_RESULT([no])
-        vmchannel_net_user=no
-    fi
-
-    if test "x$vmchannel_net_user" = "xno" -a "x$vmchannel_guestfwd" = "xno"; then
         AC_MSG_FAILURE(
         AC_MSG_FAILURE(
-[I did not find user mode network or vmchannel support in
+[I did not find virtio-serial support in
 $QEMU.
 
 $QEMU.
 
-Either user mode networking or vmchannel support is vital for
-libguestfs to operate.
+virtio-serial support in qemu or KVM is essential for libguestfs
+to operate.
 
 
-Please read the relevant section in the README file for more
-information about this.
+Usually this means that you have to install a newer version of qemu
+and/or KVM.  Please read the relevant section in the README file for
+more information about this.
 
 You can override this test by setting the environment variable
 vmchannel_test=no  However if you don't have the right support
 
 You can override this test by setting the environment variable
 vmchannel_test=no  However if you don't have the right support
@@ -250,7 +274,7 @@ the --with-qemu option.
     fi
 fi
 
     fi
 fi
 
-dnl Set drive interface used by the guestfs_add_drive{,_ro} calls
+dnl Set default drive interface used by the guestfs_add_drive_opts call
 dnl ('-drive ...,if=...' option to qemu).
 dnl
 dnl If you encounter performance problems with virtio (RHBZ#509383)
 dnl ('-drive ...,if=...' option to qemu).
 dnl
 dnl If you encounter performance problems with virtio (RHBZ#509383)
@@ -263,14 +287,14 @@ AC_ARG_WITH([drive-if],
 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
 
 dnl Set interface used by the network.  Normally you should
 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
 
 dnl Set interface used by the network.  Normally you should
-dnl leave this at the default (virtio) but you can use the
+dnl leave this at the default (virtio-net-pci) but you can use the
 dnl alternative (ne2k_pci) because of bugs in virtio networking
 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
 AC_ARG_WITH([net-if],
         [AS_HELP_STRING([--with-net-if],
 dnl alternative (ne2k_pci) because of bugs in virtio networking
 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
 AC_ARG_WITH([net-if],
         [AS_HELP_STRING([--with-net-if],
-          [set default net driver (virtio|ne2k_pci) @<:@default=virtio@:>@])],
+          [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
         [],
         [],
-        [with_net_if=virtio])
+        [with_net_if=virtio-net-pci])
 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
 
 dnl Check for febootstrap etc.
 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
 
 dnl Check for febootstrap etc.
@@ -294,6 +318,10 @@ if test "x$enable_appliance" = "xyes"; then
                     [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no])
       test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
           AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
                     [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no])
       test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
           AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
+      AC_CHECK_PROG([FEBOOTSTRAP_TO_SUPERMIN],
+                    [febootstrap-to-supermin],[febootstrap-to-supermin],[no])
+      test "x$FEBOOTSTRAP_TO_SUPERMIN" = "xno" && \
+          AC_MSG_ERROR([febootstrap-to-supermin must be installed])
 
       dnl Check we have fakechroot >= 2.9 (it's an indirect requirement
       dnl of febootstrap, but old versions will fail with yum).
 
       dnl Check we have fakechroot >= 2.9 (it's an indirect requirement
       dnl of febootstrap, but old versions will fail with yum).
@@ -311,8 +339,8 @@ if test "x$enable_appliance" = "xyes"; then
         AC_MSG_RESULT([$fakechroot_version])
         fakechroot_major=`echo "$fakechroot_version" | awk -F. '{print $1}'`
         fakechroot_minor=`echo "$fakechroot_version" | awk -F. '{print $2}'`
         AC_MSG_RESULT([$fakechroot_version])
         fakechroot_major=`echo "$fakechroot_version" | awk -F. '{print $1}'`
         fakechroot_minor=`echo "$fakechroot_version" | awk -F. '{print $2}'`
-        if test "$fakechroot_major" -lt 2 -o \
-            \( "$fakechroot_major" -eq 2 -a "$fakechroot_minor" -lt 9 \); then
+        if test "$fakechroot_major" -lt 2 || \
+          ( test "$fakechroot_major" -eq 2 && test "$fakechroot_minor" -lt 9 ); then
           AC_MSG_ERROR([fakechroot version must be >= 2.9])
         fi
       fi
           AC_MSG_ERROR([fakechroot version must be >= 2.9])
         fi
       fi
@@ -345,9 +373,9 @@ if test "x$enable_appliance" = "xyes"; then
     dnl --with-updates to specify a Fedora updates repository.
     AC_ARG_WITH([updates],
         [AS_HELP_STRING([--with-updates],
     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-f11@:>@])],
+          [set name of Fedora updates repository @<:@default=updates-released-f12@:>@])],
         [],
         [],
-        [with_updates=updates-released-f11])
+        [with_updates=updates-released-f12])
     UPDATES="$with_updates"
     AC_SUBST(UPDATES)
 
     UPDATES="$with_updates"
     AC_SUBST(UPDATES)
 
@@ -361,59 +389,25 @@ if test "x$enable_appliance" = "xyes"; then
     AC_SUBST(MIRROR)
 fi
 
     AC_SUBST(MIRROR)
 fi
 
-dnl --with-repo to specify a Fedora repository.
+dnl --with-repo to specify a repository.
 AC_ARG_WITH([repo],
         [AS_HELP_STRING([--with-repo],
 AC_ARG_WITH([repo],
         [AS_HELP_STRING([--with-repo],
-          [set name of Fedora repository @<:@default=fedora-11@:>@])],
+          [set name of Fedora repository @<:@default=fedora-13@:>@])],
         [],
         [],
-        [with_repo=fedora-11])
+        [with_repo=fedora-13])
 REPO="$with_repo"
 AC_SUBST(REPO)
 REPO="$with_repo"
 AC_SUBST(REPO)
-AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
+AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of software repository.])
 
 dnl Build the supermin appliance?  Please see README file before
 dnl enabling this option.
 AC_ARG_ENABLE([supermin],
         [AS_HELP_STRING([--enable-supermin],
           [enable supermin appliance (see README) @<:@default=no@:>@])],
 
 dnl Build the supermin appliance?  Please see README file before
 dnl enabling this option.
 AC_ARG_ENABLE([supermin],
         [AS_HELP_STRING([--enable-supermin],
           [enable supermin appliance (see README) @<:@default=no@:>@])],
-        [],
+        [AC_DEFINE([ENABLE_SUPERMIN],[1],[Supermin appliance enabled.])],
         [enable_supermin=no])
 AM_CONDITIONAL([SUPERMIN],[test "x$enable_supermin" = "xyes"])
 
         [enable_supermin=no])
 AM_CONDITIONAL([SUPERMIN],[test "x$enable_supermin" = "xyes"])
 
-if test "x$enable_supermin" = "xyes"; then
-    dnl Check febootstrap-to-initramfs accepts the --files option
-    dnl (febootstrap >= 2.2).
-    AC_MSG_CHECKING([for --files support in $FEBOOTSTRAP_TO_INITRAMFS])
-    out=`$FEBOOTSTRAP_TO_INITRAMFS 2>&1 ||:`
-    echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD
-    if ! echo "$out" | grep -sq -e --files ; then
-        AC_MSG_RESULT([no])
-        AC_MSG_FAILURE(
-[febootstrap-to-initramfs does not support the --files option.
-
-To build the supermin appliance, you need to upgrade to the latest
-version of febootstrap.
-])
-    fi
-    AC_MSG_RESULT([yes])
-
-    dnl Check febootstrap-to-initramfs accepts the --nocompress option
-    dnl (febootstrap >= 2.3).
-    AC_MSG_CHECKING([for --nocompress support in $FEBOOTSTRAP_TO_INITRAMFS])
-    out=`$FEBOOTSTRAP_TO_INITRAMFS 2>&1 ||:`
-    echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD
-    if ! echo "$out" | grep -sq -e --nocompress ; then
-        AC_MSG_RESULT([no])
-        AC_MSG_FAILURE(
-[febootstrap-to-initramfs does not support the --nocompress option.
-
-To build the supermin appliance, you need to upgrade to the latest
-version of febootstrap.
-])
-    fi
-    AC_MSG_RESULT([yes])
-fi
-
 dnl Enable packet dumps when in verbose mode.  This generates lots
 dnl of debug info, only useful for people debugging the RPC mechanism.
 AC_ARG_ENABLE([packet-dump],
 dnl Enable packet dumps when in verbose mode.  This generates lots
 dnl of debug info, only useful for people debugging the RPC mechanism.
 AC_ARG_ENABLE([packet-dump],
@@ -451,34 +445,71 @@ dnl For i18n.
 AM_GNU_GETTEXT([external])
 AM_GNU_GETTEXT_VERSION([0.17])
 
 AM_GNU_GETTEXT([external])
 AM_GNU_GETTEXT_VERSION([0.17])
 
-dnl hivex library (highly recommended).
+dnl libmagic (required)
+AC_CHECK_LIB([magic],[magic_file],[
+        AC_SUBST([LIBMAGIC], ["-lmagic"])
+    ],[
+        AC_MSG_FAILURE([libmagic is required])
+    ])
+AC_CHECK_HEADER([magic.h],[],[
+        AC_MSG_FAILURE([magic.h header file is required])
+    ])
+
+dnl libvirt (required)
+PKG_CHECK_MODULES([LIBVIRT], [libvirt])
+AC_SUBST([LIBVIRT_CFLAGS])
+AC_SUBST([LIBVIRT_LIBS])
+
+dnl libxml2 (required)
+PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
+AC_SUBST([LIBXML2_CFLAGS])
+AC_SUBST([LIBXML2_LIBS])
+
+dnl Augeas (required)
+PKG_CHECK_MODULES([AUGEAS], [augeas])
+AC_SUBST([AUGEAS_CFLAGS])
+AC_SUBST([AUGEAS_LIBS])
+
+dnl hivex library (required)
 dnl This used to be a part of libguestfs, but was spun off into its
 dnl own separate upstream project in libguestfs 1.0.85.
 dnl This used to be a part of libguestfs, but was spun off into its
 dnl own separate upstream project in libguestfs 1.0.85.
-HAVE_HIVEX=yes
-PKG_CHECK_MODULES([HIVEX], [hivex],,[
-        HAVE_HIVEX=no
-        AC_MSG_WARN([Hivex library and headers are missing, so optional Windows Registry tools won't be built])])
-AM_CONDITIONAL([HAVE_HIVEX],[test "x$HAVE_HIVEX" = "xyes"])
+PKG_CHECK_MODULES([HIVEX], [hivex])
 AC_SUBST([HIVEX_CFLAGS])
 AC_SUBST([HIVEX_LIBS])
 
 dnl FUSE is optional to build the FUSE module.
 AC_SUBST([HIVEX_CFLAGS])
 AC_SUBST([HIVEX_LIBS])
 
 dnl FUSE is optional to build the FUSE module.
-HAVE_FUSE=yes
-PKG_CHECK_MODULES([FUSE],[fuse],,[
-        HAVE_FUSE=no
-        AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])
-AM_CONDITIONAL([HAVE_FUSE],[test "x$HAVE_FUSE" = "xyes"])
+AC_ARG_ENABLE([fuse],
+        AS_HELP_STRING([--disable-fuse], [Disable FUSE (guestmount) support]),
+        [],
+        [enable_fuse=yes])
+AS_IF([test "x$enable_fuse" != "xno"],
+        [PKG_CHECK_MODULES([FUSE],[fuse],,[
+                enable_fuse=no
+                AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])])
+AM_CONDITIONAL([HAVE_FUSE],[test "x$enable_fuse" != "xno"])
 
 dnl Check for OCaml (optional, for OCaml bindings).
 
 dnl Check for OCaml (optional, for OCaml bindings).
-AC_PROG_OCAML
-AC_PROG_FINDLIB
-AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
-
-dnl Optional xml-light for running the generator.
+OCAMLC=no
+OCAMLFIND=no
 OCAML_PKG_xml_light=no
 OCAML_PKG_xml_light=no
-if test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"; then
-    AC_CHECK_OCAML_PKG([xml-light])
-fi
+AC_ARG_ENABLE([ocaml],
+        AS_HELP_STRING([--disable-ocaml], [Disable OCaml language bindings]),
+        [],
+        [enable_ocaml=yes])
+AS_IF([test "x$enable_ocaml" != "xno"],
+        [dnl OCAMLC and OCAMLFIND have to be unset first, otherwise
+         dnl AC_CHECK_TOOL (inside AC_PROG_OCAML) will not look.
+         OCAMLC=
+         OCAMLFIND=
+         AC_PROG_OCAML
+         AC_PROG_FINDLIB
+
+         dnl Optional xml-light for running the generator.
+         if test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"; then
+             AC_CHECK_OCAML_PKG([xml-light])
+         fi])
+AM_CONDITIONAL([HAVE_OCAML],
+               [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
 AM_CONDITIONAL([HAVE_XML_LIGHT],[test "x$OCAML_PKG_xml_light" != "xno"])
 
 dnl Build the OCaml viewer example.  This has a lengthy list of
 AM_CONDITIONAL([HAVE_XML_LIGHT],[test "x$OCAML_PKG_xml_light" != "xno"])
 
 dnl Build the OCaml viewer example.  This has a lengthy list of
@@ -498,7 +529,7 @@ AC_CHECK_PROG([PERL],[perl],[perl],[no])
 dnl Check for Perl modules that must be present to compile and
 dnl test the Perl bindings.
 missing_perl_modules=no
 dnl Check for Perl modules that must be present to compile and
 dnl test the Perl bindings.
 missing_perl_modules=no
-for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker; do
+for pm in Test::More ExtUtils::MakeMaker; do
     AC_MSG_CHECKING([for $pm])
     if ! perl -M$pm -e1 >/dev/null 2>&1; then
         AC_MSG_RESULT([no])
     AC_MSG_CHECKING([for $pm])
     if ! perl -M$pm -e1 >/dev/null 2>&1; then
         AC_MSG_RESULT([no])
@@ -512,7 +543,7 @@ if test "x$missing_perl_modules" = "xyes"; then
 fi
 
 AM_CONDITIONAL([HAVE_PERL],
 fi
 
 AM_CONDITIONAL([HAVE_PERL],
-    [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+    [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
 
 dnl Check for Python (optional, for Python bindings).
 AC_CHECK_PROG([PYTHON],[python],[python],[no])
 
 dnl Check for Python (optional, for Python bindings).
 AC_CHECK_PROG([PYTHON],[python],[python],[no])
@@ -553,6 +584,11 @@ if test "x$PYTHON" != "xno"; then
         fi
         AC_MSG_RESULT([not found])
     done
         fi
         AC_MSG_RESULT([not found])
     done
+
+    old_LIBS="$LIBS"
+    LIBS="$LIBS -lpython$PYTHON_VERSION"
+    AC_CHECK_FUNCS([PyCapsule_New])
+    LIBS="$old_LIBS"
 fi
 
 AC_SUBST(PYTHON_PREFIX)
 fi
 
 AC_SUBST(PYTHON_PREFIX)
@@ -561,14 +597,14 @@ AC_SUBST(PYTHON_INCLUDEDIR)
 AC_SUBST(PYTHON_SITE_PACKAGES)
 
 AM_CONDITIONAL([HAVE_PYTHON],
 AC_SUBST(PYTHON_SITE_PACKAGES)
 
 AM_CONDITIONAL([HAVE_PYTHON],
-    [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
+    [test "x$PYTHON_INCLUDEDIR" != "x" && test "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],
 
 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"])
+    [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
 
 dnl Check for Java.
 AC_ARG_WITH(java_home,
 
 dnl Check for Java.
 AC_ARG_WITH(java_home,
@@ -578,7 +614,7 @@ AC_ARG_WITH(java_home,
     [with_java_home=check])
 
 if test "x$with_java_home" != "xno"; then
     [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"
+    if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
     then
         # Reject unsafe characters in $JAVA_HOME
         jh_lf='
     then
         # Reject unsafe characters in $JAVA_HOME
         jh_lf='
@@ -600,7 +636,7 @@ if test "x$with_java_home" != "xno"; then
             /usr/lib/jvm/java \
             /usr/lib/jvm/java-6-openjdk
         do
             /usr/lib/jvm/java \
             /usr/lib/jvm/java-6-openjdk
         do
-            if test -d $d -a -f $d/bin/java; then
+            if test -d $d && test -f $d/bin/java; then
                 JAVA_HOME=$d
                 break
             fi
                 JAVA_HOME=$d
                 break
             fi
@@ -732,9 +768,18 @@ if test "x$missing_perl_modules" = "xyes"; then
 fi
 
 AM_CONDITIONAL([HAVE_INSPECTOR],
 fi
 
 AM_CONDITIONAL([HAVE_INSPECTOR],
-    [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+    [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
 AM_CONDITIONAL([HAVE_TOOLS],
 AM_CONDITIONAL([HAVE_TOOLS],
-    [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+    [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
+
+dnl po4a for translating man pages and POD files (optional).
+AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
+AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
+
+dnl PHP
+AC_CHECK_PROG([PHP],[php],[php],[no])
+AC_CHECK_PROG([PHPIZE],[phpize],[phpize],[no])
+AM_CONDITIONAL([HAVE_PHP], [test "x$PHP" != "xno" && test "x$PHPIZE" != "xno"])
 
 dnl Library versioning.
 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
 
 dnl Library versioning.
 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
@@ -750,11 +795,8 @@ AC_CONFIG_HEADERS([config.h])
 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
 AC_CONFIG_FILES([appliance/update.sh],
                 [chmod +x appliance/update.sh])
 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
 AC_CONFIG_FILES([appliance/update.sh],
                 [chmod +x appliance/update.sh])
-AC_CONFIG_FILES([appliance/supermin-split.sh],
-                [chmod +x appliance/supermin-split.sh])
-AC_CONFIG_FILES([appliance/supermin-make.sh],
-                [chmod +x appliance/supermin-make.sh])
 AC_CONFIG_FILES([Makefile
 AC_CONFIG_FILES([Makefile
+                 generator/Makefile
                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
                  appliance/Makefile
                  appliance/debian/debirf.conf
                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
                  appliance/Makefile
                  appliance/debian/debirf.conf
@@ -774,6 +816,10 @@ AC_CONFIG_FILES([Makefile
                  gnulib/lib/Makefile
                  gnulib/tests/Makefile
                  fuse/Makefile
                  gnulib/lib/Makefile
                  gnulib/tests/Makefile
                  fuse/Makefile
+                 po-docs/Makefile
+                 po-docs/ja/Makefile
+                 php/Makefile
+                 csharp/Makefile
                  ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
                  ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
@@ -800,12 +846,14 @@ echo -n "Java bindings ....................... "
 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "Haskell bindings .................... "
 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "Haskell bindings .................... "
 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo -n "PHP bindings ........................ "
+if test "x$HAVE_PHP_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "virt-inspector ...................... "
 if test "x$HAVE_INSPECTOR_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "virt-* tools ........................ "
 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo "supermin appliance .................. $enable_supermin"
 echo -n "virt-inspector ...................... "
 if test "x$HAVE_INSPECTOR_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "virt-* tools ........................ "
 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo "supermin appliance .................. $enable_supermin"
-echo "FUSE filesystem ..................... $HAVE_FUSE"
+echo "FUSE filesystem ..................... $enable_fuse"
 echo
 echo "If any optional component is configured 'no' when you expected 'yes'"
 echo "then you should check the preceeding messages."
 echo
 echo "If any optional component is configured 'no' when you expected 'yes'"
 echo "then you should check the preceeding messages."