doc: Add guestfish 'lvcreate 1M' gotcha.
[libguestfs.git] / configure.ac
index cf0591d..7533ec0 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
 # libguestfs
-# Copyright (C) 2009 Red Hat Inc.
+# Copyright (C) 2009-2010 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@
 
 # 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], [66])
+m4_define([libguestfs_minor],   [5])
+m4_define([libguestfs_release], [0])
 # extra can be any string
 m4_define([libguestfs_extra],   [])
 
 # extra can be any string
 m4_define([libguestfs_extra],   [])
 
@@ -26,9 +26,10 @@ AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release[]libgu
 AC_CONFIG_AUX_DIR([build-aux])
 AM_INIT_AUTOMAKE([foreign])
 
 AC_CONFIG_AUX_DIR([build-aux])
 AM_INIT_AUTOMAKE([foreign])
 
-AC_CONFIG_MACRO_DIR([m4])
+m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
+AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
 
 
-AC_PROG_LIBTOOL
+AC_CONFIG_MACRO_DIR([m4])
 
 dnl Split up the version string.
 AC_DEFINE([PACKAGE_VERSION_MAJOR],[libguestfs_major],[Major version number])
 
 dnl Split up the version string.
 AC_DEFINE([PACKAGE_VERSION_MAJOR],[libguestfs_major],[Major version number])
@@ -36,27 +37,152 @@ 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
+
+AC_PROG_LIBTOOL
+
 dnl Check for basic C environment.
 AC_PROG_CC_STDC
 AC_PROG_INSTALL
 AC_PROG_CPP
 
 dnl Check for basic C environment.
 AC_PROG_CC_STDC
 AC_PROG_INSTALL
 AC_PROG_CPP
 
-gl_EARLY
-gl_INIT
+AC_ARG_ENABLE([gcc-warnings],
+  [AS_HELP_STRING([--enable-gcc-warnings],
+                  [turn on lots of GCC warnings (for developers)])],
+  [case $enableval in
+     yes|no) ;;
+     *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
+   esac
+   gl_gcc_warnings=$enableval],
+  [gl_gcc_warnings=no]
+)
+
+if test "$gl_gcc_warnings" = yes; then
+  gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
+  AC_SUBST([WERROR_CFLAGS])
+
+  nw=
+  # This, $nw, is the list of warnings we disable.
+  nw="$nw -Wdeclaration-after-statement" # too useful to forbid
+  nw="$nw -Waggregate-return"       # anachronistic
+  nw="$nw -Wc++-compat"             # We don't care about C++ compilers
+  nw="$nw -Wundef"                  # Warns on '#if GNULIB_FOO' etc in gnulib
+  nw="$nw -Wtraditional"            # Warns on #elif which we use often
+  nw="$nw -Wcast-qual"              # Too many warnings for now
+  nw="$nw -Wconversion"             # Too many warnings for now
+  nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
+  nw="$nw -Wsign-conversion"        # Too many warnings for now
+  nw="$nw -Wtraditional-conversion" # Too many warnings for now
+  nw="$nw -Wunreachable-code"       # Too many warnings for now
+  nw="$nw -Wpadded"                 # Our structs are not padded
+  nw="$nw -Wredundant-decls"        # openat.h declares e.g., mkdirat
+  nw="$nw -Wlogical-op"             # any use of fwrite provokes this
+  nw="$nw -Wvla"                    # two warnings in mount.c
+  # things I might fix soon:
+  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
+
+  gl_MANYWARN_ALL_GCC([ws])
+  gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
+  for w in $ws; do
+    gl_WARN_ADD([$w])
+  done
+  gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
+  gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
+  gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
+
+  # In spite of excluding -Wlogical-op above, it is enabled, as of
+  # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
+  gl_WARN_ADD([-Wno-logical-op])
+
+  gl_WARN_ADD([-fdiagnostics-show-option])
+
+  AC_SUBST([WARN_CFLAGS])
+
+  AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
+  AC_DEFINE([_FORTIFY_SOURCE], [2],
+    [enable compile-time and run-time bounds-checking, and some warnings])
+  AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
+fi
 
 AC_C_PROTOTYPES
 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
 
 AM_PROG_CC_C_O
 
 
 AC_C_PROTOTYPES
 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
 
 AM_PROG_CC_C_O
 
