Fixed checks for libpython features
[libguestfs.git] / configure.ac
index fec2782..40f67aa 100644 (file)
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # The major, minor, and release fields MUST be numbers.  Packagers can
 # add extra information using --with-extra="..." which may be any
 # freeform string.
 m4_define([libguestfs_major],   [1])
-m4_define([libguestfs_minor],   [13])
-m4_define([libguestfs_release], [22])
+m4_define([libguestfs_minor],   [15])
+m4_define([libguestfs_release], [12])
 
 AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release)
 AC_CONFIG_AUX_DIR([build-aux])
@@ -121,6 +121,9 @@ if test "$gl_gcc_warnings" = yes; then
                                     # failures (seen on Ubuntu).
   nw="$nw -Wmissing-noreturn"       # Don't warn about missed noreturn funcs
                                     # (seen on Ubuntu).
+  nw="$nw -Wsuggest-attribute=pure" # Don't suggest pure functions.
+  nw="$nw -Wsuggest-attribute=const" # Don't suggest const functions.
+  nw="$nw -Wunsuffixed-float-constants" # Don't care about these.
 
   gl_MANYWARN_ALL_GCC([ws])
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
@@ -312,22 +315,19 @@ AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
         ])
 
-dnl Check for Augeas (now optional).
-AC_CHECK_LIB([augeas],[aug_match],[
-        have_augeas=yes
-        AUGEAS_LIB="-laugeas"
-
-        old_LIBS="$LIBS"
-        LIBS="$LIBS $AUGEAS_LIB"
-        dnl Check for functions not available in earlier versions of Augeas.
-        AC_CHECK_FUNCS([aug_load aug_defvar aug_defnode])
-        LIBS="$old_LIBS"
-
-        ],[have_augeas=no])
-if test "x$have_augeas" = "xyes"; then
-        AC_DEFINE([HAVE_AUGEAS],[1],[Define to 1 if you have Augeas])
-fi
-AC_SUBST([AUGEAS_LIB])
+dnl Check for Augeas (optional).
+PKG_CHECK_MODULES([AUGEAS], [augeas],
+        [AC_SUBST([AUGEAS_CFLAGS])
+         AC_SUBST([AUGEAS_LIBS])
+         AC_DEFINE([HAVE_AUGEAS],[1],[Define to 1 if you have Augeas])
+
+         old_LIBS="$LIBS"
+         LIBS="$LIBS $AUGEAS_LIBS"
+         dnl Check for functions not available in earlier versions of Augeas.
+         AC_CHECK_FUNCS([aug_load aug_defvar aug_defnode])
+         LIBS="$old_LIBS"
+        ],
+        [AC_MSG_WARN([augeas not found, some core features will be disabled])])
 
 dnl Check for libselinux (optional).
 AC_CHECK_HEADERS([selinux/selinux.h])
@@ -446,8 +446,53 @@ 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])
-    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])
     else
         AC_MSG_RESULT([no])
@@ -607,14 +652,9 @@ 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"])
 AM_CONDITIONAL([HAVE_OCAMLDOC],
                [test "x$OCAMLDOC" != "xno"])
 
