File: guestfs-qemu.m4

package info (click to toggle)
libguestfs 1%3A1.44.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 118,932 kB
  • sloc: ansic: 458,017; ml: 51,424; sh: 13,191; java: 9,578; makefile: 7,931; cs: 6,328; haskell: 5,674; python: 3,871; perl: 3,528; erlang: 2,446; xml: 1,347; ruby: 350; pascal: 257; javascript: 157; lex: 135; yacc: 128; cpp: 10
file content (133 lines) | stat: -rw-r--r-- 4,830 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# libguestfs
# Copyright (C) 2009-2020 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-<host> 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 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
])