+dnl Work out how to specify the linker script to the linker.
+VERSION_SCRIPT_FLAGS=-Wl,--version-script=
+`/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
+    VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
+AC_SUBST(VERSION_SCRIPT_FLAGS)
+
 dnl Check support for 64 bit file offsets.
 AC_SYS_LARGEFILE
 
 dnl Check sizeof long.
 AC_CHECK_SIZEOF([long])
 
 dnl Check support for 64 bit file offsets.
 AC_SYS_LARGEFILE
 
 dnl Check sizeof long.
 AC_CHECK_SIZEOF([long])
 
+dnl Define a C symbol for the host CPU architecture.
+AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
+
 dnl Headers.
 dnl Headers.
-AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h])
+AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h endian.h byteswap.h])
+
+dnl Functions.
+AC_CHECK_FUNCS([posix_fallocate])
+
+dnl Build the daemon?
+AC_MSG_CHECKING([if we should build the daemon])
+AC_ARG_ENABLE([daemon],
+        [AS_HELP_STRING([--enable-daemon],
+          [enable building the daemon @<:@default=yes@:>@])],
+        [],
+        [enable_daemon=yes])
+AM_CONDITIONAL([ENABLE_DAEMON],[test "x$enable_daemon" = "xyes"])
+AC_MSG_RESULT([$enable_daemon])
+
+dnl Build the appliance?
+AC_MSG_CHECKING([if we should build the appliance])
+AC_ARG_ENABLE([appliance],
+        [AS_HELP_STRING([--enable-appliance],
+          [enable building the appliance @<:@default=yes@:>@])],
+        [],
+        [enable_appliance=yes])
+AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
+AC_MSG_RESULT([$enable_appliance])
 
 dnl Check for rpcgen and XDR library.  rpcgen is optional.
 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
 
 dnl Check for rpcgen and XDR library.  rpcgen is optional.
 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
@@ -73,10 +199,14 @@ AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
 test "x$POD2TEXT" = "xno" &&
      AC_MSG_ERROR([pod2text must be installed])
 
 test "x$POD2TEXT" = "xno" &&
      AC_MSG_ERROR([pod2text must be installed])
 
-dnl Check for mksquashfs.
-AC_PATH_PROGS([MKSQUASHFS],[mksquashfs],[no],
+dnl Check for mkisofs.
+AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
-test "x$MKSQUASHFS" = "xno" && AC_MSG_ERROR([mksquashfs must be installed])
+test "x$MKISOFS" = "xno" && AC_MSG_ERROR([mkisofs must be installed])
+
+dnl Check for optional xmllint.
+AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
+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.
@@ -91,51 +221,72 @@ 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.
-dnl http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg01042.html
+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.
 if test "x$vmchannel_test" != "xno"; then
 if test "x$vmchannel_test" != "xno"; then
-    AC_MSG_CHECKING([for "guestfwd" support in $QEMU])
-    if $QEMU --help | grep -sq guestfwd; then
+    AC_MSG_CHECKING([for guestfwd support in $QEMU])
+    if $QEMU -nographic --help | grep -sq guestfwd; then
         AC_MSG_RESULT([yes])
         AC_MSG_RESULT([yes])
+        vmchannel_guestfwd=guestfwd
     else
         AC_MSG_RESULT([no])
     else
         AC_MSG_RESULT([no])
-        AC_MSG_CHECKING([for "-net channel" support in $QEMU])
-        vmchannelout=`$QEMU -net channel /dev/zero 2>&1 ||:`
+        # 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])
         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])
         else
             AC_MSG_RESULT([no])
-            AC_MSG_FAILURE(
-[I did not find vmchannel support in $QEMU.
+            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
 
 
-vmchannel support is vital for libguestfs to operate.  You need a version
-of qemu >= 0.10, or the following patch backported to earlier versions:
+    if test "x$vmchannel_net_user" = "xno" -a "x$vmchannel_guestfwd" = "xno"; then
+        AC_MSG_FAILURE(
+[I did not find user mode network or vmchannel support in
+$QEMU.
 
 
-http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg01042.html
+Either user mode networking or vmchannel support is vital for
+libguestfs to operate.
+
+Please read the relevant section in the README file for more
+information about this.
 
 You can override this test by setting the environment variable
 
 You can override this test by setting the environment variable
-vmchannel_test=no  However if you don't have vmchannel support
+vmchannel_test=no  However if you don't have the right support
 in your qemu, then this just delays the pain.
 
 If I am using the wrong qemu or you want to compile qemu from source
 and install it in another location, then you should configure with
 the --with-qemu option.
 ])
 in your qemu, then this just delays the pain.
 
 If I am using the wrong qemu or you want to compile qemu from source
 and install it in another location, then you should configure with
 the --with-qemu option.
 ])
-        fi
     fi
 fi
 
 dnl Set drive interface used by the guestfs_add_drive{,_ro} calls
 dnl ('-drive ...,if=...' option to qemu).
 dnl
     fi
 fi
 
 dnl Set drive interface used by the guestfs_add_drive{,_ro} calls
 dnl ('-drive ...,if=...' option to qemu).
 dnl
-dnl NB. We will change the default in future to virtio, but at the
-dnl moment this causes a performance problem, RHBZ#509383.
+dnl If you encounter performance problems with virtio (RHBZ#509383)
+dnl then try '--with-drive-if=ide'.
 AC_ARG_WITH([drive-if],
         [AS_HELP_STRING([--with-drive-if],
 AC_ARG_WITH([drive-if],
         [AS_HELP_STRING([--with-drive-if],
-          [set default driver (ide|scsi|virtio) @<:@default=ide@:>@])],
+          [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
         [],
         [],
-        [with_drive_if=ide])
+        [with_drive_if=virtio])
 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
@@ -150,59 +301,64 @@ AC_ARG_WITH([net-if],
 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.
-AC_CHECK_PROG([FEBOOTSTRAP],
-        [febootstrap],[febootstrap],[no])
-if test "x$FEBOOTSTRAP" != "xno"; then
-  AC_CHECK_PROG([FEBOOTSTRAP_RUN],
-        [febootstrap-run],[febootstrap-run],[no])
-  test "x$FEBOOTSTRAP_RUN" = "xno" && \
-     AC_MSG_ERROR([febootstrap-run must be installed])
-  AC_CHECK_PROG([FEBOOTSTRAP_INSTALL],
-        [febootstrap-install],[febootstrap-install],[no])
-  test "x$FEBOOTSTRAP_INSTALL" = "xno" && \
-     AC_MSG_ERROR([febootstrap-install must be installed])
-  AC_CHECK_PROG([FEBOOTSTRAP_MINIMIZE],
-        [febootstrap-minimize],[febootstrap-minimize],[no])
-  test "x$FEBOOTSTRAP_MINIMIZE" = "xno" && \
-     AC_MSG_ERROR([febootstrap-minimize must be installed])
-  AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS],
-        [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no])
-  test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
-     AC_MSG_ERROR([febootstrap-to-initramfs 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).
-  AC_CHECK_PROG([FAKECHROOT],
-        [fakechroot],[fakechroot],[no])
-  test "x$FAKECHROOT" = "xno" && \
-    AC_MSG_ERROR([fakechroot must be installed])
-
-  AC_MSG_CHECKING([fakechroot version])
-  fakechroot_version=`$FAKECHROOT --version | awk '{print $3}'`
-  if test -z "$fakechroot_version"; then
-    AC_MSG_RESULT([failed])
-    AC_MSG_WARN([fakechroot --version command failed, proceeding anyway])
-  else
-    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 \
+if test "x$enable_appliance" = "xyes"; then
+    AC_CHECK_PROG([FEBOOTSTRAP],
+                  [febootstrap],[febootstrap],[no])
+    if test "x$FEBOOTSTRAP" != "xno"; then
+      AC_CHECK_PROG([FEBOOTSTRAP_RUN],
+                    [febootstrap-run],[febootstrap-run],[no])
+      test "x$FEBOOTSTRAP_RUN" = "xno" && \
+          AC_MSG_ERROR([febootstrap-run must be installed])
+      AC_CHECK_PROG([FEBOOTSTRAP_INSTALL],
+                    [febootstrap-install],[febootstrap-install],[no])
+      test "x$FEBOOTSTRAP_INSTALL" = "xno" && \
+          AC_MSG_ERROR([febootstrap-install must be installed])
+      AC_CHECK_PROG([FEBOOTSTRAP_MINIMIZE],
+                    [febootstrap-minimize],[febootstrap-minimize],[no])
+      test "x$FEBOOTSTRAP_MINIMIZE" = "xno" && \
+          AC_MSG_ERROR([febootstrap-minimize must be installed])
+      AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS],
+                    [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).
+      AC_CHECK_PROG([FAKECHROOT],
+                    [fakechroot],[fakechroot],[no])
+      test "x$FAKECHROOT" = "xno" && \
+         AC_MSG_ERROR([fakechroot must be installed])
+
+      AC_MSG_CHECKING([fakechroot version])
+      fakechroot_version=`$FAKECHROOT --version | awk '{print $3}'`
+      if test -z "$fakechroot_version"; then
+        AC_MSG_RESULT([failed])
+        AC_MSG_WARN([fakechroot --version command failed, proceeding anyway])
+      else
+        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
             \( "$fakechroot_major" -eq 2 -a "$fakechroot_minor" -lt 9 \); then
-        AC_MSG_ERROR([fakechroot version must be >= 2.9])
-    fi
-  fi
-  DIST="REDHAT"
-else
-  # check for debootstrap and debirf
-  AC_CHECK_PROG([DEBOOTSTRAP],
-        [debootstrap],[debootstrap],[no])
-  test "x$DEBOOTSTRAP" = "xno" && \
-        AC_MSG_ERROR([Either febootstrap or debootstrap must be installed])
-  AC_CHECK_PROG([DEBIRF],[debirf],[debirf],[no])
-  test "x$DEBIRF" = "xno" &&
-        AC_MSG_ERROR([debirf must be installed])
-  DIST="DEBIAN"
-  case "$host_cpu" in
+          AC_MSG_ERROR([fakechroot version must be >= 2.9])
+        fi
+      fi
+      DIST="REDHAT"
+    else
+      # check for debootstrap and debirf
+      AC_CHECK_PROG([DEBOOTSTRAP],
+                    [debootstrap],[debootstrap],[no])
+      test "x$DEBOOTSTRAP" = "xno" && \
+          AC_MSG_ERROR([Either febootstrap or debootstrap must be installed])
+      AC_CHECK_PROG([DEBIRF],[debirf],[debirf],[no])
+      test "x$DEBIRF" = "xno" &&
+          AC_MSG_ERROR([debirf must be installed])
+      DIST="DEBIAN"
+      case "$host_cpu" in
       *86)
           DEBIAN_KERNEL_ARCH=486
           ;;
       *86)
           DEBIAN_KERNEL_ARCH=486
           ;;
@@ -212,43 +368,40 @@ else
       *)
          DEBIAN_KERNEL_ARCH=$host_cpu
          ;;
       *)
          DEBIAN_KERNEL_ARCH=$host_cpu
          ;;
-   esac
-   AC_SUBST(DEBIAN_KERNEL_ARCH)
-fi
-AC_SUBST(DIST)
+      esac
+      AC_SUBST(DEBIAN_KERNEL_ARCH)
+    fi
+    AC_SUBST(DIST)
+
+    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-f12@:>@])],
+        [],
+        [with_updates=updates-released-f12])
+    UPDATES="$with_updates"
+    AC_SUBST(UPDATES)
 
 
+    dnl --with-mirror to specify a local Fedora mirror.
+    AC_ARG_WITH([mirror],
+        [AS_HELP_STRING([--with-mirror],
+          [set URI of a local Fedora mirror])],
+        [],
+        [with_mirror=])
+    MIRROR="$with_mirror"
+    AC_SUBST(MIRROR)
+fi
 
 dnl --with-repo to specify a Fedora repository.
 AC_ARG_WITH([repo],
         [AS_HELP_STRING([--with-repo],
 
 dnl --with-repo to specify a Fedora repository.
 AC_ARG_WITH([repo],
         [AS_HELP_STRING([--with-repo],
-          [set name of Fedora repository @<:@default=fedora-11@:>@])],
+          [set name of Fedora repository @<:@default=fedora-12@:>@])],
         [],
         [],
-        [with_repo=fedora-11])
+        [with_repo=fedora-12])
 REPO="$with_repo"
 AC_SUBST(REPO)
 AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
 
 REPO="$with_repo"
 AC_SUBST(REPO)
 AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
 
-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@:>@])],
-        [],
-        [with_updates=updates-released-f11])
-UPDATES="$with_updates"
-AC_SUBST(UPDATES)
-
-dnl Define a symbol for the host CPU architecture.
-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],
-          [set URI of a local Fedora mirror])],
-        [],
-        [with_mirror=])
-MIRROR="$with_mirror"
-AC_SUBST(MIRROR)
-
 dnl Build the supermin appliance?  Please see README file before
 dnl enabling this option.
 AC_ARG_ENABLE([supermin],
 dnl Build the supermin appliance?  Please see README file before
 dnl enabling this option.
 AC_ARG_ENABLE([supermin],
@@ -258,39 +411,13 @@ AC_ARG_ENABLE([supermin],
         [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],
+        [AS_HELP_STRING([--enable-packet-dump],
+          [enable packet dumps in verbose mode @<:@default=no@:>@])],
+        [AC_DEFINE([ENABLE_PACKET_DUMP],[1],[Enable packet dumps in verbose mode.])],
+        [])
 
 dnl Readline.
 AC_ARG_WITH([readline],
 
 dnl Readline.
 AC_ARG_WITH([readline],
@@ -310,17 +437,57 @@ AS_IF([test "x$with_readline" != xno],
          AC_MSG_FAILURE(
              [--with-readline was given, but test for readline failed])
          fi
          AC_MSG_FAILURE(
              [--with-readline was given, but test for readline failed])
          fi
-        ], -lncurses)])
+        ], -lncurses)
+     old_LIBS="$LIBS"
+     LIBS="$LIBS $LIBREADLINE"
+     AC_CHECK_FUNCS([append_history completion_matches rl_completion_matches])
+     LIBS="$old_LIBS"
+    ])
 
 dnl For i18n.
 AM_GNU_GETTEXT([external])
 
 dnl For i18n.
 AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.14])
+AM_GNU_GETTEXT_VERSION([0.17])
+
+dnl hivex library (highly recommended).
+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"])
+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"])
 
 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 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.
+OCAML_PKG_xml_light=no
+if test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"; then
+    AC_CHECK_OCAML_PKG([xml-light])
+fi
+AM_CONDITIONAL([HAVE_XML_LIGHT],[test "x$OCAML_PKG_xml_light" != "xno"])
+
+dnl Build the OCaml viewer example.  This has a lengthy list of
+dnl dependencies and we don't attempt to detect them all.  Read
+dnl the top of ocaml/examples/viewer.ml before enabling this.
+AC_ARG_ENABLE([ocaml-viewer],
+        [AS_HELP_STRING([--enable-ocaml-viewer],
+          [enable OCaml viewer (see ocaml/examples) @<:@default=no@:>@])],
+        [],
+        [enable_ocaml_viewer=no])
+AM_CONDITIONAL([BUILD_OCAML_VIEWER],[test "x$enable_ocaml_viewer" = "xyes"])
+
 dnl Check for Perl (optional, for Perl bindings).
 dnl XXX This isn't quite right, we should check for Perl devel library.
 AC_CHECK_PROG([PERL],[perl],[perl],[no])
 dnl Check for Perl (optional, for Perl bindings).
 dnl XXX This isn't quite right, we should check for Perl devel library.
 AC_CHECK_PROG([PERL],[perl],[perl],[no])
@@ -328,7 +495,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])
@@ -546,9 +713,9 @@ AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
 AM_CONDITIONAL([HAVE_HASKELL],
     [test "x$GHC" != "xno"])
 
 AM_CONDITIONAL([HAVE_HASKELL],
     [test "x$GHC" != "xno"])
 
-dnl Check for Perl modules needed by virt-df, inspector, V2V etc.
+dnl Check for Perl modules needed by virt-df, inspector, etc.
 missing_perl_modules=no
 missing_perl_modules=no
-for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer Locale::TextDomain; do
+for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer Locale::TextDomain Win::Hivex Win::Hivex::Regedit; 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])
@@ -558,16 +725,12 @@ for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer Locale::Tex
     fi
 done
 if test "x$missing_perl_modules" = "xyes"; then
     fi
 done
 if test "x$missing_perl_modules" = "xyes"; then
-    AC_MSG_WARN([some Perl modules required to compile virt-cat, virt-df, virt-inspector and virt-v2v are missing])
+    AC_MSG_WARN([some Perl modules required to compile virt-inspector and the other virt-* tools are missing])
 fi
 
 fi
 
-AM_CONDITIONAL([HAVE_CAT],
-    [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
-AM_CONDITIONAL([HAVE_DF],
-    [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
 AM_CONDITIONAL([HAVE_INSPECTOR],
     [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
 AM_CONDITIONAL([HAVE_INSPECTOR],
     [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
-AM_CONDITIONAL([HAVE_V2V],
+AM_CONDITIONAL([HAVE_TOOLS],
     [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
 
 dnl Library versioning.
     [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
 
 dnl Library versioning.
@@ -575,21 +738,15 @@ MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
 AC_SUBST(MAX_PROC_NR)
 
 dnl Run in subdirs.
 AC_SUBST(MAX_PROC_NR)
 
 dnl Run in subdirs.
-AC_CONFIG_SUBDIRS([daemon])
+if test "x$enable_daemon" = "xyes"; then
+    AC_CONFIG_SUBDIRS([daemon])
+fi
 
 dnl Produce output files.
 AC_CONFIG_HEADERS([config.h])
 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
 
 dnl Produce output files.
 AC_CONFIG_HEADERS([config.h])
 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
-AC_CONFIG_FILES([appliance/make.sh],
-                [chmod +x appliance/make.sh])
 AC_CONFIG_FILES([appliance/update.sh],
                 [chmod +x appliance/update.sh])
 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([appliance/libguestfs-supermin-helper],
-                [chmod +x appliance/libguestfs-supermin-helper])
 AC_CONFIG_FILES([Makefile
                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
                  appliance/Makefile
 AC_CONFIG_FILES([Makefile
                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
                  appliance/Makefile
@@ -604,13 +761,12 @@ AC_CONFIG_FILES([Makefile
                  ruby/Makefile ruby/Rakefile
                  java/Makefile
                  haskell/Makefile
                  ruby/Makefile ruby/Rakefile
                  java/Makefile
                  haskell/Makefile
-                 cat/Makefile
-                 df/Makefile
                  inspector/Makefile
                  inspector/Makefile
-                 v2v/Makefile
+                 tools/Makefile
                  libguestfs.pc
                  gnulib/lib/Makefile
                  gnulib/tests/Makefile
                  libguestfs.pc
                  gnulib/lib/Makefile
                  gnulib/tests/Makefile
+                 fuse/Makefile
                  ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
                  ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
@@ -622,6 +778,8 @@ echo "Thank you for downloading $PACKAGE_STRING"
 echo
 echo "This is how we have configured the optional components for you today:"
 echo
 echo
 echo "This is how we have configured the optional components for you today:"
 echo
+echo    "Daemon .............................. $enable_daemon"
+echo    "Appliance ........................... $enable_appliance"
 echo    "QEMU ................................ $QEMU"
 echo -n "OCaml bindings ...................... "
 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo    "QEMU ................................ $QEMU"
 echo -n "OCaml bindings ...................... "
 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
@@ -634,16 +792,13 @@ 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 -n "Haskell bindings .................... "
 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" = "x"; then echo "yes"; else echo "no"; fi
-echo -n "virt-cat ............................ "
-if test "x$HAVE_CAT" = "x"; then echo "yes"; else echo "no"; fi
-echo -n "virt-df ............................. "
-if test "x$HAVE_DF" = "x"; then echo "yes"; else echo "no"; fi
+if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "virt-inspector ...................... "
 echo -n "virt-inspector ...................... "
-if test "x$HAVE_INSPECTOR" = "x"; then echo "yes"; else echo "no"; fi
-echo -n "virt-v2v ............................ "
-if test "x$HAVE_V2V" = "x"; then echo "yes"; else echo "no"; fi
+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 "supermin appliance .................. $enable_supermin"
+echo "FUSE filesystem ..................... $HAVE_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."