Use Python distutils to determine include and site-packages directories.
[libguestfs.git] / configure.ac
index 89b5618..42d3571 100644 (file)
@@ -1,5 +1,5 @@
 # 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
@@ -17,8 +17,8 @@
 
 # major/minor/release must be numbers
 m4_define([libguestfs_major],   [1])
-m4_define([libguestfs_minor],   [7])
-m4_define([libguestfs_release], [20])
+m4_define([libguestfs_minor],   [11])
+m4_define([libguestfs_release], [4])
 # 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
@@ -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_FUNCS([posix_fallocate])
+AC_CHECK_FUNCS([futimens posix_fallocate])
 
 dnl Build the daemon?
 AC_MSG_CHECKING([if we should build the daemon])
@@ -214,7 +204,8 @@ if test "x$enable_appliance" = "xyes"; then
     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
@@ -223,6 +214,9 @@ if test "x$enable_appliance" = "xyes"; then
             DISTRO=UBUNTU
        fi
     fi
+    if test -f /etc/arch-release; then
+        DISTRO=ARCHLINUX
+    fi
     AC_MSG_RESULT([$DISTRO])
     AC_SUBST([DISTRO])
 fi
@@ -255,10 +249,31 @@ AC_CHECK_PROG([POD2HTML],[pod2html],[pod2html],[no])
 test "x$POD2HTML" = "xno" &&
      AC_MSG_ERROR([pod2html must be installed])
 
