From 671525bfddf3d2a0ba7ee4a17c14cd6da245a60e Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 29 Oct 2015 12:34:52 +0000 Subject: [PATCH] configure: Move qemu detection to separate file. --- configure.ac | 134 +--------------------------------------- m4/guestfs_qemu.m4 | 149 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+), 132 deletions(-) create mode 100644 m4/guestfs_qemu.m4 diff --git a/configure.ac b/configure.ac index a86d676f2..7782c3a37 100644 --- a/configure.ac +++ b/configure.ac @@ -741,138 +741,8 @@ AM_CONDITIONAL([HAVE_ZIP],[test "x$ZIP" != "xno"]) AC_PATH_PROGS([UNZIP],[unzip],[no]) AC_DEFINE_UNQUOTED([UNZIP],["$UNZIP"],[Name of unzip program.]) -dnl Check for QEMU for running binaries on this $host_cpu, fall -dnl back to basic 'qemu'. Allow the user to override it. -AS_CASE([$host_cpu], - [i@<:@456@:>@86],[qemu_cpu=i386], - [arm*],[qemu_cpu=arm], - [amd64],[qemu_cpu=x86_64], - [powerpc64 | ppc64le | powerpc64le],[qemu_cpu=ppc64], - [qemu_cpu=$host_cpu]) -default_qemu="qemu-kvm kvm qemu-system-$qemu_cpu qemu" -AC_ARG_WITH([qemu], - [AS_HELP_STRING([--with-qemu="bin1 bin2 ..."], - [set default QEMU binary @<:@default="[qemu-kvm] qemu-system- qemu"@:>@])], - dnl --with-qemu or --without-qemu: - [], - dnl neither option was given: - [with_qemu="$default_qemu"] -) - -AS_IF([test "x$with_qemu" = "xno"],[ - AC_MSG_WARN([qemu was disabled, libguestfs may not work at all]) - QEMU=no -],[ - AC_PATH_PROGS([QEMU],[$with_qemu],[no], - [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec]) - test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed]) - - AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.]) - - dnl Does the user wish to specify -M, -cpu or other qemu options? - AC_MSG_CHECKING([if the user specified extra options for qemu command line]) - AC_ARG_WITH([qemu-options], - [AS_HELP_STRING([--with-qemu-options="-M ... -cpu ... etc"], - [pass extra options for qemu command line @<:@default=no@:>@])], - [QEMU_OPTIONS="$withval"], - [QEMU_OPTIONS=no]) - AS_IF([test "x$QEMU_OPTIONS" = "xno"],[ - AC_MSG_RESULT([no]) - QEMU_OPTIONS= - ],[ - AC_MSG_RESULT([$QEMU_OPTIONS]) - ]) - AC_DEFINE_UNQUOTED([QEMU_OPTIONS],["$QEMU_OPTIONS"], - [Extra options for qemu command line.]) - - dnl Check that the chosen qemu has virtio-serial support. - dnl For historical reasons this can be disabled by setting - dnl vmchannel_test=no. - 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 - - AC_MSG_CHECKING([that $QEMU -version works]) - if $QEMU -version >&AS_MESSAGE_LOG_FD 2>&1; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - AC_MSG_FAILURE( -[$QEMU -version: command failed. - -This could be a very old version of qemu, or qemu might not be -working. -]) - fi - - AC_MSG_CHECKING([for $QEMU version >= 1]) - if $QEMU -version | grep -sq 'version @<:@1-9@:>@'; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - AC_MSG_FAILURE([$QEMU version must be >= 1.0.]) - fi - - dnl Unfortunately $QEMU -device \? won't just work. We probably - dnl need to add a cocktail of different arguments which differ - dnl on the various emulators. Thanks, qemu. - AC_MSG_CHECKING([what extra options we need to use for qemu feature tests]) - QEMU_OPTIONS_FOR_CONFIGURE= - # Note: the order we test these matters. - for opt in "-machine virt" "-machine accel=kvm:tcg" "-display none"; do - if $QEMU $QEMU_OPTIONS_FOR_CONFIGURE $opt -device \? >&AS_MESSAGE_LOG_FD 2>&1; then - QEMU_OPTIONS_FOR_CONFIGURE="$QEMU_OPTIONS_FOR_CONFIGURE $opt" - fi - done - AC_MSG_RESULT([$QEMU_OPTIONS_FOR_CONFIGURE]) - - AC_MSG_CHECKING([that $QEMU $QEMU_OPTIONS_FOR_CONFIGURE -device ? works]) - if $QEMU $QEMU_OPTIONS_FOR_CONFIGURE -device \? >&AS_MESSAGE_LOG_FD 2>&1; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - AC_MSG_FAILURE([$QEMU $QEMU_OPTIONS_FOR_CONFIGURE -device ? doesn't work.]) - fi - - AC_MSG_CHECKING([for virtio-serial support in $QEMU]) - if $QEMU $QEMU_OPTIONS_FOR_CONFIGURE -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 Check for QEMU. +m4_include([m4/guestfs_qemu.m4]) dnl Enable packet dumps when in verbose mode. This generates lots dnl of debug info, only useful for people debugging the RPC mechanism. diff --git a/m4/guestfs_qemu.m4 b/m4/guestfs_qemu.m4 new file mode 100644 index 000000000..20a681e31 --- /dev/null +++ b/m4/guestfs_qemu.m4 @@ -0,0 +1,149 @@ +# libguestfs +# Copyright (C) 2009-2015 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +dnl Check for QEMU for running binaries on this $host_cpu, fall +dnl back to basic 'qemu'. Allow the user to override it. +AS_CASE([$host_cpu], + [i@<:@456@:>@86],[qemu_cpu=i386], + [arm*],[qemu_cpu=arm], + [amd64],[qemu_cpu=x86_64], + [powerpc64 | ppc64le | powerpc64le],[qemu_cpu=ppc64], + [qemu_cpu=$host_cpu]) +default_qemu="qemu-kvm kvm qemu-system-$qemu_cpu qemu" +AC_ARG_WITH([qemu], + [AS_HELP_STRING([--with-qemu="bin1 bin2 ..."], + [set default QEMU binary @<:@default="[qemu-kvm] qemu-system- qemu"@:>@])], + dnl --with-qemu or --without-qemu: + [], + dnl neither option was given: + [with_qemu="$default_qemu"] +) + +AS_IF([test "x$with_qemu" = "xno"],[ + AC_MSG_WARN([qemu was disabled, libguestfs may not work at all]) + QEMU=no +],[ + AC_PATH_PROGS([QEMU],[$with_qemu],[no], + [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec]) + test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed]) + + AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.]) + + dnl Does the user wish to specify -M, -cpu or other qemu options? + AC_MSG_CHECKING([if the user specified extra options for qemu command line]) + AC_ARG_WITH([qemu-options], + [AS_HELP_STRING([--with-qemu-options="-M ... -cpu ... etc"], + [pass extra options for qemu command line @<:@default=no@:>@])], + [QEMU_OPTIONS="$withval"], + [QEMU_OPTIONS=no]) + AS_IF([test "x$QEMU_OPTIONS" = "xno"],[ + AC_MSG_RESULT([no]) + QEMU_OPTIONS= + ],[ + AC_MSG_RESULT([$QEMU_OPTIONS]) + ]) + AC_DEFINE_UNQUOTED([QEMU_OPTIONS],["$QEMU_OPTIONS"], + [Extra options for qemu command line.]) + + dnl Check that the chosen qemu has virtio-serial support. + dnl For historical reasons this can be disabled by setting + dnl vmchannel_test=no. + 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 + + AC_MSG_CHECKING([that $QEMU -version works]) + if $QEMU -version >&AS_MESSAGE_LOG_FD 2>&1; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE( +[$QEMU -version: command failed. + +This could be a very old version of qemu, or qemu might not be +working. +]) + fi + + AC_MSG_CHECKING([for $QEMU version >= 1]) + if $QEMU -version | grep -sq 'version @<:@1-9@:>@'; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([$QEMU version must be >= 1.0.]) + fi + + dnl Unfortunately $QEMU -device \? won't just work. We probably + dnl need to add a cocktail of different arguments which differ + dnl on the various emulators. Thanks, qemu. + AC_MSG_CHECKING([what extra options we need to use for qemu feature tests]) + QEMU_OPTIONS_FOR_CONFIGURE= + # Note: the order we test these matters. + for opt in "-machine virt" "-machine accel=kvm:tcg" "-display none"; do + if $QEMU $QEMU_OPTIONS_FOR_CONFIGURE $opt -device \? >&AS_MESSAGE_LOG_FD 2>&1; then + QEMU_OPTIONS_FOR_CONFIGURE="$QEMU_OPTIONS_FOR_CONFIGURE $opt" + fi + done + AC_MSG_RESULT([$QEMU_OPTIONS_FOR_CONFIGURE]) + + AC_MSG_CHECKING([that $QEMU $QEMU_OPTIONS_FOR_CONFIGURE -device ? works]) + if $QEMU $QEMU_OPTIONS_FOR_CONFIGURE -device \? >&AS_MESSAGE_LOG_FD 2>&1; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([$QEMU $QEMU_OPTIONS_FOR_CONFIGURE -device ? doesn't work.]) + fi + + AC_MSG_CHECKING([for virtio-serial support in $QEMU]) + if $QEMU $QEMU_OPTIONS_FOR_CONFIGURE -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 +])