* fix --disable-tcg builds (Claudio)

* Fixes for macOS --enable-modules build and OpenBSD curses/iconv detection (myself)
 * Start preparing for meson 0.56 (myself)
 * Move directory configuration to meson (myself)
 * Start untangling qemu_init (myself)
 * Windows fixes (Sunil)
 * Remove -no-kbm (Thomas)
 -----BEGIN PGP SIGNATURE-----
 
 iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAl+WrxEUHHBib256aW5p
 QHJlZGhhdC5jb20ACgkQv/vSX3jHroNQAggAqfucqEQvz6s+DCPv2u572diyMvhe
 Y7vmaQF0qYKoAvy5OLqGlqXVsn8lwf19zJWo9Z7k4qNefWl84ii0J/kEmnolzTGq
 7Z0CRSnGbNQy9YedYXuymaR3E0VY+6lsPnzIpufQISzQRdjzT8OQ51DMAhc04oQl
 saXsts7y+om+tzvW2JFGtNsfFRUjcRKqjIAVfwneBXFW9TRD2epvYxz/S0o+XJwF
 eSiINvTqDxxPyy6XJykC46xf/TTfReHv6fQgTn7Jw3TQuo4m7qXLi5Vj8W1erZJv
 t3xhZNabt813T6ztNcAAuJ0srIn55Ac7Fuq3/1ecgeVD08ntmabe4WhKRg==
 =931x
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging

* fix --disable-tcg builds (Claudio)
* Fixes for macOS --enable-modules build and OpenBSD curses/iconv detection (myself)
* Start preparing for meson 0.56 (myself)
* Move directory configuration to meson (myself)
* Start untangling qemu_init (myself)
* Windows fixes (Sunil)
* Remove -no-kbm (Thomas)

# gpg: Signature made Mon 26 Oct 2020 11:12:17 GMT
# gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
# gpg:                issuer "pbonzini@redhat.com"
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full]
# gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [full]
# Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
#      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83

* remotes/bonzini-gitlab/tags/for-upstream:
  machine: move SMP initialization from vl.c
  machine: move UP defaults to class_base_init
  machine: remove deprecated -machine enforce-config-section option
  win32: boot broken when bind & data dir are the same
  WHPX: Fix WHPX build break
  configure: move install_blobs from configure to meson
  configure: remove unused variable from config-host.mak
  configure: move directory options from config-host.mak to meson
  configure: allow configuring localedir
  Makefile: separate meson rerun from the rest of the ninja invocation
  Remove deprecated -no-kvm option
  replay: do not build if TCG is not available
  qtest: unbreak non-TCG builds in bios-tables-test
  hw/core/qdev-clock: add a reference on aliased clocks
  do not use colons in test names
  meson: rewrite curses/iconv test
  build: fix macOS --enable-modules build

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
stable-6.0
Peter Maydell 2020-10-26 15:49:11 +00:00
commit a95e0396c8
34 changed files with 416 additions and 333 deletions

View File

@ -40,7 +40,7 @@ macos_xcode_task:
script:
- mkdir build
- cd build
- ../configure --extra-cflags='-Wno-error=deprecated-declarations'
- ../configure --extra-cflags='-Wno-error=deprecated-declarations' --enable-modules
--enable-werror --cc=clang || { cat config.log meson-logs/meson-log.txt; exit 1; }
- gmake -j$(sysctl -n hw.ncpu)
- gmake check V=1

View File