-dnl Check for mkisofs.
-AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
+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 >/dev/null 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 >/dev/null 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 genisoimage.
+AC_PATH_PROGS([GENISOIMAGE],[genisoimage],[no],
         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
-test "x$MKISOFS" = "xno" && AC_MSG_ERROR([mkisofs must be installed])
+test "x$GENISOIMAGE" = "xno" && AC_MSG_ERROR([genisoimage must be installed])
 
 dnl Check for optional xmllint.
 AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
@@ -298,7 +313,6 @@ if test "x$vmchannel_test" != "xno"; 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_FAILURE(
@@ -417,6 +431,15 @@ PKG_CHECK_MODULES([LIBXML2], [libxml-2.0],
         [AC_MSG_WARN([libxml2 not found, some core features will be disabled])])
 AM_CONDITIONAL([HAVE_LIBXML2],[test "x$LIBXML2_LIBS" != "x"])
 
+dnl libconfig (highly recommended)
+PKG_CHECK_MODULES([LIBCONFIG], [libconfig],
+        [AC_SUBST([LIBCONFIG_CFLAGS])
+         AC_SUBST([LIBCONFIG_LIBS])
+         AC_DEFINE([HAVE_LIBCONFIG],[1],[libconfig found at compile time.])
+        ],
+        [AC_MSG_WARN([libconfig not found, some features will be disabled])])
+AM_CONDITIONAL([HAVE_LIBCONFIG],[test "x$LIBCONFIG_LIBS" != "x"])
+
 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.
@@ -426,6 +449,7 @@ PKG_CHECK_MODULES([HIVEX], [hivex],
          AC_DEFINE([HAVE_HIVEX],[1],[hivex library found at compile time.])
         ],
         [AC_MSG_WARN([hivex not found, some core features will be disabled])])
+AM_CONDITIONAL([HAVE_HIVEX],[test "x$HIVEX_LIBS" != "x"])
 
 dnl FUSE is optional to build the FUSE module.
 AC_ARG_ENABLE([fuse],
@@ -452,9 +476,14 @@ AS_IF([test "x$enable_ocaml" != "xno"],
          OCAMLFIND=
          AC_PROG_OCAML
          AC_PROG_FINDLIB
+
+         AS_IF([test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"],
+               [AC_CHECK_OCAML_PKG([pcre])])
         ])
 AM_CONDITIONAL([HAVE_OCAML],
                [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
+AM_CONDITIONAL([HAVE_OCAML_PCRE],
+               [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno" && test "x$OCAML_PKG_pcre" != "xno"])
 
 dnl Check for Perl (optional, for Perl bindings).
 PERL=no
@@ -490,7 +519,7 @@ dnl Check for Python (optional, for Python bindings).
 PYTHON_PREFIX=
 PYTHON_VERSION=
 PYTHON_INCLUDEDIR=
-PYTHON_SITE_PACKAGES=
+PYTHON_INSTALLDIR=
 
 AC_ARG_ENABLE([python],
         AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
@@ -501,42 +530,37 @@ AS_IF([test "x$enable_python" != "xno"],
         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"`
+           AC_MSG_RESULT([$PYTHON_PREFIX])
+
+           AC_MSG_CHECKING([Python version])
             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
-            if test "x$PYTHON_INCLUDEDIR" = "x"; then
-                AC_MSG_WARN([Python include directory not found])
-            fi
+           AC_MSG_RESULT([$PYTHON_VERSION])
 
-            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_MSG_CHECKING([for Python include path])
+            if test -z "$PYTHON_INCLUDEDIR"; then
+                python_path=`$PYTHON -c "import distutils.sysconfig; \
+                                         print (distutils.sysconfig.get_python_inc ());"`
+                PYTHON_INCLUDEDIR=$python_path
+            fi
+            AC_MSG_RESULT([$PYTHON_INCLUDEDIR])
+
+            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=
+                AC_MSG_CHECKING([for Python site-packages path])
+                if test -z "$PYTHON_INSTALLDIR"; then
+                    PYTHON_INSTALLDIR=`$PYTHON -c "import distutils.sysconfig; \
+                                                   print (distutils.sysconfig.get_python_lib(0,0));"`
                 fi
-                AC_MSG_RESULT([not found])
-            done
-            if test "x$PYTHON_SITE_PACKAGES" = "x"; then
-                AC_MSG_WARN([Python site-packages directory not found])
+                AC_MSG_RESULT([$PYTHON_INSTALLDIR])
             fi
 
             old_LIBS="$LIBS"
@@ -548,10 +572,10 @@ AS_IF([test "x$enable_python" != "xno"],
         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],
-    [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],
@@ -775,33 +799,46 @@ dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
 AC_CONFIG_FILES([podwrapper.sh],
                 [chmod +x podwrapper.sh])
 AC_CONFIG_FILES([Makefile
-                 generator/Makefile
-                 src/Makefile fish/Makefile po/Makefile.in examples/Makefile
                  appliance/Makefile
-                 images/Makefile
                  capitests/Makefile
-                 regressions/Makefile
-                 test-tool/Makefile
-                 ocaml/Makefile ocaml/examples/Makefile
-                 perl/Makefile
-                 python/Makefile python/examples/Makefile
-                 ruby/Makefile ruby/Rakefile ruby/examples/Makefile
-                 java/Makefile
+                 cat/Makefile
+                 csharp/Makefile
+                 debian/changelog
+                 df/Makefile
+                 edit/Makefile
+                 examples/Makefile
+                 fish/Makefile
+                 fuse/Makefile
+                 generator/Makefile
+                 gnulib/lib/Makefile
+                 gnulib/tests/Makefile
                  haskell/Makefile
+                 images/Makefile
                  inspector/Makefile
-                 tools/Makefile
+                 java/Makefile
                  libguestfs.pc
-                 gnulib/lib/Makefile
-                 gnulib/tests/Makefile
-                 fuse/Makefile
+                 ocaml/META
+                 ocaml/Makefile
+                 ocaml/examples/Makefile
+                 perl/Makefile
+                 perl/Makefile.PL
+                 perl/examples/Makefile
+                 php/Makefile
                  po-docs/Makefile
                  po-docs/ja/Makefile
-                 php/Makefile
-                 csharp/Makefile
-                 cat/Makefile
-                 df/Makefile
+                 po-docs/uk/Makefile
+                 po/Makefile.in
+                 python/Makefile
+                 python/examples/Makefile
+                 regressions/Makefile
                  rescue/Makefile
-                 ocaml/META perl/Makefile.PL])
+                 resize/Makefile
+                 ruby/Makefile
+                 ruby/Rakefile
+                 ruby/examples/Makefile
+                 src/Makefile
+                 test-tool/Makefile
+                 tools/Makefile])
 AC_OUTPUT
 
 dnl Produce summary.
@@ -829,8 +866,11 @@ 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-* tools ........................ "
+echo    "guestfish and C virt tools .......... yes"
+echo -n "Perl virt tools ..................... "
 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo -n "virt-resize ......................... "
+if test "x$HAVE_OCAML" = "x" && test "x$HAVE_OCAML_PCRE" = "x"; then echo "yes"; else echo "no"; fi
 echo "FUSE filesystem ..................... $enable_fuse"
 echo
 echo "If any optional component is configured 'no' when you expected 'yes'"