daemon: Don't use files with fixed names in /tmp (thanks Steve Kemp).
[libguestfs.git] / configure.ac
index 94995f1..db8f7a9 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
 # libguestfs
-# Copyright (C) 2009-2010 Red Hat Inc.
+# Copyright (C) 2009-2011 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],   [7])
-m4_define([libguestfs_release], [19])
+m4_define([libguestfs_minor],   [8])
+m4_define([libguestfs_release], [14])
 # extra can be any string
 m4_define([libguestfs_extra],   [])
 
 # extra can be any string
 m4_define([libguestfs_extra],   [])
 
@@ -53,16 +53,6 @@ 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
 dnl Early gnulib initialization.
 gl_EARLY
 gl_INIT
@@ -168,7 +158,7 @@ dnl Headers.
 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_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])
+AC_CHECK_FUNCS([futimens posix_fallocate])
 
 dnl Build the daemon?
 AC_MSG_CHECKING([if we should build the daemon])
 
 dnl Build the daemon?
 AC_MSG_CHECKING([if we should build the daemon])
@@ -197,32 +187,35 @@ if test "x$enable_appliance" = "xyes"; then
     test "x$FEBOOTSTRAP" = "xno" &&
         AC_MSG_ERROR([febootstrap must be installed])
     dnl febootstrap 2.x did not support the --version parameter
     test "x$FEBOOTSTRAP" = "xno" &&
         AC_MSG_ERROR([febootstrap must be installed])
     dnl febootstrap 2.x did not support the --version parameter
-    $FEBOOTSTRAP --version >/dev/null 2>&1 ||
+    $FEBOOTSTRAP --version >&AS_MESSAGE_LOG_FD 2>&1 ||
         AC_MSG_ERROR([febootstrap >= 3.0 must be installed, your version is too old])
 
         AC_MSG_ERROR([febootstrap >= 3.0 must be installed, your version is too old])
 
-    dnl Build from local package files, used when building with no network
-    dnl access, ie. under Koji.
-    AC_MSG_CHECKING([if we should build the appliance from local packages])
-    AC_ARG_WITH([local-package-directory],
-        [AS_HELP_STRING([--with-local-package-directory],
-          [build from local packages in dir @<:@default=no@:>@])],
-        [local_package_directory=$withval],
-        [local_package_directory=no])
-    AC_MSG_RESULT([$local_package_directory])
-    PACKAGE_DIRECTORY=
-    test "x$local_package_directory" != "xno" &&
-        PACKAGE_DIRECTORY="$local_package_directory"
-    AC_SUBST([PACKAGE_DIRECTORY])
+    dnl Pass a febootstrap --yum-config option.
+    AC_MSG_CHECKING([if user requested febootstrap --yum-config option])
+    AC_ARG_WITH([febootstrap-yum-config],
+        [AS_HELP_STRING([--with-febootstrap-yum-config=FILE],
+          [pass febootstrap --yum-config option @<:@default=no@:>@])],
+        [FEBOOTSTRAP_YUM_CONFIG="$withval"],
+        [FEBOOTSTRAP_YUM_CONFIG=no])
+    AC_MSG_RESULT([$FEBOOTSTRAP_YUM_CONFIG])
+    AC_SUBST([FEBOOTSTRAP_YUM_CONFIG])
 
     dnl Which distro?
     dnl
     dnl This used to be Very Important but is now just used to select
     dnl which packages to install in the appliance, since the package
 
     dnl Which distro?
     dnl
     dnl This used to be Very Important but is now just used to select
     dnl which packages to install in the appliance, since the package
-    dnl names vary slightly across distros.  (See appliance/packagelist.in)
+    dnl names vary slightly across distros.  (See
+    dnl appliance/packagelist.in and appliance/excludelist.in)
     AC_MSG_CHECKING([which Linux distro for package names])
     DISTRO=REDHAT
     if test -f /etc/debian_version; then
         DISTRO=DEBIAN
     AC_MSG_CHECKING([which Linux distro for package names])
     DISTRO=REDHAT
     if test -f /etc/debian_version; then
         DISTRO=DEBIAN
+       if grep -q 'DISTRIB_ID=Ubuntu' /etc/lsb-release 2>&AS_MESSAGE_LOG_FD; then
+            DISTRO=UBUNTU
+       fi
+    fi
+    if test -f /etc/arch-release; then
+        DISTRO=ARCHLINUX
     fi
     AC_MSG_RESULT([$DISTRO])
     AC_SUBST([DISTRO])
     fi
     AC_MSG_RESULT([$DISTRO])
     AC_SUBST([DISTRO])