@ -92,39 +92,58 @@ endif
ifeq ($(NINJA),)
.PHONY: config-host.mak
x := $(shell rm -rf meson-private meson-info meson-logs)
else
export NINJA
endif
ifeq ($(wildcard build.ninja),)
.PHONY: config-host.mak
x := $(shell rm -rf meson-private meson-info meson-logs)
endif
ifeq ($(origin prefix),file)
.PHONY: config-host.mak
x := $(shell rm -rf meson-private meson-info meson-logs)
endif
# 1. ensure config-host.mak is up-to-date
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
@echo $@ is out-of-date, running configure
@echo config-host.mak is out-of-date, running configure
@if test -f meson-private/coredata.dat; then \
./config.status --skip-meson; \
else \
./config.status; \
./config.status && touch build.ninja.stamp; \
fi
# 2. ensure generated build files are up-to-date
# 2. meson.stamp exists if meson has run at least once (so ninja reconfigure
# works), but otherwise never needs to be updated
meson-private/coredata.dat: meson.stamp
meson.stamp: config-host.mak
@touch meson.stamp
# 3. ensure generated build files are up-to-date
ifneq ($(NINJA),)
# A separate rule is needed for Makefile dependencies to avoid -n
export NINJA
Makefile.ninja: build.ninja
$(quiet-@){ echo 'ninja-targets = \'; $(NINJA) -t targets all | sed 's/:.*//; $$!s/$$/ \\/'; } > $@
$(quiet-@){ \
echo 'ninja-targets = \'; \
$(NINJA) -t targets all | sed 's/:.*//; $$!s/$$/ \\/'; \
echo 'build-files = \'; \
$(NINJA) -t query build.ninja | sed -n '1,/^ input:/d; /^ outputs:/q; s/$$/ \\/p'; \
} > $@.tmp && mv $@.tmp $@
-include Makefile.ninja
# A separate rule is needed for Makefile dependencies to avoid -n
build.ninja: build.ninja.stamp
build.ninja.stamp: meson.stamp $(build-files)
$(NINJA) $(if $V,-v,) build.ninja && touch $@
endif
ifneq ($(MESON),)
# The dependency on config-host.mak ensures that meson has run
Makefile.mtest: build.ninja scripts/mtest2make.py config-host.mak
Makefile.mtest: build.ninja scripts/mtest2make.py
$(MESON) introspect --targets --tests --benchmarks | $(PYTHON) scripts/mtest2make.py > $@
-include Makefile.mtest
endif
# 3. Rules to bridge to other makefiles
# 4. Rules to bridge to other makefiles
ifneq ($(NINJA),)
NINJAFLAGS = $(if $V,-v,) \
@ -135,7 +154,10 @@ ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
ninja-cmd-goals += $(foreach t, $(.tests), $(.test.deps.$t))
makefile-targets := build.ninja ctags TAGS cscope dist clean uninstall
ninja-targets := $(filter-out $(makefile-targets), $(ninja-targets))
# "ninja -t targets" also lists all prerequisites. If build system
# files are marked as PHONY, however, Make will always try to execute
# "ninja build.ninja".
ninja-targets := $(filter-out $(build-files) $(makefile-targets), $(ninja-targets))
.PHONY: $(ninja-targets) run-ninja
$(ninja-targets): run-ninja
@ -214,7 +236,7 @@ distclean: clean
rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols
rm -f *-config-target.h *-config-devices.mak *-config-devices.h
rm -rf meson-private meson-logs meson-info compile_commands.json
rm -f Makefile.ninja Makefile.mtest
rm -f Makefile.ninja Makefile.mtest build.ninja.stamp meson.stamp
rm -f config.log
rm -f linux-headers/asm
rm -Rf .sdk

View File

@ -7,7 +7,6 @@ block_ss.add(files(
'backup-top.c',
'blkdebug.c',
'blklogwrites.c',
'blkreplay.c',
'blkverify.c',
'block-backend.c',
'block-copy.c',
@ -42,6 +41,8 @@ block_ss.add(files(
'write-threshold.c',
), zstd, zlib)
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
block_ss.add(when: 'CONFIG_QCOW1', if_true: files('qcow.c'))
block_ss.add(when: 'CONFIG_VDI', if_true: files('vdi.c'))
block_ss.add(when: 'CONFIG_CLOOP', if_true: files('cloop.c'))

64
configure vendored
View File

@ -362,8 +362,7 @@ cocoa="auto"
softmmu="yes"
linux_user="no"
bsd_user="no"
blobs="yes"
edk2_blobs="no"
blobs="true"
pkgversion=""
pie=""
qom_cast_debug="yes"
@ -962,6 +961,8 @@ for opt do
;;
--docdir=*) docdir="$optarg"
;;
--localedir=*) localedir="$optarg"
;;
--sysconfdir=*) sysconfdir="$optarg"
;;
--localstatedir=*) local_statedir="$optarg"
@ -971,7 +972,7 @@ for opt do
--host=*|--build=*|\
--disable-dependency-tracking|\
--sbindir=*|--sharedstatedir=*|\
--oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
--oldincludedir=*|--datarootdir=*|--infodir=*|\
--htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
# These switches are silently ignored, for compatibility with
# autoconf-generated configure scripts. This allows QEMU's
@ -1203,7 +1204,7 @@ for opt do
;;
--enable-membarrier) membarrier="yes"
;;
--disable-blobs) blobs="no"
--disable-blobs) blobs="false"
;;
--with-pkgversion=*) pkgversion="$optarg"
;;
@ -1521,7 +1522,6 @@ for opt do
esac
done
firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
libdir="${libdir:-$prefix/lib}"
libexecdir="${libexecdir:-$prefix/libexec}"
includedir="${includedir:-$prefix/include}"
@ -1532,7 +1532,7 @@ if test "$mingw32" = "yes" ; then
docdir="$prefix"
bindir="$prefix"
sysconfdir="$prefix"
local_statedir=
local_statedir="$prefix"
else
mandir="${mandir:-$prefix/share/man}"
datadir="${datadir:-$prefix/share}"
@ -1541,6 +1541,8 @@ else
sysconfdir="${sysconfdir:-$prefix/etc}"
local_statedir="${local_statedir:-$prefix/var}"
fi
firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
localedir="${localedir:-$datadir/locale}"
case "$cpu" in
ppc)
@ -1670,6 +1672,7 @@ Advanced options (experts only):
--static enable static build [$static]
--mandir=PATH install man pages in PATH
--datadir=PATH install firmware in PATH/$qemu_suffix
--localedir=PATH install translation in PATH/$qemu_suffix
--docdir=PATH install documentation in PATH/$qemu_suffix
--bindir=PATH install binaries in PATH
--libdir=PATH install libraries in PATH
@ -2217,18 +2220,6 @@ case " $target_list " in
;;
esac
for target in $target_list; do
case "$target" in
arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
edk2_blobs="yes"
;;
esac
done
# The EDK2 binaries are compressed with bzip2
if test "$edk2_blobs" = "yes" && ! has bzip2; then
error_exit "The bzip2 program is required for building QEMU"
fi
feature_not_found() {
feature=$1
remedy=$2
@ -3608,7 +3599,6 @@ else
if test "$found" = "no"; then
LIBS="$pthread_lib $LIBS"
fi
PTHREAD_LIB="$pthread_lib"
break
fi
done
@ -5725,13 +5715,6 @@ if test "$mingw32" = "yes" ; then
done
fi
qemu_confdir="$sysconfdir/$qemu_suffix"
qemu_moddir="$libdir/$qemu_suffix"
qemu_datadir="$datadir/$qemu_suffix"
qemu_localedir="$datadir/locale"
qemu_icondir="$datadir/icons"
qemu_desktopdir="$datadir/applications"
# We can only support ivshmem if we have eventfd
if [ "$eventfd" = "yes" ]; then
ivshmem=yes
@ -5898,23 +5881,6 @@ echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak
echo all: >> $config_host_mak
echo "prefix=$prefix" >> $config_host_mak
echo "bindir=$bindir" >> $config_host_mak
echo "libdir=$libdir" >> $config_host_mak
echo "libexecdir=$libexecdir" >> $config_host_mak
echo "includedir=$includedir" >> $config_host_mak
echo "sysconfdir=$sysconfdir" >> $config_host_mak
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
if test "$mingw32" = "no" ; then
echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
fi
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
echo "GIT=$git" >> $config_host_mak
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
echo "GIT_UPDATE=$git_update" >> $config_host_mak
@ -6297,9 +6263,6 @@ fi
if test "$vhost_user_fs" = "yes" ; then
echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
fi
if test "$blobs" = "yes" ; then
echo "INSTALL_BLOBS=yes" >> $config_host_mak
fi
if test "$iovec" = "yes" ; then
echo "CONFIG_IOVEC=y" >> $config_host_mak
fi
@ -6762,7 +6725,6 @@ echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
echo "EXESUF=$EXESUF" >> $config_host_mak
echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
echo "LIBS_QGA=$libs_qga" >> $config_host_mak
@ -6777,10 +6739,6 @@ if test "$fuzzing" != "no"; then
fi
echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
if test "$edk2_blobs" = "yes" ; then
echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
fi
if test "$rng_none" = "yes"; then
echo "CONFIG_RNG_NONE=y" >> $config_host_mak
fi
@ -6997,8 +6955,10 @@ NINJA=$ninja $meson setup \
--datadir "$datadir" \
--mandir "$mandir" \
--sysconfdir "$sysconfdir" \
--localedir "$localedir" \
--localstatedir "$local_statedir" \
-Ddocdir="$docdir" \
-Dqemu_firmwarepath="$firmwarepath" \
-Dqemu_suffix="$qemu_suffix" \
-Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
-Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
@ -7015,7 +6975,7 @@ NINJA=$ninja $meson setup \
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f \
-Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
-Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
-Ddocs=$docs -Dsphinx_build=$sphinx_build \
-Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
$cross_arg \
"$PWD" "$source_path"

View File

@ -9,6 +9,6 @@ if 'CONFIG_TOOLS' in config_host and 'CONFIG_VIRGL' in config_host \
configure_file(input: '50-qemu-gpu.json.in',
output: '50-qemu-gpu.json',
configuration: config_host,
configuration: { 'libexecdir' : get_option('libexecdir') },
install_dir: qemu_datadir / 'vhost-user')
endif

View File

@ -21,17 +21,6 @@ deprecated.
System emulator command line arguments
--------------------------------------
``-machine enforce-config-section=on|off`` (since 3.1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''
The ``enforce-config-section`` parameter is replaced by the
``-global migration.send-configuration={on|off}`` option.
``-no-kvm`` (since 1.3.0)
'''''''''''''''''''''''''
The ``-no-kvm`` argument is now a synonym for setting ``-accel tcg``.
``-usbdevice`` (since 2.10.0)
'''''''''''''''''''''''''''''
@ -504,6 +493,12 @@ System emulator command line arguments
The ``name`` parameter of the ``-net`` option was a synonym
for the ``id`` parameter, which should now be used instead.
``-no-kvm`` (removed in 5.2)
''''''''''''''''''''''''''''
The ``-no-kvm`` argument was a synonym for setting ``-machine accel=tcg``.
QEMU Machine Protocol (QMP) commands
------------------------------------
@ -688,6 +683,12 @@ Support for invalid topologies is removed, the user must ensure
topologies described with -smp include all possible cpus, i.e.
*sockets* * *cores* * *threads* = *maxcpus*.
``-machine enforce-config-section=on|off`` (removed 5.2)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
The ``enforce-config-section`` property was replaced by the
``-global migration.send-configuration={on|off}`` option.
Block devices
-------------

View File

@ -411,24 +411,6 @@ static bool machine_get_suppress_vmdesc(Object *obj, Error **errp)
return ms->suppress_vmdesc;
}
static void machine_set_enforce_config_section(Object *obj, bool value,
Error **errp)
{
MachineState *ms = MACHINE(obj);
warn_report("enforce-config-section is deprecated, please use "
"-global migration.send-configuration=on|off instead");
ms->enforce_config_section = value;
}
static bool machine_get_enforce_config_section(Object *obj, Error **errp)
{
MachineState *ms = MACHINE(obj);
return ms->enforce_config_section;
}
static char *machine_get_memory_encryption(Object *obj, Error **errp)
{
MachineState *ms = MACHINE(obj);
@ -857,11 +839,6 @@ static void machine_class_init(ObjectClass *oc, void *data)
object_class_property_set_description(oc, "suppress-vmdesc",
"Set on to disable self-describing migration");
object_class_property_add_bool(oc, "enforce-config-section",
machine_get_enforce_config_section, machine_set_enforce_config_section);
object_class_property_set_description(oc, "enforce-config-section",
"Set on to enforce configuration section migration");
object_class_property_add_str(oc, "memory-encryption",
machine_get_memory_encryption, machine_set_memory_encryption);
object_class_property_set_description(oc, "memory-encryption",
@ -876,8 +853,12 @@ static void machine_class_init(ObjectClass *oc, void *data)
static void machine_class_base_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
mc->max_cpus = mc->max_cpus ?: 1;
mc->min_cpus = mc->min_cpus ?: 1;
mc->default_cpus = mc->default_cpus ?: 1;
if (!object_class_is_abstract(oc)) {
MachineClass *mc = MACHINE_CLASS(oc);
const char *cname = object_class_get_name(oc);
assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
mc->name = g_strndup(cname,
@ -926,6 +907,13 @@ static void machine_initfn(Object *obj)
/* Register notifier when init is done for sysbus sanity checks */
ms->sysbus_notifier.notify = machine_init_notify;
qemu_add_machine_init_done_notifier(&ms->sysbus_notifier);
/* default to mc->default_cpus */
ms->smp.cpus = mc->default_cpus;
ms->smp.max_cpus = mc->default_cpus;
ms->smp.cores = 1;
ms->smp.threads = 1;
ms->smp.sockets = 1;
}
static void machine_finalize(Object *obj)

View File

@ -61,6 +61,14 @@ static NamedClockList *qdev_init_clocklist(DeviceState *dev, const char *name,
object_get_typename(OBJECT(clk)),
(Object **) &ncl->clock,
NULL, OBJ_PROP_LINK_STRONG);
/*
* Since the link property has the OBJ_PROP_LINK_STRONG flag, the clk
* object reference count gets decremented on property deletion.
* However object_property_add_link does not increment it since it
* doesn't know the linked object. Increment it here to ensure the
* aliased clock stays alive during this device life-time.
*/
object_ref(OBJECT(clk));
}
ncl->clock = clk;

View File

@ -268,7 +268,6 @@ struct MachineState {
char *firmware;
bool iommu;
bool suppress_vmdesc;
bool enforce_config_section;
bool enable_graphics;
char *memory_encryption;
char *ram_memdev_id;

View File

@ -29,8 +29,14 @@ if get_option('qemu_suffix').startswith('/')
error('qemu_suffix cannot start with a /')
endif
qemu_confdir = get_option('sysconfdir') / get_option('qemu_suffix')
qemu_datadir = get_option('datadir') / get_option('qemu_suffix')
qemu_docdir = get_option('docdir') / get_option('qemu_suffix')
qemu_moddir = get_option('libdir') / get_option('qemu_suffix')
qemu_desktopdir = get_option('datadir') / 'applications'
qemu_icondir = get_option('datadir') / 'icons'
config_host_data = configuration_data()
genh = []
@ -198,7 +204,7 @@ else
have_xen_pci_passthrough = false
endif
if not get_option('whpx').disabled() and targetos == 'windows'
if get_option('whpx').enabled() and cpu != 'x86_64'
if get_option('whpx').enabled() and host_machine.cpu() != 'x86_64'
error('WHPX requires 64-bit host')
elif cc.has_header('WinHvPlatform.h', required: get_option('whpx')) and \
cc.has_header('WinHvEmulation.h', required: get_option('whpx'))
@ -465,70 +471,89 @@ endif
iconv = not_found
curses = not_found
if have_system and not get_option('curses').disabled()
if not get_option('iconv').disabled()
libiconv = cc.find_library('iconv',
required: false,
static: enable_static)
if cc.links('''
#include <iconv.h>
int main(void) {
iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
return conv != (iconv_t) -1;
}''', dependencies: [libiconv])
iconv = declare_dependency(dependencies: [libiconv])
curses_test = '''
#include <locale.h>
#include <curses.h>
#include <wchar.h>
int main(void) {
wchar_t wch = L'w';
setlocale(LC_ALL, "");
resize_term(0, 0);
addwstr(L"wide chars\n");
addnwstr(&wch, 1);
add_wch(WACS_DEGREE);
return 0;
}'''
curses = dependency((targetos == 'windows' ? 'ncurses' : 'ncursesw'),
required: false,
method: 'pkg-config',
static: enable_static)
msg = get_option('curses').enabled() ? 'curses library not found' : ''
if curses.found()
if cc.links(curses_test, dependencies: [curses])
curses = declare_dependency(compile_args: '-DNCURSES_WIDECHAR', dependencies: [curses])
else
msg = 'curses package not usable'
curses = not_found
endif
endif
if get_option('iconv').enabled() and not iconv.found()
error('Cannot detect iconv API')
endif
if iconv.found()
curses_libname_list = ['ncursesw', 'ncurses', 'cursesw', 'pdcurses']
curses_test = '''
#include <locale.h>
#include <curses.h>
#include <wchar.h>
int main(void) {
wchar_t wch = L'w';
setlocale(LC_ALL, "");
resize_term(0, 0);
addwstr(L"wide chars\n");
addnwstr(&wch, 1);
add_wch(WACS_DEGREE);
return 0;
}'''
foreach curses_libname : curses_libname_list
libcurses = dependency(curses_libname,
required: false,
method: 'pkg-config',
static: enable_static)
if not libcurses.found()
dirs = ['/usr/include/ncursesw']
if targetos == 'windows'
dirs = []
endif
if not curses.found()
curses_compile_args = ['-DNCURSES_WIDECHAR']
has_curses_h = cc.has_header('curses.h', args: curses_compile_args)
if targetos != 'windows' and not has_curses_h
message('Trying with /usr/include/ncursesw')
curses_compile_args += ['-I/usr/include/ncursesw']
has_curses_h = cc.has_header('curses.h', args: curses_compile_args)
endif
if has_curses_h
curses_libname_list = (targetos == 'windows' ? ['pdcurses'] : ['ncursesw', 'cursesw'])
foreach curses_libname : curses_libname_list
libcurses = cc.find_library(curses_libname,
required: false,
dirs: dirs,
static: enable_static)
endif
if libcurses.found()
if cc.links(curses_test, dependencies: [libcurses])
curses = declare_dependency(compile_args: '-DNCURSES_WIDECHAR', dependencies: [libcurses])
break
if libcurses.found()
if cc.links(curses_test, args: curses_compile_args, dependencies: libcurses)
curses = declare_dependency(compile_args: curses_compile_args,
dependencies: [libcurses])
break
else
msg = 'curses library not usable'
endif
endif
endforeach
endif
endif
if not get_option('iconv').disabled()
foreach link_args : [ ['-liconv'], [] ]
# Programs will be linked with glib and this will bring in libiconv on FreeBSD.
# We need to use libiconv if available because mixing libiconv's headers with
# the system libc does not work.
# However, without adding glib to the dependencies -L/usr/local/lib will not be
# included in the command line and libiconv will not be found.
if cc.links('''
#include <iconv.h>
int main(void) {
iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
return conv != (iconv_t) -1;
}''', args: config_host['GLIB_CFLAGS'].split() + config_host['GLIB_LIBS'].split() + link_args)
iconv = declare_dependency(link_args: link_args, dependencies: glib)
break
endif
endforeach
endif
if not curses.found()
if iconv.found()
if get_option('curses').enabled()
error('Cannot find curses')
endif
elif get_option('curses').enabled()
error('iconv required for curses UI but not available')
if curses.found() and not iconv.found()
if get_option('iconv').enabled()
error('iconv not available')
endif
msg = 'iconv required for curses UI but not available'
curses = not_found
endif
if not curses.found() and msg != ''
if get_option('curses').enabled()
error(msg)
else
warning('iconv required for curses UI but not available, disabling')
warning(msg + ', disabling')
endif
endif
endif
@ -715,6 +740,19 @@ endif
# config-host.h #
#################
config_host_data.set_quoted('CONFIG_BINDIR', get_option('prefix') / get_option('bindir'))
config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
config_host_data.set_quoted('CONFIG_QEMU_DATADIR', get_option('prefix') / qemu_datadir)
config_host_data.set_quoted('CONFIG_QEMU_DESKTOPDIR', get_option('prefix') / qemu_desktopdir)
config_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('qemu_firmwarepath'))
config_host_data.set_quoted('CONFIG_QEMU_HELPERDIR', get_option('prefix') / get_option('libexecdir'))
config_host_data.set_quoted('CONFIG_QEMU_ICONDIR', get_option('prefix') / qemu_icondir)
config_host_data.set_quoted('CONFIG_QEMU_LOCALEDIR', get_option('prefix') / get_option('localedir'))
config_host_data.set_quoted('CONFIG_QEMU_LOCALSTATEDIR', get_option('prefix') / get_option('localstatedir'))
config_host_data.set_quoted('CONFIG_QEMU_MODDIR', get_option('prefix') / qemu_moddir)
config_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') / get_option('sysconfdir'))
config_host_data.set('CONFIG_COCOA', cocoa.found())
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
@ -737,9 +775,7 @@ config_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]
ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
arrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
strings = ['HOST_DSOSUF', 'CONFIG_IASL', 'bindir', 'prefix', 'qemu_confdir', 'qemu_datadir',
'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir',
'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath', 'sysconfdir']
strings = ['HOST_DSOSUF', 'CONFIG_IASL']
foreach k, v: config_host
if ignored.contains(k)
# do nothing
@ -1633,7 +1669,7 @@ foreach m : block_mods + softmmu_mods
name_prefix: '',
link_whole: m,
install: true,
install_dir: config_host['qemu_moddir'])
install_dir: qemu_moddir)
endforeach
softmmu_ss.add(authz, blockdev, chardev, crypto, io, qmp)
@ -1794,7 +1830,7 @@ foreach target : target_dirs
output: exe['name'] + stp['ext'],
capture: true,
install: stp['install'],
install_dir: qemu_datadir / '../systemtap/tapset',
install_dir: get_option('datadir') / 'systemtap/tapset',
command: [
tracetool, '--group=all', '--format=' + stp['fmt'],
'--binary=' + stp['bin'],
@ -1906,17 +1942,17 @@ endif
#########################
summary_info = {}
summary_info += {'Install prefix': config_host['prefix']}
summary_info += {'BIOS directory': config_host['qemu_datadir']}
summary_info += {'firmware path': config_host['qemu_firmwarepath']}
summary_info += {'binary directory': config_host['bindir']}
summary_info += {'library directory': config_host['libdir']}
summary_info += {'module directory': config_host['qemu_moddir']}
summary_info += {'libexec directory': config_host['libexecdir']}
summary_info += {'include directory': config_host['includedir']}
summary_info += {'config directory': config_host['sysconfdir']}
summary_info += {'Install prefix': get_option('prefix')}
summary_info += {'BIOS directory': qemu_datadir}
summary_info += {'firmware path': get_option('qemu_firmwarepath')}
summary_info += {'binary directory': get_option('bindir')}
summary_info += {'library directory': get_option('libdir')}
summary_info += {'module directory': qemu_moddir}
summary_info += {'libexec directory': get_option('libexecdir')}
summary_info += {'include directory': get_option('includedir')}
summary_info += {'config directory': get_option('sysconfdir')}
if targetos != 'windows'
summary_info += {'local state directory': config_host['qemu_localstatedir']}
summary_info += {'local state directory': get_option('localstatedir')}
summary_info += {'Manual directory': get_option('mandir')}
else
summary_info += {'local state directory': 'queried at runtime'}
@ -2028,7 +2064,7 @@ summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
summary_info += {'Install blobs': get_option('install_blobs')}
summary_info += {'KVM support': config_all.has_key('CONFIG_KVM')}
summary_info += {'HAX support': config_all.has_key('CONFIG_HAX')}
summary_info += {'HVF support': config_all.has_key('CONFIG_HVF')}

View File

@ -2,6 +2,8 @@ option('qemu_suffix', type : 'string', value: 'qemu',
description: 'Suffix for QEMU data/modules/config directories (can be empty)')
option('docdir', type : 'string', value : 'doc',
description: 'Base directory for documentation installation (can be empty)')
option('qemu_firmwarepath', type : 'string', value : '',
description: 'search PATH for firmware files')
option('sphinx_build', type : 'string', value : '',
description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')
@ -9,6 +11,8 @@ option('docs', type : 'feature', value : 'auto',
description: 'Documentations build support')
option('gettext', type : 'boolean', value : true,
description: 'Localization of the GTK+ user interface')
option('install_blobs', type : 'boolean', value : true,
description: 'install provided firmware blobs')
option('sparse', type : 'feature', value : 'auto',
description: 'sparse checker')

View File

@ -145,7 +145,6 @@ static void migrate_fd_cancel(MigrationState *s);
void migration_object_init(void)
{
MachineState *ms = MACHINE(qdev_get_machine());
Error *err = NULL;
/* This can only be called once. */
@ -170,15 +169,6 @@ void migration_object_init(void)
error_report_err(err);
exit(1);
}
/*
* We cannot really do this in migration_instance_init() since at
* that time global properties are not yet applied, then this
* value will be definitely replaced by something else.
*/
if (ms->enforce_config_section) {
current_migration->send_configuration = true;
}
}
void migration_shutdown(void)

View File

@ -7,7 +7,6 @@ softmmu_ss.add(files(
'eth.c',
'filter-buffer.c',
'filter-mirror.c',
'filter-replay.c',
'filter-rewriter.c',
'filter.c',
'hub.c',
@ -17,6 +16,8 @@ softmmu_ss.add(files(
'util.c',
))
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('filter-replay.c'))
softmmu_ss.add(when: 'CONFIG_L2TPV3', if_true: files('l2tpv3.c'))
softmmu_ss.add(when: slirp, if_true: files('slirp.c'))
softmmu_ss.add(when: ['CONFIG_VDE', vde], if_true: files('vde.c'))

View File

@ -8,7 +8,7 @@ foreach f: [
]
configure_file(input: files(f),
output: f,
configuration: {'DATADIR': config_host['qemu_datadir']},
install: install_blobs,
configuration: {'DATADIR': qemu_datadir},
install: get_option('install_blobs'),
install_dir: qemu_datadir / 'firmware')
endforeach

View File

@ -1,7 +1,8 @@
bzip2 = find_program('bzip2')
install_blobs = 'INSTALL_BLOBS' in config_host
if 'DECOMPRESS_EDK2_BLOBS' in config_host
if 'arm-softmmu' in target_dirs or \
'aarch64-softmmu' in target_dirs or \
'i386-softmmu' in target_dirs or \
'x86_64-softmmu' in target_dirs
bzip2 = find_program('bzip2', required: true)
fds = [
'edk2-aarch64-code.fd',
'edk2-arm-code.fd',
@ -18,7 +19,7 @@ if 'DECOMPRESS_EDK2_BLOBS' in config_host
output: f,
input: '@0@.bz2'.format(f),
capture: true,
install: install_blobs,
install: get_option('install_blobs'),
install_dir: qemu_datadir,
command: [ bzip2, '-dc', '@INPUT0@' ])
endforeach
@ -85,8 +86,8 @@ blobs = files(
'npcm7xx_bootrom.bin',
)
if install_blobs
install_data(blobs, install_dir: config_host['qemu_datadir'])
if get_option('install_blobs')
install_data(blobs, install_dir: qemu_datadir)
endif
subdir('descriptors')

View File

@ -34,7 +34,6 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
" dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n"
" suppress-vmdesc=on|off disables self-describing migration (default=off)\n"
" nvdimm=on|off controls NVDIMM support (default=off)\n"
" enforce-config-section=on|off enforce configuration section migration (default=off)\n"
" memory-encryption=@var{} memory encryption object to use (default=none)\n"
" hmat=on|off controls ACPI HMAT support (default=off)\n",
QEMU_ARCH_ALL)
@ -91,13 +90,6 @@ SRST
``nvdimm=on|off``
Enables or disables NVDIMM support. The default is off.
``enforce-config-section=on|off``
If ``enforce-config-section`` is set to on, force migration code
to send configuration section even if the machine-type sets the
``migration.send-configuration`` property to off. NOTE: this
parameter is deprecated. Please use ``-global``
``migration.send-configuration``\ =on\|off instead.
``memory-encryption=``
Memory encryption object to use. The default is none.
@ -4351,9 +4343,6 @@ SRST
Enable FIPS 140-2 compliance mode.
ERST
HXCOMM Deprecated by -accel tcg
DEF("no-kvm", 0, QEMU_OPTION_no_kvm, "", QEMU_ARCH_I386)
DEF("msg", HAS_ARG, QEMU_OPTION_msg,
"-msg [timestamp[=on|off]][,guest-name=[on|off]]\n"
" control error message format\n"

View File

@ -1,4 +1,4 @@
softmmu_ss.add(files(
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files(
'replay.c',
'replay-internal.c',
'replay-events.c',
@ -10,4 +10,4 @@ softmmu_ss.add(files(
'replay-audio.c',
'replay-random.c',
'replay-debugging.c',
))
), if_false: files('stubs-system.c'))

View File

@ -0,0 +1,96 @@
#include "qemu/osdep.h"
#include "sysemu/replay.h"
#include "ui/input.h"
void replay_input_event(QemuConsole *src, InputEvent *evt)
{
qemu_input_event_send_impl(src, evt);
}
void replay_input_sync_event(void)
{
qemu_input_event_sync_impl();
}
void replay_add_blocker(Error *reason)
{
}
void replay_audio_in(size_t *recorded, void *samples, size_t *wpos, size_t size)
{
}
void replay_audio_out(size_t *played)
{
}
void replay_breakpoint(void)
{
}
bool replay_can_snapshot(void)
{
return true;
}
void replay_configure(struct QemuOpts *opts)
{
}
void replay_flush_events(void)
{
}
void replay_gdb_attached(void)
{
}
bool replay_running_debug(void)
{
return false;
}
void replay_shutdown_request(ShutdownCause cause)
{
}
void replay_start(void)
{
}
void replay_vmstate_init(void)
{
}
#include "monitor/monitor.h"
#include "monitor/hmp.h"
#include "qapi/qapi-commands-replay.h"
#include "qapi/error.h"
#include "qemu/error-report.h"
void hmp_info_replay(Monitor *mon, const QDict *qdict)
{
error_report("replay support not available");
}
void hmp_replay_break(Monitor *mon, const QDict *qdict)
{
error_report("replay support not available");
}
void hmp_replay_delete_break(Monitor *mon, const QDict *qdict)
{
error_report("replay support not available");
}
void hmp_replay_seek(Monitor *mon, const QDict *qdict)
{
error_report("replay support not available");
}
ReplayInfo *qmp_query_replay(Error **errp)
{
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
"replay support not available");
return NULL;
}
void qmp_replay_break(int64_t icount, Error **errp)
{
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
"replay support not available");
}
void qmp_replay_delete_break(Error **errp)
{
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
"replay support not available");
}
void qmp_replay_seek(int64_t icount, Error **errp)
{
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
"replay support not available");
}

