# major/minor/release must be numbers
m4_define([libguestfs_major], [1])
-m4_define([libguestfs_minor], [3])
-m4_define([libguestfs_release], [5])
+m4_define([libguestfs_minor], [7])
+m4_define([libguestfs_release], [2])
# extra can be any string
m4_define([libguestfs_extra], [])
-AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release[]libguestfs_extra)
+AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release)
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([foreign])
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])
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
+ nw="$nw -Wlong-long" # Allow long long since it's required
+ # by Python, Ruby and xstrtoll.
gl_MANYWARN_ALL_GCC([ws])
gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
# gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
gl_WARN_ADD([-Wno-logical-op])
+ # Work around warning in src/inspect.c. This seems to be a bug in gcc 4.5.1.
+ gl_WARN_ADD([-Wno-strict-overflow])
+
gl_WARN_ADD([-fdiagnostics-show-option])
AC_SUBST([WARN_CFLAGS])
AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
AC_MSG_RESULT([$enable_appliance])
+dnl Check for PCRE.
+AC_CHECK_LIB([pcre],[pcre_compile],
+ [AC_SUBST([LIBPCRE], ["-lpcre"])],
+ [AC_MSG_FAILURE(
+ [Perl Compatible Regular Expressions library (PCRE) is required])])
+AC_CHECK_HEADER([pcre.h],[],
+ [AC_MSG_FAILURE(
+ [Perl Compatible Regular Expressions library (PCRE) header file pcre.h is required])])
+
dnl Check for rpcgen and XDR library. rpcgen is optional.
AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
])
+dnl Check for cpio which isn't in the default Pardus install amazingly.
+AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
+test "x$CPIO" = "xno" &&
+ AC_MSG_ERROR([cpio must be installed])
+
+dnl Check for gperf.
+AC_CHECK_PROG([GPERF],[gperf],[gperf],[no])
+test "x$GPERF" = "xno" &&
+ AC_MSG_ERROR([gperf must be installed])
+
dnl Check for pod2man and pod2text.
AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
test "x$POD2MAN" = "xno" &&
dnl Check for QEMU for running binaries on this $host_cpu, fall
dnl back to basic 'qemu'. Allow the user to override it.
-default_qemu="qemu-kvm qemu-system-$host_cpu qemu"
+default_qemu="qemu-kvm kvm qemu-system-$host_cpu qemu"
AC_ARG_WITH([qemu],
[AS_HELP_STRING([--with-qemu],
[set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
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 or we can
-dnl fallback to null vmchannel (still using SLIRP). See the
-dnl discussion in the README file.
+dnl Check that the chosen qemu has virtio-serial support.
if test "x$vmchannel_test" != "xno"; then
- AC_MSG_CHECKING([for guestfwd support in $QEMU])
- if $QEMU -nographic --help | grep -sq guestfwd; 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])
- # 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])
- vmchannel_guestfwd=net_channel
- else
- AC_MSG_RESULT([no])
- 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
-
- 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
+[I did not find virtio-serial support in
$QEMU.
-Either user mode networking or vmchannel support is vital for
-libguestfs to operate.
+virtio-serial support in qemu or KVM is essential for libguestfs
+to operate.
-Please read the relevant section in the README file for more
-information about this.
+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
fi
fi
-dnl Set drive interface used by the guestfs_add_drive{,_ro} calls
+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)
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) but you can use the
+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|ne2k_pci) @<:@default=virtio@:>@])],
+ [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
[],
- [with_net_if=virtio])
+ [with_net_if=virtio-net-pci])
AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
dnl Check for febootstrap etc.
[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_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
+ if test "$fakechroot_major" -lt 2 || \
+ ( test "$fakechroot_major" -eq 2 && test "$fakechroot_minor" -lt 9 ); then
AC_MSG_ERROR([fakechroot version must be >= 2.9])
fi
fi
AC_SUBST(MIRROR)
fi
-dnl --with-repo to specify a Fedora repository.
+dnl --with-repo to specify a repository.
AC_ARG_WITH([repo],
[AS_HELP_STRING([--with-repo],
- [set name of Fedora repository @<:@default=fedora-12@:>@])],
+ [set name of Fedora repository @<:@default=fedora-13@:>@])],
[],
- [with_repo=fedora-12])
+ [with_repo=fedora-13])
REPO="$with_repo"
AC_SUBST(REPO)
-AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
+AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of software repository.])
dnl Build the supermin appliance? Please see README file before
dnl enabling this option.
AC_ARG_ENABLE([supermin],
[AS_HELP_STRING([--enable-supermin],
[enable supermin appliance (see README) @<:@default=no@:>@])],
- [],
+ [AC_DEFINE([ENABLE_SUPERMIN],[1],[Supermin appliance enabled.])],
[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],
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.17])
-dnl hivex library (highly recommended).
+dnl libmagic (required)
+AC_CHECK_LIB([magic],[magic_file],[
+ AC_SUBST([LIBMAGIC], ["-lmagic"])
+ ],[
+ AC_MSG_FAILURE([libmagic is required])
+ ])
+AC_CHECK_HEADER([magic.h],[],[
+ AC_MSG_FAILURE([magic.h header file is required])
+ ])
+
+dnl libvirt (required)
+PKG_CHECK_MODULES([LIBVIRT], [libvirt])
+AC_SUBST([LIBVIRT_CFLAGS])
+AC_SUBST([LIBVIRT_LIBS])
+
+dnl libxml2 (required)
+PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
+AC_SUBST([LIBXML2_CFLAGS])
+AC_SUBST([LIBXML2_LIBS])
+
+dnl Augeas (required)
+PKG_CHECK_MODULES([AUGEAS], [augeas])
+AC_SUBST([AUGEAS_CFLAGS])
+AC_SUBST([AUGEAS_LIBS])
+
+dnl hivex library (required)
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"])
+PKG_CHECK_MODULES([HIVEX], [hivex])
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"])
+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).
-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.
+OCAMLC=no
+OCAMLFIND=no
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@:>@])],
+AC_ARG_ENABLE([ocaml],
+ AS_HELP_STRING([--disable-ocaml], [Disable OCaml language bindings]),
[],
- [enable_ocaml_viewer=no])
-AM_CONDITIONAL([BUILD_OCAML_VIEWER],[test "x$enable_ocaml_viewer" = "xyes"])
+ [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
+
+ dnl Optional xml-light for running the generator.
+ if test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"; then
+ AC_CHECK_OCAML_PKG([xml-light])
+ fi])
+AM_CONDITIONAL([HAVE_OCAML],
+ [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
+AM_CONDITIONAL([HAVE_XML_LIGHT],[test "x$OCAML_PKG_xml_light" != "xno"])
dnl Check for Perl (optional, for Perl bindings).
dnl XXX This isn't quite right, we should check for Perl devel library.
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])
fi
AM_CONDITIONAL([HAVE_PERL],
- [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+ [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
dnl Check for Python (optional, for Python bindings).
AC_CHECK_PROG([PYTHON],[python],[python],[no])
fi
AC_MSG_RESULT([not found])
done
+
+ old_LIBS="$LIBS"
+ LIBS="$LIBS -lpython$PYTHON_VERSION"
+ AC_CHECK_FUNCS([PyCapsule_New])
+ LIBS="$old_LIBS"
fi
AC_SUBST(PYTHON_PREFIX)
AC_SUBST(PYTHON_SITE_PACKAGES)
AM_CONDITIONAL([HAVE_PYTHON],
- [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
+ [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
dnl Check for Ruby and rake (optional, for Ruby bindings).
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" -a -n "$HAVE_LIBRUBY"])
+ [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
dnl Check for Java.
AC_ARG_WITH(java_home,
[with_java_home=check])
if test "x$with_java_home" != "xno"; then
- if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
+ if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
then
# Reject unsafe characters in $JAVA_HOME
jh_lf='
/usr/lib/jvm/java \
/usr/lib/jvm/java-6-openjdk
do
- if test -d $d -a -f $d/bin/java; then
+ if test -d $d && test -f $d/bin/java; then
JAVA_HOME=$d
break
fi
fi
AM_CONDITIONAL([HAVE_INSPECTOR],
- [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+ [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
AM_CONDITIONAL([HAVE_TOOLS],
- [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+ [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
+
+dnl po4a for translating man pages and POD files (optional).
+AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
+AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
+
+dnl 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 Library versioning.
MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
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([Makefile
+ generator/Makefile
src/Makefile fish/Makefile po/Makefile.in examples/Makefile
appliance/Makefile
appliance/debian/debirf.conf
gnulib/lib/Makefile
gnulib/tests/Makefile
fuse/Makefile
+ po-docs/Makefile
+ po-docs/ja/Makefile
+ php/Makefile
+ csharp/Makefile
ocaml/META perl/Makefile.PL])
AC_OUTPUT
if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
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-inspector ...................... "
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 "FUSE filesystem ..................... $HAVE_FUSE"
+echo "FUSE filesystem ..................... $enable_fuse"
echo
echo "If any optional component is configured 'no' when you expected 'yes'"
echo "then you should check the preceeding messages."