@@ -256,6 +249,27 @@ AC_CHECK_PROG([POD2HTML],[pod2html],[pod2html],[no])
 test "x$POD2HTML" = "xno" &&
      AC_MSG_ERROR([pod2html must be installed])
 
 test "x$POD2HTML" = "xno" &&
      AC_MSG_ERROR([pod2html must be installed])
 
+dnl Check if pod2man, pod2text take --stderr and -u options (not in RHEL 5).
+AC_MSG_CHECKING([if pod2man takes --stderr option])
+if "$POD2MAN" --stderr >&AS_MESSAGE_LOG_FD 2>&1; then
+    AC_MSG_RESULT([yes])
+    POD2_STDERR_OPTION="--stderr"
+else
+    AC_MSG_RESULT([no])
+    POD2_STDERR_OPTION=""
+fi
+AC_SUBST([POD2_STDERR_OPTION])
+
+AC_MSG_CHECKING([if pod2man takes -u option])
+if "$POD2MAN" -u >&AS_MESSAGE_LOG_FD 2>&1; then
+    AC_MSG_RESULT([yes])
+    POD2_UTF8_OPTION="-u"
+else
+    AC_MSG_RESULT([no])
+    POD2_UTF8_OPTION=""
+fi
+AC_SUBST([POD2_UTF8_OPTION])
+
 dnl Check for mkisofs.
 AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
 dnl Check for mkisofs.
 AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
@@ -270,8 +284,10 @@ AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
 AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
 
 dnl Check for db_dump, db_load (optional).
 AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
 
 dnl Check for db_dump, db_load (optional).
-AC_CHECK_PROGS([DB_DUMP],[db_dump db4_dump db4.8_dump],[no])
-AC_CHECK_PROGS([DB_LOAD],[db_load db4_load db4.8_load],[no])
+AC_CHECK_PROGS([DB_DUMP],
+               [db_dump db4_dump db4.8_dump db4.7_dump db4.6_dump],[no])
+AC_CHECK_PROGS([DB_LOAD],
+               [db_load db4_load db4.8_load db4.7_load db4.6_load],[no])
 if test "x$DB_DUMP" != "xno"; then
     AC_DEFINE_UNQUOTED([DB_DUMP],["$DB_DUMP"],[Name of db_dump program.])
 fi
 if test "x$DB_DUMP" != "xno"; then
     AC_DEFINE_UNQUOTED([DB_DUMP],["$DB_DUMP"],[Name of db_dump program.])
 fi
@@ -294,10 +310,67 @@ AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
 
 dnl Check that the chosen qemu has virtio-serial support.
 if test "x$vmchannel_test" != "xno"; then
 
 dnl Check that the chosen qemu has virtio-serial support.
 if test "x$vmchannel_test" != "xno"; then
+    AC_MSG_CHECKING([that $QEMU -help works])
+    if $QEMU -help >&AS_MESSAGE_LOG_FD 2>&1; then
+        AC_MSG_RESULT([yes])
+    else
+        AC_MSG_RESULT([no])
+        AC_MSG_FAILURE(
+[$QEMU -help: command failed.
+
+This could be a very old version of qemu, or qemu might not be
+working.
+])
+    fi
+
+    dnl qemu 0.15 was released with broken support for '-machine',
+    dnl requiring you to add the machine type: '-machine pc,[...]'.
+    dnl The problem is that 'pc' is only applicable for PC-like
+    dnl hardware, so we cannot do this as a general solution.  Since
+    dnl qemu 0.15, this problem has been fixed so now the default
+    dnl machine type is chosen (qemu commit 2645c6dcaf6ea2a51a).
+    dnl
+    dnl We need to work out if this qemu is the broken version, so we
+    dnl can add 'pc' just for this broken version.
+    dnl
+    dnl Note that old qemu didn't support the '-machine' option at all.
+    dnl
+    dnl We use the -kernel option for testing this, because this option
+    dnl is processed very late, after qemu has set up the machine.
+    AC_MSG_CHECKING([for broken '-machine accel=tcg' option in $QEMU])
+    LC_ALL=C $QEMU -nographic -machine accel=tcg -kernel /NO_SUCH_FILE \
+             > config1.tmp 2>&1
+    LC_ALL=C $QEMU -nographic -machine pc,accel=tcg -kernel /NO_SUCH_FILE \
+             > config2.tmp 2>&1
+    if cmp -s config1.tmp config2.tmp; then
+        AC_MSG_RESULT([no])
+    else
+        AC_MSG_RESULT([yes])
+        AC_DEFINE([QEMU_MACHINE_TYPE_IS_BROKEN],[1],[qemu -machine accel=tcg option is broken (in qemu 0.15 only)])
+    fi
+    rm config1.tmp config2.tmp
+
+    dnl See if the '-machine [pc,]accel=tcg' option is required in
+    dnl order to run the virtio-serial test below.  This happens when
+    dnl we run qemu-kvm inside a VM without forcing TCG:
+    dnl
+    dnl   Could not access KVM kernel module: No such file or directory
+    dnl   failed to initialize KVM: No such file or directory
+    dnl   No accelerator found!
+    AC_MSG_CHECKING([if -machine @<:@pc,@:>@accel=tcg option is required to test virtio-serial feature])
+    if $QEMU -nographic -device \? >/dev/null 2>&1; then
+        :
+    elif $QEMU -machine accel=tcg -nographic -device \? >/dev/null 2>&1; then
+        QEMU_EXTRA_OPTIONS_FOR_TEST="-machine accel=tcg"
+    elif $QEMU -machine pc,accel=tcg -nographic -device \? >/dev/null 2>&1; then
+        QEMU_EXTRA_OPTIONS_FOR_TEST="-machine pc,accel=tcg"
+    # else nothing ... it'll fail below.
+    fi
+    AC_MSG_RESULT([$QEMU_EXTRA_OPTIONS_FOR_TEST])
+
     AC_MSG_CHECKING([for virtio-serial support in $QEMU])
     AC_MSG_CHECKING([for virtio-serial support in $QEMU])