View File

@ -15,12 +15,11 @@ def filter_lines_set(stdout, from_staticlib):
linesSet = set()
for line in stdout.splitlines():
tokens = line.split(b' ')
if len(tokens) >= 1:
if len(tokens) > 1:
if from_staticlib and tokens[1] == b'U':
continue
if not from_staticlib and tokens[1] != b'U':
continue
if len(tokens) >= 2:
if from_staticlib and tokens[1] == b'U':
continue
if not from_staticlib and tokens[1] != b'U':
continue
new_line = b'-Wl,-u,' + tokens[0]
if not new_line in linesSet:
linesSet.add(new_line)

View File

@ -3506,10 +3506,6 @@ void qemu_init(int argc, char **argv, char **envp)
exit(1);
}
break;
case QEMU_OPTION_no_kvm:
olist = qemu_find_opts("machine");
qemu_opts_parse_noisily(olist, "accel=tcg", false);
break;
case QEMU_OPTION_accel:
accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"),
optarg, true);
@ -3978,18 +3974,6 @@ void qemu_init(int argc, char **argv, char **envp)
exit(0);
}
/* machine_class: default to UP */
machine_class->max_cpus = machine_class->max_cpus ?: 1;
machine_class->min_cpus = machine_class->min_cpus ?: 1;
machine_class->default_cpus = machine_class->default_cpus ?: 1;
/* default to machine_class->default_cpus */
current_machine->smp.cpus = machine_class->default_cpus;
current_machine->smp.max_cpus = machine_class->default_cpus;
current_machine->smp.cores = 1;
current_machine->smp.threads = 1;
current_machine->smp.sockets = 1;
machine_class->smp_parse(current_machine,
qemu_opts_find(qemu_find_opts("smp-opts"), NULL));

