+This could be a very old version of qemu, or qemu might not be
+working.
+])
+ fi
+
+ AC_MSG_CHECKING([for virtio-serial support in $QEMU])
+ if $QEMU -nographic -device \? 2>&1 | grep -sq virtio-serial; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ AC_MSG_FAILURE(
+[I did not find virtio-serial support in
+$QEMU.
+
+virtio-serial support in qemu or KVM is essential for libguestfs
+to operate.
+
+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
+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
+
+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 then try '--with-drive-if=ide'.
+AC_ARG_WITH([drive-if],
+ [AS_HELP_STRING([--with-drive-if],
+ [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
+ [],
+ [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
+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],
+ [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
+ [],
+ [with_net_if=virtio-net-pci])
+AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
+
+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],
+ [AS_HELP_STRING([--with-readline],
+ [support fancy command line editing @<:@default=check@:>@])],
+ [],
+ [with_readline=check])
+
+LIBREADLINE=
+AS_IF([test "x$with_readline" != xno],
+ [AC_CHECK_LIB([readline], [main],
+ [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+ AC_DEFINE([HAVE_LIBREADLINE], [1],
+ [Define if you have libreadline])
+ ],
+ [if test "x$with_readline" != xcheck; then
+ AC_MSG_FAILURE(
+ [--with-readline was given, but test for readline failed])
+ fi
+ ], -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 libmagic (highly recommended)
+AC_CHECK_LIB([magic],[magic_file],
+ [AC_CHECK_HEADER([magic.h],
+ [AC_SUBST([MAGIC_LIBS], ["-lmagic"])
+ AC_DEFINE([HAVE_LIBMAGIC],[1],[libmagic found at compile time.])
+ ], [])
+ ],
+ [AC_MSG_WARN([libmagic not found, some core features will be disabled])])
+
+dnl Check for PCRE (highly recommended)
+PKG_CHECK_MODULES([PCRE], [libpcre],
+ [AC_SUBST([PCRE_CFLAGS])
+ AC_SUBST([PCRE_LIBS])
+ AC_DEFINE([HAVE_PCRE],[1],[PCRE found at compile time.])
+ ],
+ [AC_MSG_WARN([PCRE not found, some core features will be disabled])])
+
+dnl libvirt (highly recommended)
+PKG_CHECK_MODULES([LIBVIRT], [libvirt],
+ [AC_SUBST([LIBVIRT_CFLAGS])
+ AC_SUBST([LIBVIRT_LIBS])
+ AC_DEFINE([HAVE_LIBVIRT],[1],[libvirt found at compile time.])
+ ],
+ [AC_MSG_WARN([libvirt not found, some core features will be disabled])])
+AM_CONDITIONAL([HAVE_LIBVIRT],[test "x$LIBVIRT_LIBS" != "x"])
+
+dnl libxml2 (highly recommended)
+PKG_CHECK_MODULES([LIBXML2], [libxml-2.0],
+ [AC_SUBST([LIBXML2_CFLAGS])
+ AC_SUBST([LIBXML2_LIBS])
+ AC_DEFINE([HAVE_LIBXML2],[1],[libxml2 found at compile time.])
+ ],
+ [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.
+PKG_CHECK_MODULES([HIVEX], [hivex],
+ [AC_SUBST([HIVEX_CFLAGS])
+ AC_SUBST([HIVEX_LIBS])
+ 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],
+ 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).
+OCAMLC=no
+OCAMLFIND=no
+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
+
+ 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
+AC_ARG_ENABLE([perl],
+ AS_HELP_STRING([--disable-perl], [Disable Perl language bindings]),
+ [],
+ [enable_perl=yes])
+AS_IF([test "x$enable_perl" != "xno"],
+ [
+ PERL=
+ 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
+ for pm in Test::More ExtUtils::MakeMaker; do
+ AC_MSG_CHECKING([for $pm])
+ if ! perl -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
+ AC_MSG_RESULT([no])
+ missing_perl_modules=yes
+ else
+ AC_MSG_RESULT([yes])
+ fi
+ done
+ if test "x$missing_perl_modules" = "xyes"; then
+ AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
+ fi
+ ])
+AM_CONDITIONAL([HAVE_PERL],
+ [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
+
+dnl Check for Python (optional, for Python bindings).
+PYTHON_PREFIX=
+PYTHON_VERSION=
+PYTHON_INCLUDEDIR=
+PYTHON_INSTALLDIR=
+
+AC_ARG_ENABLE([python],
+ AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
+ [],
+ [enable_python=yes])
+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]])"`
+ AC_MSG_RESULT([$PYTHON_VERSION])
+
+ 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_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
+
+ old_LIBS="$LIBS"
+ LIBS="$LIBS -lpython$PYTHON_VERSION"
+ AC_CHECK_FUNCS([PyCapsule_New])
+ LIBS="$old_LIBS"
+ fi
+
+ AC_SUBST(PYTHON_PREFIX)
+ AC_SUBST(PYTHON_VERSION)
+ AC_SUBST(PYTHON_INCLUDEDIR)
+ AC_SUBST(PYTHON_INSTALLDIR)
+ ])
+AM_CONDITIONAL([HAVE_PYTHON],
+ [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],
+ AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
+ [],
+ [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([RAKE],[rake],[rake],[no])
+ ])
+AM_CONDITIONAL([HAVE_RUBY],
+ [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
+
+dnl Check for Java.
+AC_ARG_WITH(java_home,
+ [AS_HELP_STRING([--with-java-home],
+ [specify path to JDK directory @<:@default=check@:>@])],
+ [],
+ [with_java_home=check])
+
+if test "x$with_java_home" != "xno"; then
+ if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
+ then
+ # Reject unsafe characters in $JAVA_HOME
+ jh_lf='
+'
+ case $JAVA_HOME in
+ *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
+ AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
+ esac
+ if test -d "$with_java_home"; then
+ JAVA_HOME="$with_java_home"
+ else
+ AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
+ fi
+ fi
+
+ if test "x$JAVA_HOME" = "x"; then
+ # Look for Java in some likely locations.
+ for d in \
+ /usr/lib/jvm/java \
+ /usr/lib/jvm/java-6-openjdk
+ do
+ if test -d $d && test -f $d/bin/java; then
+ JAVA_HOME=$d
+ break
+ fi
+ done
+ fi
+
+ if test "x$JAVA_HOME" != "x"; then
+ AC_MSG_CHECKING(for JDK in $JAVA_HOME)
+ if test ! -x "$JAVA_HOME/bin/java"; then
+ AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
+ else
+ JAVA="$JAVA_HOME/bin/java"
+ fi
+ if test ! -x "$JAVA_HOME/bin/javac"; then
+ AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
+ else
+ JAVAC="$JAVA_HOME/bin/javac"
+ fi
+ if test ! -x "$JAVA_HOME/bin/javah"; then
+ AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
+ else
+ JAVAH="$JAVA_HOME/bin/javah"
+ fi
+ if test ! -x "$JAVA_HOME/bin/javadoc"; then
+ AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
+ else
+ JAVADOC="$JAVA_HOME/bin/javadoc"
+ fi
+ if test ! -x "$JAVA_HOME/bin/jar"; then
+ AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
+ else
+ JAR="$JAVA_HOME/bin/jar"
+ fi
+ java_version=`$JAVA -version 2>&1 | grep "java version"`
+ AC_MSG_RESULT(found $java_version in $JAVA_HOME)
+
+ dnl Find jni.h.
+ AC_MSG_CHECKING([for jni.h])
+ if test -f "$JAVA_HOME/include/jni.h"; then
+ JNI_CFLAGS="-I$JAVA_HOME/include"
+ else
+ if test "`find $JAVA_HOME -name jni.h`" != ""; then
+ head=`find $JAVA_HOME -name jni.h | tail -1`
+ dir=`dirname "$head"`
+ JNI_CFLAGS="-I$dir"
+ else
+ AC_MSG_FAILURE([missing jni.h header file])
+ fi
+ fi
+ AC_MSG_RESULT([$JNI_CFLAGS])
+
+ dnl Find jni_md.h.
+ AC_MSG_CHECKING([for jni_md.h])
+ case "$build_os" in
+ *linux*) system="linux" ;;
+ *SunOS*) system="solaris" ;;
+ *cygwin*) system="win32" ;;
+ *) system="$build_os" ;;
+ esac
+ if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
+ JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
+ else
+ if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
+ head=`find $JAVA_HOME -name jni_md.h | tail -1`
+ dir=`dirname "$head"`
+ JNI_CFLAGS="$JNI_CFLAGS -I$dir"
+ else
+ AC_MSG_FAILURE([missing jni_md.h header file])
+ fi
+ fi
+ AC_MSG_RESULT([$JNI_CFLAGS])
+
+ dnl Need extra version flag?
+ AC_MSG_CHECKING([extra javac flags])
+ JAVAC_FLAGS=
+ javac_version=`$JAVAC -version 2>&1`
+ case "$javac_version" in
+ *Eclipse*)
+ JAVAC_FLAGS="-source 1.5" ;;
+ esac
+ AC_MSG_RESULT([$JAVAC_FLAGS])
+
+ dnl Where to install jarfiles.
+ dnl XXX How to make it configurable?
+ JAR_INSTALL_DIR=\${prefix}/share/java
+ JNI_INSTALL_DIR=\${libdir}
+
+ dnl JNI version.
+ jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
+ jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
+ jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
+ JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
+ fi
+fi
+
+AC_SUBST(JAVA_HOME)
+AC_SUBST(JAVA)
+AC_SUBST(JAVAC)
+AC_SUBST(JAVAH)
+AC_SUBST(JAVADOC)
+AC_SUBST(JAR)
+AC_SUBST(JNI_CFLAGS)
+AC_SUBST(JAVAC_FLAGS)
+AC_SUBST(JAR_INSTALL_DIR)
+AC_SUBST(JNI_INSTALL_DIR)
+AC_SUBST(JNI_VERSION_INFO)
+
+AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
+
+dnl Check for Haskell (GHC).
+GHC=no
+AC_ARG_ENABLE([haskell],
+ AS_HELP_STRING([--disable-haskell], [Disable Haskell language bindings]),
+ [],
+ [enable_haskell=yes])
+AS_IF([test "x$enable_haskell" != "xno"],
+ [
+ GHC=
+ AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
+ ])
+AM_CONDITIONAL([HAVE_HASKELL],
+ [test "x$GHC" != "xno"])
+
+dnl PHP
+PHP=no
+AC_ARG_ENABLE([php],
+ AS_HELP_STRING([--disable-php], [Disable PHP language bindings]),
+ [],
+ [enable_php=yes])
+AS_IF([test "x$enable_php" != "xno"],
+ [
+ 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 Check for Perl modules needed by Perl virt tools (virt-df, etc.)
+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])
+ if ! $PERL -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
+ AC_MSG_RESULT([no])
+ missing_perl_modules=yes
+ else
+ AC_MSG_RESULT([yes])
+ fi
+ done
+ if test "x$missing_perl_modules" = "xyes"; then
+ AC_MSG_WARN([some Perl modules required to compile the Perl virt-* tools are missing])
+ fi
+ ])
+
+AM_CONDITIONAL([HAVE_TOOLS],
+ [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
+
+dnl Library versioning.
+MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
+AC_SUBST(MAX_PROC_NR)