From bd5f973ac22046d1cd532847630e9ee10ebd8d76 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 25 Aug 2020 08:49:53 +0200 Subject: [PATCH 01/17] trace: fix creation of systemtap files The "exe_name" variable was renamed to exe['name'], so systemtap files fail to build. Reported-by: Peter Maydell Signed-off-by: Stefan Hajnoczi Signed-off-by: Paolo Bonzini --- meson.build | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meson.build b/meson.build index f0fe5f8799..f2aa5a7700 100644 --- a/meson.build +++ b/meson.build @@ -1029,14 +1029,14 @@ foreach target : target_dirs if 'CONFIG_TRACE_SYSTEMTAP' in config_host foreach stp: [ - {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe_name, 'install': false}, - {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe_name, 'install': true}, + {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, + {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, ] - custom_target(exe_name + stp['ext'], + custom_target(exe['name'] + stp['ext'], input: trace_events_all, - output: exe_name + stp['ext'], + output: exe['name'] + stp['ext'], capture: true, install: stp['install'], install_dir: config_host['qemu_datadir'] / '../systemtap/tapset', From 5f7e966b2748cab6f734a8b7347be8f77a35e2b3 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Sun, 23 Aug 2020 10:32:15 +0200 Subject: [PATCH 02/17] meson: Build qemu-nbd on macOS again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before switching to the meson build system, we used to compile qemu-nbd for macOS, too, which is especially important for running the iotests there. Commit b7c70bf2c5 disabled it by accident, since it did not take into consideration that the $bsd variable in the configure script was also set to "yes" on macOS. Fix it by enabling qemu-nbd on all systems but Windows now instead (which was likely the original intention of the old code in the configure script). Fixes: b7c70bf2c5 ("meson: qemu-{img,io,nbd}") Signed-off-by: Thomas Huth Acked-by: Eric Blake Reviewed-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index f2aa5a7700..38d0abc0ea 100644 --- a/meson.build +++ b/meson.build @@ -1081,7 +1081,7 @@ if have_tools qemu_io = executable('qemu-io', files('qemu-io.c'), dependencies: [block, qemuutil], install: true) qemu_block_tools += [qemu_img, qemu_io] - if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd') + if targetos != 'windows' qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), dependencies: [block, qemuutil], install: true) qemu_block_tools += [qemu_nbd] From 568ac779a4111484d9bf9fa7364a62d5d5cf9079 Mon Sep 17 00:00:00 2001 From: Roman Bolshakov Date: Sun, 23 Aug 2020 12:05:47 +0300 Subject: [PATCH 03/17] meson: Don't make object files for dtrace on macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dtrace on macOS uses unresolved symbols with a special prefix to define probes [1], only headers should be generated for USDT (dtrace(1)). But it doesn't support backwards compatible no-op -G flag [2] and implicit build rules fail. 1. https://markmail.org/message/6grq2ygr5nwdwsnb 2. https://markmail.org/message/5xrxt2w5m42nojkz Cc: Daniel P. Berrangé Cc: Cameron Esfahani Signed-off-by: Roman Bolshakov Reviewed-by: Daniel P. Berrangé Signed-off-by: Paolo Bonzini --- trace/meson.build | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/trace/meson.build b/trace/meson.build index 56e870848e..1c1fb31a61 100644 --- a/trace/meson.build +++ b/trace/meson.build @@ -39,12 +39,15 @@ foreach dir : [ '.' ] + trace_events_subdirs output: fmt.format('trace-dtrace', 'h'), input: trace_dtrace, command: [ 'dtrace', '-o', '@OUTPUT@', '-h', '-s', '@INPUT@' ]) - trace_dtrace_o = custom_target(fmt.format('trace-dtrace', 'o'), - output: fmt.format('trace-dtrace', 'o'), - input: trace_dtrace, - command: [ 'dtrace', '-o', '@OUTPUT@', '-G', '-s', '@INPUT@' ]) + trace_ss.add(trace_dtrace_h) + if host_machine.system() != 'darwin' + trace_dtrace_o = custom_target(fmt.format('trace-dtrace', 'o'), + output: fmt.format('trace-dtrace', 'o'), + input: trace_dtrace, + command: [ 'dtrace', '-o', '@OUTPUT@', '-G', '-s', '@INPUT@' ]) + trace_ss.add(trace_dtrace_o) + endif - trace_ss.add(trace_dtrace_h, trace_dtrace_o) genh += trace_dtrace_h endif endforeach From 72bfe8ea63f98bbe3e4d709462cc543fb0187d32 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Sun, 23 Aug 2020 12:26:17 +0200 Subject: [PATCH 04/17] scripts/qemu-version.sh: Add missing space before ']' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When configure has been run with --with-pkgversion=xyz, the shell complains about a missing ']' in this script. Fixes: 2c273f32d3 ("meson: generate qemu-version.h") Signed-off-by: Thomas Huth Reviewed-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- scripts/qemu-version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/qemu-version.sh b/scripts/qemu-version.sh index 4847385e42..03128c56a2 100755 --- a/scripts/qemu-version.sh +++ b/scripts/qemu-version.sh @@ -6,7 +6,7 @@ dir="$1" pkgversion="$2" version="$3" -if [ -z "$pkgversion"]; then +if [ -z "$pkgversion" ]; then cd "$dir" if [ -e .git ]; then pkgversion=$(git describe --match 'v*' --dirty | echo "") From c7c91a749b33412fe2a0a973799b6c44a3f73613 Mon Sep 17 00:00:00 2001 From: Bruce Rogers Date: Mon, 24 Aug 2020 09:52:12 -0600 Subject: [PATCH 05/17] meson: Fix meson build with --enable-libdaxctl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The daxctl library needs to be linked against when daxctl is asked for in configure. Signed-off-by: Bruce Rogers Reviewed-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- configure | 1 + meson.build | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/configure b/configure index b1e11397a8..a3f95f2b22 100755 --- a/configure +++ b/configure @@ -7467,6 +7467,7 @@ fi if test "$libdaxctl" = "yes" ; then echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak + echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak fi if test "$bochs" = "yes" ; then diff --git a/meson.build b/meson.build index 38d0abc0ea..b44901dfe1 100644 --- a/meson.build +++ b/meson.build @@ -380,6 +380,10 @@ if 'CONFIG_LIBPMEM' in config_host libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), link_args: config_host['LIBPMEM_LIBS'].split()) endif +libdaxctl = not_found +if 'CONFIG_LIBDAXCTL' in config_host + libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) +endif # Create config-host.h @@ -787,7 +791,7 @@ common_ss.add(files('cpus-common.c')) subdir('softmmu') -specific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem) +specific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) specific_ss.add(files('exec-vary.c')) specific_ss.add(when: 'CONFIG_TCG', if_true: files( 'fpu/softfloat.c', From 48e33de58f2d22cf7d30d3854cd0364fd809983d Mon Sep 17 00:00:00 2001 From: Bruce Rogers Date: Mon, 24 Aug 2020 09:52:36 -0600 Subject: [PATCH 06/17] meson: Fix chardev-baum.so name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Somehow in the conversion to meson, the module named chardev-baum got renamed to chardev-brlapi. Change it back. Signed-off-by: Bruce Rogers Reviewed-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- chardev/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chardev/meson.build b/chardev/meson.build index a46a6237be..7726837e34 100644 --- a/chardev/meson.build +++ b/chardev/meson.build @@ -39,7 +39,7 @@ chardev_modules = {} if config_host.has_key('CONFIG_BRLAPI') and sdl.found() module_ss = ss.source_set() module_ss.add(when: [sdl, brlapi], if_true: files('baum.c')) - chardev_modules += { 'brlapi': module_ss } + chardev_modules += { 'baum': module_ss } endif modules += { 'chardev': chardev_modules } From fb648e9cacf4209ddaa8ee67d1a87a9b78a001c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Mon, 24 Aug 2020 17:31:09 +0100 Subject: [PATCH 07/17] configure: default to PIE disabled on Windows platforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If Windows EXE files are built with -pie/-fpie they will fail to launch. Historically QEMU defaulted to disabling PIE for Windows, but this setting was accidentally lost when the configure summary text was removed in commit f9332757898a764d85e19d339ec421236e885b68 Author: Paolo Bonzini Date: Mon Feb 3 13:28:38 2020 +0100 meson: move summary to meson.build Signed-off-by: Paolo Bonzini Fixes: f9332757898a764d85e19d339ec421236e885b68 Signed-off-by: Daniel P. Berrangé Reviewed-by: Marc-André Lureau Reviewed-by: Thomas Huth Signed-off-by: Paolo Bonzini --- configure | 1 + 1 file changed, 1 insertion(+) diff --git a/configure b/configure index a3f95f2b22..0b78577236 100755 --- a/configure +++ b/configure @@ -857,6 +857,7 @@ MINGW32*) audio_drv_list="" fi supported_os="yes" + pie="no" ;; GNU/kFreeBSD) bsd="yes" From b7612f45da9ea3ff3488a34f2ffd39d0d94713fb Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Aug 2020 08:22:58 +0200 Subject: [PATCH 08/17] meson: move pixman detection to meson MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When pixman is not installed (or too old), but virglrenderer is available and "configure" has been run with "--disable-system", the build currently aborts when trying to compile vhost-user-gpu (since it requires pixman). Let's skip the build of vhost-user-gpu when pixman is not installed or too old. Instead of adding CONFIG_PIXMAN, it is simpler to move the detection to pixman. Based on a patch by Thomas Huth. Fixes: 9b52b17ba5 ("configure: Allow to build tools without pixman") Reported-by: Rafael Kitover Reported-by: Philippe Mathieu-Daudé Signed-off-by: Paolo Bonzini --- configure | 21 ++------------------- contrib/vhost-user-gpu/meson.build | 3 ++- meson.build | 13 ++++++++----- ui/meson.build | 4 +++- 4 files changed, 15 insertions(+), 26 deletions(-) diff --git a/configure b/configure index 0b78577236..9db9bb89b9 100755 --- a/configure +++ b/configure @@ -3923,20 +3923,6 @@ if test "$modules" = yes; then fi fi -########################################## -# pixman support probe - -if test "$softmmu" = "no"; then - pixman_cflags= - pixman_libs= -elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then - pixman_cflags=$($pkg_config --cflags pixman-1) - pixman_libs=$($pkg_config --libs pixman-1) -else - error_exit "pixman >= 0.21.8 not present." \ - "Please install the pixman devel package." -fi - ########################################## # libmpathpersist probe @@ -6649,8 +6635,8 @@ echo_version() { fi } -# prepend pixman and ftd flags after all config tests are done -QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" +# prepend ftd flags after all config tests are done +QEMU_CFLAGS="$fdt_cflags $QEMU_CFLAGS" QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" config_host_mak="config-host.mak" @@ -8056,9 +8042,6 @@ fi done # for target in $targets -echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak -echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak - if [ "$fdt" = "git" ]; then subdirs="$subdirs dtc" fi diff --git a/contrib/vhost-user-gpu/meson.build b/contrib/vhost-user-gpu/meson.build index 6c1459f54a..12d608c2e7 100644 --- a/contrib/vhost-user-gpu/meson.build +++ b/contrib/vhost-user-gpu/meson.build @@ -1,5 +1,6 @@ if 'CONFIG_TOOLS' in config_host and 'CONFIG_VIRGL' in config_host \ - and 'CONFIG_GBM' in config_host and 'CONFIG_LINUX' in config_host + and 'CONFIG_GBM' in config_host and 'CONFIG_LINUX' in config_host \ + and pixman.found() executable('vhost-user-gpu', files('vhost-user-gpu.c', 'virgl.c', 'vugbm.c'), link_with: libvhost_user, dependencies: [qemuutil, pixman, gbm, virgl], diff --git a/meson.build b/meson.build index b44901dfe1..86a6d13192 100644 --- a/meson.build +++ b/meson.build @@ -113,8 +113,11 @@ if 'CONFIG_GNUTLS' in config_host gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), link_args: config_host['GNUTLS_LIBS'].split()) endif -pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(), - link_args: config_host['PIXMAN_LIBS'].split()) +pixman = not_found +if have_system or have_tools + pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', + static: enable_static) +endif pam = not_found if 'CONFIG_AUTH_PAM' in config_host pam = cc.find_library('pam') @@ -981,6 +984,7 @@ foreach target : target_dirs lib = static_library('qemu-' + target, sources: arch_srcs + genh, + dependencies: arch_deps, objects: objects, include_directories: target_inc, c_args: c_args, @@ -1102,9 +1106,7 @@ if have_tools if 'CONFIG_VHOST_USER' in config_host subdir('contrib/libvhost-user') subdir('contrib/vhost-user-blk') - if 'CONFIG_LINUX' in config_host - subdir('contrib/vhost-user-gpu') - endif + subdir('contrib/vhost-user-gpu') subdir('contrib/vhost-user-input') subdir('contrib/vhost-user-scsi') endif @@ -1285,6 +1287,7 @@ summary_info += {'SDL image support': sdl_image.found()} # TODO: add back version summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} +summary_info += {'pixman': pixman.found()} # TODO: add back version summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} diff --git a/ui/meson.build b/ui/meson.build index 018c5698bf..393c9bcb53 100644 --- a/ui/meson.build +++ b/ui/meson.build @@ -1,3 +1,6 @@ +softmmu_ss.add(pixman) +specific_ss.add(pixman) # for the include path + softmmu_ss.add(files( 'console.c', 'cursor.c', @@ -9,7 +12,6 @@ softmmu_ss.add(files( 'keymaps.c', 'qemu-pixman.c', )) -softmmu_ss.add(pixman) softmmu_ss.add(when: 'CONFIG_LINUX', if_true: files('input-linux.c')) softmmu_ss.add(when: 'CONFIG_SPICE', if_true: files('spice-core.c', 'spice-input.c', 'spice-display.c')) From 760e4327cd88a079a0688a46b13746eda0d7da23 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Aug 2020 08:09:48 +0200 Subject: [PATCH 09/17] meson: skip SDL2 detection if --disable-system SDL is only used for system emulation; avoid spurious warnings for static --disable-system emulation by skipping the detection of the library if there are no system emulation targets. Reported-by: Peter Maydell Signed-off-by: Paolo Bonzini --- meson.build | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/meson.build b/meson.build index 86a6d13192..a3baa2dbf0 100644 --- a/meson.build +++ b/meson.build @@ -20,6 +20,16 @@ build_docs = 'BUILD_DOCS' in config_host config_host_data = configuration_data() genh = [] +target_dirs = config_host['TARGET_DIRS'].split() +have_user = false +have_system = false +foreach target : target_dirs + have_user = have_user or target.endswith('-user') + have_system = have_system or target.endswith('-softmmu') +endforeach +have_tools = 'CONFIG_TOOLS' in config_host +have_block = have_system or have_tools + add_project_arguments(config_host['QEMU_CFLAGS'].split(), native: false, language: ['c', 'objc']) add_project_arguments(config_host['QEMU_CXXFLAGS'].split(), @@ -227,9 +237,12 @@ if 'CONFIG_BRLAPI' in config_host brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) endif -sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static, - include_type: 'system') -sdl_image = not_found +sdl = not_found +if have_system + sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static, + include_type: 'system') + sdl_image = not_found +endif if sdl.found() # work around 2.0.8 bug sdl = declare_dependency(compile_args: '-Wno-undef', @@ -426,9 +439,6 @@ endforeach genh += configure_file(output: 'config-host.h', configuration: config_host_data) minikconf = find_program('scripts/minikconf.py') -target_dirs = config_host['TARGET_DIRS'].split() -have_user = false -have_system = false config_devices_mak_list = [] config_devices_h = {} config_target_h = {} @@ -449,7 +459,6 @@ kconfig_external_symbols = [ ] ignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] foreach target : target_dirs - have_user = have_user or target.endswith('-user') config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') config_target_data = configuration_data() @@ -472,8 +481,6 @@ foreach target : target_dirs configuration: config_target_data)} if target.endswith('-softmmu') - have_system = true - base_kconfig = [] foreach sym : kconfig_external_symbols if sym in config_target or sym in config_host @@ -503,8 +510,6 @@ foreach target : target_dirs endif config_target_mak += {target: config_target} endforeach -have_tools = 'CONFIG_TOOLS' in config_host -have_block = have_system or have_tools grepy = find_program('scripts/grepy.sh') # This configuration is used to build files that are shared by From 48328880fddf0145bdccc499160fb24dfabfbd41 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Aug 2020 08:04:15 +0200 Subject: [PATCH 10/17] configure: add --ninja option On Windows it is not possible to invoke a Python script as $NINJA. If ninja is present use it directly, while if it is not we can keep using ninjatool. Reported-by: Mark Cave-Ayland Signed-off-by: Paolo Bonzini --- configure | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 9db9bb89b9..6ecaff429b 100755 --- a/configure +++ b/configure @@ -568,6 +568,7 @@ rng_none="no" secret_keyring="" libdaxctl="" meson="" +ninja="" skip_meson=no gettext="" @@ -1052,6 +1053,8 @@ for opt do ;; --meson=*) meson="$optarg" ;; + --ninja=*) ninja="$optarg" + ;; --smbd=*) smbd="$optarg" ;; --extra-cflags=*) @@ -1820,6 +1823,7 @@ Advanced options (experts only): --python=PYTHON use specified python [$python] --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] --meson=MESON use specified meson [$meson] + --ninja=NINJA use specified ninja [$ninja] --smbd=SMBD use specified smbd [$smbd] --with-git=GIT use specified git [$git] --static enable static build [$static] @@ -2058,6 +2062,16 @@ case "$meson" in *) meson=$(command -v meson) ;; esac +# Probe for ninja (used for compdb) + +if test -z "$ninja"; then + for c in ninja ninja-build samu; do + if has $c; then + ninja=$(command -v "$c") + break + fi + done +fi # Check that the C compiler works. Doing this here before testing # the host CPU ensures that we had a valid CC to autodetect the @@ -8197,7 +8211,7 @@ fi mv $cross config-meson.cross rm -rf meson-private meson-info meson-logs -NINJA=$PWD/ninjatool $meson setup \ +NINJA=${ninja:-$PWD/ninjatool} $meson setup \ --prefix "${pre_prefix}$prefix" \ --libdir "${pre_prefix}$libdir" \ --libexecdir "${pre_prefix}$libexecdir" \ From 1917ec6d564d3fae404adedcbb6e8a724fba8894 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Aug 2020 03:24:11 -0400 Subject: [PATCH 11/17] meson: cleanup xkbcommon detection Signed-off-by: Paolo Bonzini --- meson.build | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/meson.build b/meson.build index a3baa2dbf0..90128616e5 100644 --- a/meson.build +++ b/meson.build @@ -165,10 +165,11 @@ libcap_ng = not_found if 'CONFIG_LIBCAP_NG' in config_host libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) endif -xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), static: enable_static, - include_type: 'system') -if xkbcommon.found() - xkbcommon = declare_dependency(dependencies: xkbcommon) +if get_option('xkbcommon').auto() and not have_system and not have_tools + xkbcommon = not_found +else + xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), + static: enable_static) endif slirp = not_found if config_host.has_key('CONFIG_SLIRP') @@ -1078,9 +1079,6 @@ endif # Don't build qemu-keymap if xkbcommon is not explicitly enabled # when we don't build tools or system -if get_option('xkbcommon').auto() and not have_system and not have_tools - xkbcommon = not_found -endif if xkbcommon.found() # used for the update-keymaps target, so include rules even if !have_tools qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, From ec14f888b875943cceefda214eeed27c6c6440a6 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Tue, 25 Aug 2020 23:23:10 +0100 Subject: [PATCH 12/17] meson: don't require CONFIG_VTE for the GTK UI Prevously CONFIG_VTE was not required to build QEMU with GTK UI support as not all platforms have VTE available (in particular Windows). Remove this requirement from the meson build system to enable QEMU to be built with GTK UI support for Windows once again. Signed-off-by: Mark Cave-Ayland Reviewed-by: Gerd Hoffmann Signed-off-by: Paolo Bonzini --- ui/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/meson.build b/ui/meson.build index 393c9bcb53..962e776569 100644 --- a/ui/meson.build +++ b/ui/meson.build @@ -44,7 +44,7 @@ if config_host.has_key('CONFIG_CURSES') ui_modules += {'curses' : curses_ss} endif -if config_host.has_key('CONFIG_GTK') and config_host.has_key('CONFIG_VTE') +if config_host.has_key('CONFIG_GTK') softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('win32-kbd-hook.c')) gtk_ss = ss.source_set() From 1a4db552d8ee7efe9202f712de874e52900a5915 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Aug 2020 17:02:03 +0200 Subject: [PATCH 13/17] ninjatool: quote dollars in variables Otherwise, dollars (such as in the special $ORIGIN rpath) are eaten by Make. Reported-by: Laurent Vivier Signed-off-by: Paolo Bonzini --- scripts/ninjatool.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/ninjatool.py b/scripts/ninjatool.py index cc77d51aa8..c33eafb5a0 100755 --- a/scripts/ninjatool.py +++ b/scripts/ninjatool.py @@ -834,7 +834,8 @@ class Ninja2Make(NinjaParserEventsWithVars): self.print() for targets in self.build_vars: for name, value in self.build_vars[targets].items(): - self.print('%s: private .var.%s := %s' % (targets, name, value)) + self.print('%s: private .var.%s := %s' % + (targets, name, value.replace('$', '$$'))) self.print() if not self.seen_default: default_targets = sorted(self.all_outs - self.all_ins, key=natural_sort_key) From cb23fd474035f7232a462dbcad8e61e6b1fa12f1 Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Wed, 26 Aug 2020 23:10:02 +0800 Subject: [PATCH 14/17] meson: fix relpath failure on Win32 On win32, os.path.relpath can raise an exception when computing for example C:/msys64/mingw64/x.exe relative to E:/path/qemu-build. Use try...except to avoid this, just using an absolute path in this case. Signed-off-by: Yonggang Luo Signed-off-by: Paolo Bonzini --- scripts/mtest2make.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py index bdb257bbd9..d7a51bf97e 100644 --- a/scripts/mtest2make.py +++ b/scripts/mtest2make.py @@ -53,9 +53,16 @@ i = 0 for test in json.load(sys.stdin): env = ' '.join(('%s=%s' % (shlex.quote(k), shlex.quote(v)) for k, v in test['env'].items())) - executable = os.path.relpath(test['cmd'][0]) + executable = test['cmd'][0] + try: + executable = os.path.relpath(executable) + except: + pass if test['workdir'] is not None: - test['cmd'][0] = os.path.relpath(test['cmd'][0], test['workdir']) + try: + test['cmd'][0] = os.path.relpath(executable, test['workdir']) + except: + test['cmd'][0] = executable else: test['cmd'][0] = executable cmd = '$(.test.env) %s %s' % (env, ' '.join((shlex.quote(x) for x in test['cmd']))) From 363743dacb5e6b0949dd2bc305bafc9594d2c799 Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Wed, 26 Aug 2020 23:10:03 +0800 Subject: [PATCH 15/17] meson: Mingw64 gcc doesn't recognize system include_type for sdl2 Windows paths result in command lines like "-isystemC:/msys64/..." that are not recognized by GCC. "include_type: 'system'" was only included in an attempt to fix the -Wundef warnings in SDL 2.0.8, but it was not effective. Therefore we can fix this by remove the include_type. Signed-off-by: Yonggang Luo Signed-off-by: Paolo Bonzini --- meson.build | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 90128616e5..e6aa44be54 100644 --- a/meson.build +++ b/meson.build @@ -240,8 +240,7 @@ endif sdl = not_found if have_system - sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static, - include_type: 'system') + sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) sdl_image = not_found endif if sdl.found() From 90756b2fb3b95df754008024e84e7f164718bf2f Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 25 Aug 2020 08:43:42 +0200 Subject: [PATCH 16/17] meson: set colorout to auto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dunno why the default is set to "always". IMHO it should be "auto", i.e. only colorize in case stdout goes to a terminal. Cluttering logfiles and confusing compiler message parsers with terminal control sequences is not nice ... Signed-off-by: Gerd Hoffmann Reviewed-by: Marc-André Lureau Signed-off-by: Paolo Bonzini --- meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index e6aa44be54..74f8ea0c2e 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,6 @@ project('qemu', ['c'], meson_version: '>=0.55.0', - default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 'b_lundef=false'], + default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', + 'b_lundef=false','b_colorout=auto'], version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) not_found = dependency('', required: false) From 74938f0645e25f191247af55d7bf27d9c62f4768 Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Wed, 26 Aug 2020 23:10:01 +0800 Subject: [PATCH 17/17] ninjatool: Fixes E$$: in generated Makefile.ninja Even though SIMPLE_PATH_RE is used with re.match (which anchors the match implictly to the beginning of the string) it also needs an end-of-string anchor in order to match the full path token. Otherwise, the match would succeed incorrectly for $ and : characters contained in the path, for example if the path starts with C:/ or E:/. Signed-off-by: Yonggang Luo Tested-by: Mark Cave-Ayland Signed-off-by: Paolo Bonzini --- scripts/ninjatool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ninjatool.py b/scripts/ninjatool.py index c33eafb5a0..ba6bd9a2a6 100755 --- a/scripts/ninjatool.py +++ b/scripts/ninjatool.py @@ -55,7 +55,7 @@ else: PATH_RE = r"[^$\s:|]+|\$[$ :]|\$[a-zA-Z0-9_-]+|\$\{[a-zA-Z0-9_.-]+\}" -SIMPLE_PATH_RE = re.compile(r"[^$\s:|]+") +SIMPLE_PATH_RE = re.compile(r"^[^$\s:|]+$") IDENT_RE = re.compile(r"[a-zA-Z0-9_.-]+$") STRING_RE = re.compile(r"(" + PATH_RE + r"|[\s:|])(?:\r?\n)?|.") TOPLEVEL_RE = re.compile(r"([=:#]|\|\|?|^ +|(?:" + PATH_RE + r")+)\s*|.")