View File

@ -33,7 +33,6 @@ stub_ss.add(files('qtest.c'))
stub_ss.add(files('ram-block.c'))
stub_ss.add(files('ramfb.c'))
stub_ss.add(files('replay.c'))
stub_ss.add(files('replay-user.c'))
stub_ss.add(files('runstate-check.c'))
stub_ss.add(files('set-fd-handler.c'))
stub_ss.add(files('sysbus.c'))
@ -47,6 +46,9 @@ stub_ss.add(files('vmstate.c'))
stub_ss.add(files('vm-stop.c'))
stub_ss.add(files('win32-kbd-hook.c'))
stub_ss.add(files('cpu-synchronize-state.c'))
if have_block
stub_ss.add(files('replay-tools.c'))
endif
if have_system
stub_ss.add(files('semihost.c'))
stub_ss.add(files('xen-hw-stub.c'))

View File

@ -0,0 +1,83 @@
#include "qemu/osdep.h"
#include "sysemu/replay.h"
#include "block/aio.h"
bool replay_events_enabled(void)
{
return false;
}
int64_t replay_save_clock(unsigned int kind, int64_t clock, int64_t raw_icount)
{
abort();
return 0;
}
int64_t replay_read_clock(unsigned int kind)
{
abort();
return 0;
}
uint64_t replay_get_current_icount(void)
{
return 0;
}
void replay_bh_schedule_event(QEMUBH *bh)
{
qemu_bh_schedule(bh);
}
void replay_bh_schedule_oneshot_event(AioContext *ctx,
QEMUBHFunc *cb, void *opaque)
{
aio_bh_schedule_oneshot(ctx, cb, opaque);
}
bool replay_checkpoint(ReplayCheckpoint checkpoint)
{
return true;
}
void replay_mutex_lock(void)
{
}
void replay_mutex_unlock(void)
{
}
void replay_register_char_driver(Chardev *chr)
{
}
void replay_chr_be_write(Chardev *s, uint8_t *buf, int len)
{
abort();
}
void replay_char_write_event_save(int res, int offset)
{
abort();
}
void replay_char_write_event_load(int *res, int *offset)
{
abort();
}
int replay_char_read_all_load(uint8_t *buf)
{
abort();
}
void replay_char_read_all_save_error(int res)
{
abort();
}
void replay_char_read_all_save_buf(uint8_t *buf, int offset)
{
abort();
}