@@ -668,7 +708,9 @@ AS_IF([test "x$enable_python" != "xno"],
            AC_MSG_RESULT([$PYTHON_PREFIX])
 
            AC_MSG_CHECKING([Python version])
-            PYTHON_VERSION=`$PYTHON -c "import sys; print (sys.version[[0:3]])"`
+            PYTHON_VERSION_MAJOR=`$PYTHON -c "import sys; print (sys.version_info@<:@0@:>@)"`
+            PYTHON_VERSION_MINOR=`$PYTHON -c "import sys; print (sys.version_info@<:@1@:>@)"`
+            PYTHON_VERSION="$PYTHON_VERSION_MAJOR.$PYTHON_VERSION_MINOR"
            AC_MSG_RESULT([$PYTHON_VERSION])
 
             AC_MSG_CHECKING([for Python include path])
@@ -696,9 +738,20 @@ AS_IF([test "x$enable_python" != "xno"],
                 AC_MSG_RESULT([$PYTHON_INSTALLDIR])
             fi
 
+            dnl Look for some optional symbols in libpython.
             old_LIBS="$LIBS"
-            LIBS="$LIBS -lpython$PYTHON_VERSION"
-            AC_CHECK_FUNCS([PyCapsule_New])
+
+            PYTHON_BLDLIBRARY=`$PYTHON -c "import distutils.sysconfig; \
+                                           print (distutils.sysconfig.get_config_var('BLDLIBRARY'))"`
+            AC_CHECK_LIB([c],[PyCapsule_New],
+                         [AC_DEFINE([HAVE_PYCAPSULE_NEW],1,
+                                    [Found PyCapsule_New in libpython])],
+                         [],[$PYTHON_BLDLIBRARY])
+            AC_CHECK_LIB([c],[PyString_AsString],
+                         [AC_DEFINE([HAVE_PYSTRING_ASSTRING],1,
+                                    [Found PyString_AsString in libpython])],
+                         [],[$PYTHON_BLDLIBRARY])
+
             LIBS="$old_LIBS"
         fi
 
@@ -717,8 +770,10 @@ AC_ARG_ENABLE([ruby],
         [enable_ruby=yes])
 AS_IF([test "x$enable_ruby" != "xno"],
         [
-        AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
+        AC_CHECK_PROG([RUBY],[ruby],[ruby],[no])
         AC_CHECK_PROG([RAKE],[rake],[rake],[no])
+        AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
+        AC_SUBST([RAKE])
         ])
 AM_CONDITIONAL([HAVE_RUBY],
     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
@@ -897,8 +952,8 @@ AC_ARG_ENABLE([erlang],
     AS_HELP_STRING([--disable-erlang], [Disable Erlang language bindings]),
          [],
          [enable_erlang=yes])
-AS_IF([test "x$enable_erlang" != "xno"],
-        [
+# NB: Don't use AS_IF here: it doesn't work.
+if test "x$enable_erlang" != "xno"; then
         ERLANG=
         AC_ERLANG_PATH_ERLC([no])
 
@@ -907,7 +962,7 @@ AS_IF([test "x$enable_erlang" != "xno"],
                                 [AC_MSG_FAILURE([Erlang erl_interface library not installed.  Use --disable-erlang to disable.])])
             AC_ERLANG_SUBST_LIB_DIR
         fi
-        ])
+fi
 AM_CONDITIONAL([HAVE_ERLANG], [test "x$ERLANG" != "xno" && test "x$ERLC" != "xno"])
 
 dnl Check for Perl modules needed by Perl virt tools (virt-df, etc.)
@@ -952,9 +1007,7 @@ AC_CONFIG_FILES([run],
 AC_CONFIG_FILES([Makefile
                  align/Makefile
                  appliance/Makefile
-                 capitests/Makefile
                  cat/Makefile
-                 caution/Makefile
                  clone/Makefile
                  csharp/Makefile
                  daemon/Makefile
@@ -970,7 +1023,6 @@ AC_CONFIG_FILES([Makefile
                  gnulib/lib/Makefile
                  gnulib/tests/Makefile
                  haskell/Makefile
-                 images/Makefile
                  inspector/Makefile
                  java/Makefile
                  java/examples/Makefile
@@ -988,7 +1040,6 @@ AC_CONFIG_FILES([Makefile
                  po/Makefile.in
                  python/Makefile
                  python/examples/Makefile
-                 regressions/Makefile
                  rescue/Makefile
                  resize/Makefile
                  ruby/Makefile
@@ -997,6 +1048,16 @@ AC_CONFIG_FILES([Makefile
                  sparsify/Makefile
                  src/Makefile
                  test-tool/Makefile
+                 tests/c-api/Makefile
+                 tests/data/Makefile
+                 tests/extra/Makefile
+                 tests/guests/Makefile
+                 tests/luks/Makefile
+                 tests/lvm/Makefile
+                 tests/md/Makefile
+                 tests/protocol/Makefile
+                 tests/qemu/Makefile
+                 tests/regressions/Makefile
                  tools/Makefile])
 AC_OUTPUT
 
@@ -1031,7 +1092,7 @@ 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_TRUE" = "x" && test "x$HAVE_OCAML_PCRE_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+if test "x$HAVE_OCAML_TRUE" = "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'"