-    if $QEMU -nographic -device \? 2>&1 | grep -sq virtio-serial; then
+    if $QEMU $QEMU_EXTRA_OPTIONS_FOR_TEST -nographic -device \? 2>&1 | grep -sq virtio-serial; then
         AC_MSG_RESULT([yes])
         AC_MSG_RESULT([yes])
-        vmchannel_guestfwd=guestfwd
     else
         AC_MSG_RESULT([no])
         AC_MSG_FAILURE(
     else
         AC_MSG_RESULT([no])
         AC_MSG_FAILURE(
@@ -380,7 +453,6 @@ AS_IF([test "x$with_readline" != xno],
 
 dnl For i18n.
 AM_GNU_GETTEXT([external])
 
 dnl For i18n.
 AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.17])
 
 dnl libmagic (highly recommended)
 AC_CHECK_LIB([magic],[magic_file],
 
 dnl libmagic (highly recommended)
 AC_CHECK_LIB([magic],[magic_file],
@@ -472,7 +544,7 @@ AS_IF([test "x$enable_perl" != "xno"],
         missing_perl_modules=no
         for pm in Test::More ExtUtils::MakeMaker; do
             AC_MSG_CHECKING([for $pm])
         missing_perl_modules=no
         for pm in Test::More ExtUtils::MakeMaker; do
             AC_MSG_CHECKING([for $pm])
-            if ! perl -M$pm -e1 >/dev/null 2>&1; then
+            if ! perl -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
                 AC_MSG_RESULT([no])
                 missing_perl_modules=yes
             else
                 AC_MSG_RESULT([no])
                 missing_perl_modules=yes
             else
@@ -490,7 +562,7 @@ dnl Check for Python (optional, for Python bindings).
 PYTHON_PREFIX=
 PYTHON_VERSION=
 PYTHON_INCLUDEDIR=
 PYTHON_PREFIX=
 PYTHON_VERSION=
 PYTHON_INCLUDEDIR=
-PYTHON_SITE_PACKAGES=
+PYTHON_INSTALLDIR=
 
 AC_ARG_ENABLE([python],
         AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
 
 AC_ARG_ENABLE([python],
         AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
@@ -501,8 +573,14 @@ AS_IF([test "x$enable_python" != "xno"],
         AC_CHECK_PROG([PYTHON],[python],[python],[no])
 
         if test "x$PYTHON" != "xno"; then
         AC_CHECK_PROG([PYTHON],[python],[python],[no])
 
         if test "x$PYTHON" != "xno"; then
+           AC_MSG_CHECKING([Python prefix])
             PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
             PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
+           AC_MSG_RESULT([$PYTHON_PREFIX])
+
+           AC_MSG_CHECKING([Python version])
             PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
             PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
+           AC_MSG_RESULT([$PYTHON_VERSION])
+
             for d in \
                 $PYTHON_PREFIX/include/python$PYTHON_VERSION \
                 /usr/include/python$PYTHON_VERSION \
             for d in \
                 $PYTHON_PREFIX/include/python$PYTHON_VERSION \
                 /usr/include/python$PYTHON_VERSION \
@@ -520,23 +598,33 @@ AS_IF([test "x$enable_python" != "xno"],
                 AC_MSG_WARN([Python include directory not found])
             fi
 
                 AC_MSG_WARN([Python include directory not found])
             fi
 
-            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
+            AC_ARG_WITH([python-installdir],
+                        [AS_HELP_STRING([--with-python-installdir],
+                                       [directory to install python modules @<:@default=check@:>@])],
+                       [PYTHON_INSTALLDIR="$withval"
+                       AC_MSG_NOTICE([Python install dir $PYTHON_INSTALLDIR])],
+                       [PYTHON_INSTALLDIR=check])
+
+           if test "x$PYTHON_INSTALLDIR" = "xcheck"; then
+               PYTHON_INSTALLDIR=
+                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_INSTALLDIR=$d
+                        break
+                    fi
+                    AC_MSG_RESULT([not found])
+                done
+                if test "x$PYTHON_INSTALLDIR" = "x"; then
+                    AC_MSG_WARN([Python site-packages directory not found])
                 fi
                 fi
-                AC_MSG_RESULT([not found])
-            done
-            if test "x$PYTHON_SITE_PACKAGES" = "x"; then
-                AC_MSG_WARN([Python site-packages directory not found])
             fi
 
             old_LIBS="$LIBS"
             fi
 
             old_LIBS="$LIBS"
@@ -548,10 +636,10 @@ AS_IF([test "x$enable_python" != "xno"],
         AC_SUBST(PYTHON_PREFIX)
         AC_SUBST(PYTHON_VERSION)
         AC_SUBST(PYTHON_INCLUDEDIR)
         AC_SUBST(PYTHON_PREFIX)
         AC_SUBST(PYTHON_VERSION)
         AC_SUBST(PYTHON_INCLUDEDIR)
-        AC_SUBST(PYTHON_SITE_PACKAGES)
+        AC_SUBST(PYTHON_INSTALLDIR)
         ])
 AM_CONDITIONAL([HAVE_PYTHON],
         ])
 AM_CONDITIONAL([HAVE_PYTHON],
-    [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
+    [test "x$PYTHON" != "xno" && test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_INSTALLDIR" != "x"])
 
 dnl Check for Ruby and rake (optional, for Ruby bindings).
 AC_ARG_ENABLE([ruby],
 
 dnl Check for Ruby and rake (optional, for Ruby bindings).
 AC_ARG_ENABLE([ruby],
@@ -740,7 +828,7 @@ AS_IF([test "x$PERL" != "xno"],
         missing_perl_modules=no
         for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper Locale::TextDomain Win::Hivex Win::Hivex::Regedit String::ShellQuote; do
             AC_MSG_CHECKING([for $pm])
         missing_perl_modules=no
         for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper Locale::TextDomain Win::Hivex Win::Hivex::Regedit String::ShellQuote; do
             AC_MSG_CHECKING([for $pm])
-            if ! $PERL -M$pm -e1 >/dev/null 2>&1; then
+            if ! $PERL -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
                 AC_MSG_RESULT([no])
                 missing_perl_modules=yes
             else
                 AC_MSG_RESULT([no])
                 missing_perl_modules=yes
             else
@@ -761,7 +849,7 @@ AC_SUBST(MAX_PROC_NR)
 
 dnl Replace libtool with a wrapper that clobbers dependency_libs in *.la files
 dnl http://lists.fedoraproject.org/pipermail/devel/2010-November/146343.html
 
 dnl Replace libtool with a wrapper that clobbers dependency_libs in *.la files
 dnl http://lists.fedoraproject.org/pipermail/devel/2010-November/146343.html
-LIBTOOL='$(SHELL) $(top_srcdir)/libtool-kill-dependency_libs.sh $(top_builddir)/libtool'
+LIBTOOL='bash $(top_srcdir)/libtool-kill-dependency_libs.sh $(top_builddir)/libtool'
 AC_SUBST([LIBTOOL])
 
 dnl Run in subdirs.
 AC_SUBST([LIBTOOL])
 
 dnl Run in subdirs.
@@ -780,6 +868,7 @@ AC_CONFIG_FILES([Makefile
                  appliance/Makefile
                  images/Makefile
                  capitests/Makefile
                  appliance/Makefile
                  images/Makefile
                  capitests/Makefile
+                 caution/Makefile
                  regressions/Makefile
                  test-tool/Makefile
                  ocaml/Makefile ocaml/examples/Makefile
                  regressions/Makefile
                  test-tool/Makefile
                  ocaml/Makefile ocaml/examples/Makefile
@@ -801,6 +890,7 @@ AC_CONFIG_FILES([Makefile
                  cat/Makefile
                  df/Makefile
                  rescue/Makefile
                  cat/Makefile
                  df/Makefile
                  rescue/Makefile
+                 debian/changelog
                  ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
                  ocaml/META perl/Makefile.PL])
 AC_OUTPUT