View File

@ -1,9 +0,0 @@
#include "qemu/osdep.h"
#include "sysemu/replay.h"
#include "sysemu/sysemu.h"
void replay_bh_schedule_oneshot_event(AioContext *ctx,
QEMUBHFunc *cb, void *opaque)
{
aio_bh_schedule_oneshot(ctx, cb, opaque);
}

View File

@ -3,83 +3,10 @@
ReplayMode replay_mode;
int64_t replay_save_clock(unsigned int kind, int64_t clock, int64_t raw_icount)
{
abort();
return 0;
}
int64_t replay_read_clock(unsigned int kind)
{
abort();
return 0;
}
bool replay_checkpoint(ReplayCheckpoint checkpoint)
{
return true;
}
bool replay_events_enabled(void)
{
return false;
}
void replay_finish(void)
{
}
void replay_register_char_driver(Chardev *chr)
{
}
void replay_chr_be_write(Chardev *s, uint8_t *buf, int len)
{
abort();
}
void replay_char_write_event_save(int res, int offset)
{
abort();
}
void replay_char_write_event_load(int *res, int *offset)
{
abort();
}
int replay_char_read_all_load(uint8_t *buf)
{
abort();
}
void replay_char_read_all_save_error(int res)
{
abort();
}
void replay_char_read_all_save_buf(uint8_t *buf, int offset)
{
abort();
}
void replay_block_event(QEMUBH *bh, uint64_t id)
{
}
uint64_t blkreplay_next_id(void)
{
return 0;
}
void replay_mutex_lock(void)
{
}
void replay_mutex_unlock(void)
{
}
void replay_save_random(int ret, void *buf, size_t len)
{
}
@ -89,11 +16,6 @@ int replay_read_random(void *buf, size_t len)
return 0;
}
uint64_t replay_get_current_icount(void)
{
return 0;
}
bool replay_reverse_step(void)
{
return false;

View File

@ -603,7 +603,7 @@ fptest_rounding_args = ['-r', 'all']
# FIXME: i32_to_extF80 (broken), i64_to_extF80 (broken)
# extF80_roundToInt (broken)
foreach k, v : softfloat_conv_tests
test('fp-test:' + k, fptest,
test('fp-test-' + k, fptest,
args: fptest_args + fptest_rounding_args + v.split(),
suite: ['softfloat', 'softfloat-conv'])
endforeach
@ -612,13 +612,13 @@ endforeach
# extF80_{mulAdd} (missing)
foreach k, v : softfloat_tests
extF80_broken = ['lt_quiet', 'rem'].contains(k)
test('fp-test:' + k, fptest,
test('fp-test-' + k, fptest,
args: fptest_args + fptest_rounding_args +
['f16_' + k, 'f32_' + k, 'f64_' + k, 'f128_' + k] +
(extF80_broken ? [] : ['extF80_' + k]),
suite: ['softfloat', 'softfloat-' + v])
endforeach
test('fp-test:mulAdd', fptest,
test('fp-test-mulAdd', fptest,
# no fptest_rounding_args
args: fptest_args +
['f16_mulAdd', 'f32_mulAdd', 'f64_mulAdd', 'f128_mulAdd'],

View File

@ -122,8 +122,3 @@ void qemu_bh_delete(QEMUBH *bh)
{
g_free(bh);
}
void replay_bh_schedule_event(QEMUBH *bh)
{
bh->cb(bh->opaque);
}

View File

@ -127,6 +127,9 @@ static void free_test_data(test_data *data)
{
int i;
if (!data->tables) {
return;
}
for (i = 0; i < data->tables->len; ++i) {
cleanup_table_descriptor(&g_array_index(data->tables, AcpiSdtTable, i));
}
@ -656,6 +659,13 @@ static void test_acpi_one(const char *params, test_data *data)
char *args;
bool use_uefi = data->uefi_fl1 && data->uefi_fl2;
#ifndef CONFIG_TCG
if (data->tcg_only) {
g_test_skip("TCG disabled, skipping ACPI tcg_only test");
return;
}
#endif /* CONFIG_TCG */
if (use_uefi) {
/*
* TODO: convert '-drive if=pflash' to new syntax (see e33763be7cd3)

View File

@ -252,7 +252,7 @@ foreach dir : target_dirs
}
endif
# FIXME: missing dependency on the emulator binary and qemu-img
test('qtest-@0@: @1@'.format(target_base, test),
test('qtest-@0@/@1@'.format(target_base, test),
qtest_executables[test],
depends: [test_deps, qtest_emulator],
env: qtest_env,

View File

@ -31,6 +31,9 @@ static int query_error_class(const char *cmd)
#ifndef CONFIG_SPICE
{ "query-spice", ERROR_CLASS_COMMAND_NOT_FOUND },
#endif
#ifndef CONFIG_TCG
{ "query-replay", ERROR_CLASS_COMMAND_NOT_FOUND },
#endif
#ifndef CONFIG_VNC
{ "query-vnc", ERROR_CLASS_GENERIC_ERROR },
{ "query-vnc-servers", ERROR_CLASS_GENERIC_ERROR },

View File

@ -15,5 +15,5 @@ executable('virtiofsd', files(
configure_file(input: '50-qemu-virtiofsd.json.in',
output: '50-qemu-virtiofsd.json',
configuration: config_host,
configuration: { 'libexecdir' : get_option('libexecdir') },
install_dir: qemu_datadir / 'vhost-user')

View File

@ -2,12 +2,12 @@ foreach s: [16, 24, 32, 48, 64, 128, 256, 512]
s = '@0@x@0@'.format(s.to_string())
install_data('qemu_@0@.png'.format(s),
rename: 'qemu.png',
install_dir: config_host['qemu_icondir'] / 'hicolor' / s / 'apps')
install_dir: qemu_icondir / 'hicolor' / s / 'apps')
endforeach
install_data('qemu_32x32.bmp',
rename: 'qemu.bmp',
install_dir: config_host['qemu_icondir'] / 'hicolor' / '32x32' / 'apps')
install_dir: qemu_icondir / 'hicolor' / '32x32' / 'apps')
install_data('qemu.svg',
install_dir: config_host['qemu_icondir'] / 'hicolor' / 'scalable' / 'apps')
install_dir: qemu_icondir / 'hicolor' / 'scalable' / 'apps')

View File

@ -139,7 +139,7 @@ subdir('shader')
if have_system
subdir('icons')
install_data('qemu.desktop', install_dir: config_host['qemu_desktopdir'])
install_data('qemu.desktop', install_dir: qemu_desktopdir)
endif
modules += {'ui': ui_modules}

View File

@ -949,7 +949,7 @@ char *get_relocated_path(const char *dir)
bindir += len_bindir;
dir = next_component(dir, &len_dir);
bindir = next_component(bindir, &len_bindir);
} while (len_dir == len_bindir && !memcmp(dir, bindir, len_dir));
} while (len_dir && len_dir == len_bindir && !memcmp(dir, bindir, len_dir));
/* Ascend from bindir to the common prefix with dir. */
while (len_bindir) {

View File

@ -1,2 +0,0 @@
@set VERSION @VERSION@
@set CONFDIR @qemu_confdir@