mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 20:19:44 +00:00
* Add definitions of terms for CI/testing
* Fix g_setenv problem discovered by Coverity * Gitlab CI improvements * Build system improvements (configure script + meson.build) * Removal of the show-fixed-bugs.sh script * Clean up of the sdl and curses options -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmE15LURHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbWeIA//fJB7Tnj3YzUizED6cSwtT5NoxWHQw9Cn uEhEWJj6Ng5sQ6SYHJ43kPqBkscHo+eK9ayt8mfFPTzz2NTE51aBqGsA0ZGXGNjH 3ORqx12cVthOD6GU/wY12nAF8efHwum/II507kH1GdZpO6CK3dPBNvFl/qhPtjIb srzxCJCFwgipsH4CI5YWxOLueAsMPZ6d8b9TGmobRi26ASg2dVCk2yB6l8VO0Fbe ydWDKnz9tnHz4r1sbfWjDwD72rFpPngYAaI7lc0n6b9Q1ilkhjwIieTEZhl+jpH8 Be3YtIorzvI/rti+vwAGMcLt4xLy9qJb8a8dxHbpJAvxQSvNsjK2wYZVAqe6xCuj 65+39cqRtB3VS69GI/Y/fsBj+dCCIeLXDiTsOyrs/JaBkvulhRdekGiI5l42QgAD xdZyciwsTc+NpsldoxOP4mg5mLXu8rxwrJV93j0V3Cdnfjz0jPsXHSt52AIM2iiW TCrs2z+wRbjHU7FMdbOOkDTeBn1rBq4dzxkVpdL8+9SA8TG+FWz2F+1hsWWDtnI7 DFlWAC7jeLiW4+sDXIpcPBZ6mpbK7xefZBa8/l3DSkD1cl5/JOc21g6OzSBJQfb0 x9icJXBhIhTI1yrmmUlO5SOlqnfXxSY9IVvuWnO0FKvUe8tVSNZ9T2MPtTy9zIep 8ohIcOsBIJ0= =t3uT -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/thuth-gitlab/tags/pull-request-2021-09-06' into staging * Add definitions of terms for CI/testing * Fix g_setenv problem discovered by Coverity * Gitlab CI improvements * Build system improvements (configure script + meson.build) * Removal of the show-fixed-bugs.sh script * Clean up of the sdl and curses options # gpg: Signature made Mon 06 Sep 2021 10:51:49 BST # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * remotes/thuth-gitlab/tags/pull-request-2021-09-06: softmmu/vl: Deprecate the -sdl and -curses option softmmu/vl: Deprecate the old grab options softmmu/vl: Add a "grab-mod" parameter to the -display sdl option scripts: Remove the "show-fixed-bugs.sh" file configure / meson: Move the GBM handling to meson.build meson.build: Don't use internal libfdt if the user requested the system libfdt meson.build: Fix the check for a usable libfdt gitlab-ci: Don't try to use the system libfdt in the debian job libqtest: check for g_setenv() failure docs: add definitions of terms for CI/testing Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
935efca6c2
@ -74,7 +74,6 @@ build-system-debian:
|
|||||||
job: amd64-debian-container
|
job: amd64-debian-container
|
||||||
variables:
|
variables:
|
||||||
IMAGE: debian-amd64
|
IMAGE: debian-amd64
|
||||||
CONFIGURE_ARGS: --enable-fdt=system
|
|
||||||
TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
|
TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
|
||||||
riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
|
riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
|
||||||
MAKE_CHECK_ARGS: check-build
|
MAKE_CHECK_ARGS: check-build
|
||||||
|
14
configure
vendored
14
configure
vendored
@ -3451,13 +3451,6 @@ esac
|
|||||||
##########################################
|
##########################################
|
||||||
# opengl probe (for sdl2, gtk)
|
# opengl probe (for sdl2, gtk)
|
||||||
|
|
||||||
gbm="no"
|
|
||||||
if $pkg_config gbm; then
|
|
||||||
gbm_cflags="$($pkg_config --cflags gbm)"
|
|
||||||
gbm_libs="$($pkg_config --libs gbm)"
|
|
||||||
gbm="yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$opengl" != "no" ; then
|
if test "$opengl" != "no" ; then
|
||||||
epoxy=no
|
epoxy=no
|
||||||
if $pkg_config epoxy; then
|
if $pkg_config epoxy; then
|
||||||
@ -4688,13 +4681,6 @@ if test "$opengl" = "yes" ; then
|
|||||||
echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
|
echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$gbm" = "yes" ; then
|
|
||||||
echo "CONFIG_GBM=y" >> $config_host_mak
|
|
||||||
echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
|
|
||||||
echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if test "$avx2_opt" = "yes" ; then
|
if test "$avx2_opt" = "yes" ; then
|
||||||
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
|
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
if 'CONFIG_TOOLS' in config_host and virgl.found() \
|
if 'CONFIG_TOOLS' in config_host and virgl.found() and gbm.found() \
|
||||||
and 'CONFIG_GBM' in config_host and 'CONFIG_LINUX' in config_host \
|
and 'CONFIG_LINUX' in config_host and pixman.found()
|
||||||
and pixman.found()
|
|
||||||
executable('vhost-user-gpu', files('vhost-user-gpu.c', 'virgl.c', 'vugbm.c'),
|
executable('vhost-user-gpu', files('vhost-user-gpu.c', 'virgl.c', 'vugbm.c'),
|
||||||
dependencies: [qemuutil, pixman, gbm, virgl, vhost_user, opengl],
|
dependencies: [qemuutil, pixman, gbm, virgl, vhost_user, opengl],
|
||||||
install: true,
|
install: true,
|
||||||
|
@ -138,6 +138,26 @@ an underscore between "window" and "close").
|
|||||||
The ``-no-quit`` is a synonym for ``-display ...,window-close=off`` which
|
The ``-no-quit`` is a synonym for ``-display ...,window-close=off`` which
|
||||||
should be used instead.
|
should be used instead.
|
||||||
|
|
||||||
|
``-alt-grab`` and ``-display sdl,alt_grab=on`` (since 6.2)
|
||||||
|
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
Use ``-display sdl,grab-mod=lshift-lctrl-lalt`` instead.
|
||||||
|
|
||||||
|
``-ctrl-grab`` and ``-display sdl,ctrl_grab=on`` (since 6.2)
|
||||||
|
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
Use ``-display sdl,grab-mod=rctrl`` instead.
|
||||||
|
|
||||||
|
``-sdl`` (since 6.2)
|
||||||
|
''''''''''''''''''''
|
||||||
|
|
||||||
|
Use ``-display sdl`` instead.
|
||||||
|
|
||||||
|
``-curses`` (since 6.2)
|
||||||
|
'''''''''''''''''''''''
|
||||||
|
|
||||||
|
Use ``-display curses`` instead.
|
||||||
|
|
||||||
|
|
||||||
Plugin argument passing through ``arg=<string>`` (since 6.1)
|
Plugin argument passing through ``arg=<string>`` (since 6.1)
|
||||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||||
|
121
docs/devel/ci-definitions.rst
Normal file
121
docs/devel/ci-definitions.rst
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
Definition of terms
|
||||||
|
===================
|
||||||
|
|
||||||
|
This section defines the terms used in this document and correlates them with
|
||||||
|
what is currently used on QEMU.
|
||||||
|
|
||||||
|
Automated tests
|
||||||
|
---------------
|
||||||
|
|
||||||
|
An automated test is written on a test framework using its generic test
|
||||||
|
functions/classes. The test framework can run the tests and report their
|
||||||
|
success or failure [1]_.
|
||||||
|
|
||||||
|
An automated test has essentially three parts:
|
||||||
|
|
||||||
|
1. The test initialization of the parameters, where the expected parameters,
|
||||||
|
like inputs and expected results, are set up;
|
||||||
|
2. The call to the code that should be tested;
|
||||||
|
3. An assertion, comparing the result from the previous call with the expected
|
||||||
|
result set during the initialization of the parameters. If the result
|
||||||
|
matches the expected result, the test has been successful; otherwise, it has
|
||||||
|
failed.
|
||||||
|
|
||||||
|
Unit testing
|
||||||
|
------------
|
||||||
|
|
||||||
|
A unit test is responsible for exercising individual software components as a
|
||||||
|
unit, like interfaces, data structures, and functionality, uncovering errors
|
||||||
|
within the boundaries of a component. The verification effort is in the
|
||||||
|
smallest software unit and focuses on the internal processing logic and data
|
||||||
|
structures. A test case of unit tests should be designed to uncover errors due
|
||||||
|
to erroneous computations, incorrect comparisons, or improper control flow [2]_.
|
||||||
|
|
||||||
|
On QEMU, unit testing is represented by the 'check-unit' target from 'make'.
|
||||||
|
|
||||||
|
Functional testing
|
||||||
|
------------------
|
||||||
|
|
||||||
|
A functional test focuses on the functional requirement of the software.
|
||||||
|
Deriving sets of input conditions, the functional tests should fully exercise
|
||||||
|
all the functional requirements for a program. Functional testing is
|
||||||
|
complementary to other testing techniques, attempting to find errors like
|
||||||
|
incorrect or missing functions, interface errors, behavior errors, and
|
||||||
|
initialization and termination errors [3]_.
|
||||||
|
|
||||||
|
On QEMU, functional testing is represented by the 'check-qtest' target from
|
||||||
|
'make'.
|
||||||
|
|
||||||
|
System testing
|
||||||
|
--------------
|
||||||
|
|
||||||
|
System tests ensure all application elements mesh properly while the overall
|
||||||
|
functionality and performance are achieved [4]_. Some or all system components
|
||||||
|
are integrated to create a complete system to be tested as a whole. System
|
||||||
|
testing ensures that components are compatible, interact correctly, and
|
||||||
|
transfer the right data at the right time across their interfaces. As system
|
||||||
|
testing focuses on interactions, use case-based testing is a practical approach
|
||||||
|
to system testing [5]_. Note that, in some cases, system testing may require
|
||||||
|
interaction with third-party software, like operating system images, databases,
|
||||||
|
networks, and so on.
|
||||||
|
|
||||||
|
On QEMU, system testing is represented by the 'check-acceptance' target from
|
||||||
|
'make'.
|
||||||
|
|
||||||
|
Flaky tests
|
||||||
|
-----------
|
||||||
|
|
||||||
|
A flaky test is defined as a test that exhibits both a passing and a failing
|
||||||
|
result with the same code on different runs. Some usual reasons for an
|
||||||
|
intermittent/flaky test are async wait, concurrency, and test order dependency
|
||||||
|
[6]_.
|
||||||
|
|
||||||
|
Gating
|
||||||
|
------
|
||||||
|
|
||||||
|
A gate restricts the move of code from one stage to another on a
|
||||||
|
test/deployment pipeline. The step move is granted with approval. The approval
|
||||||
|
can be a manual intervention or a set of tests succeeding [7]_.
|
||||||
|
|
||||||
|
On QEMU, the gating process happens during the pull request. The approval is
|
||||||
|
done by the project leader running its own set of tests. The pull request gets
|
||||||
|
merged when the tests succeed.
|
||||||
|
|
||||||
|
Continuous Integration (CI)
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Continuous integration (CI) requires the builds of the entire application and
|
||||||
|
the execution of a comprehensive set of automated tests every time there is a
|
||||||
|
need to commit any set of changes [8]_. The automated tests can be composed of
|
||||||
|
the unit, functional, system, and other tests.
|
||||||
|
|
||||||
|
Keynotes about continuous integration (CI) [9]_:
|
||||||
|
|
||||||
|
1. System tests may depend on external software (operating system images,
|
||||||
|
firmware, database, network).
|
||||||
|
2. It may take a long time to build and test. It may be impractical to build
|
||||||
|
the system being developed several times per day.
|
||||||
|
3. If the development platform is different from the target platform, it may
|
||||||
|
not be possible to run system tests in the developer’s private workspace.
|
||||||
|
There may be differences in hardware, operating system, or installed
|
||||||
|
software. Therefore, more time is required for testing the system.
|
||||||
|
|
||||||
|
References
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. [1] Sommerville, Ian (2016). Software Engineering. p. 233.
|
||||||
|
.. [2] Pressman, Roger S. & Maxim, Bruce R. (2020). Software Engineering,
|
||||||
|
A Practitioner’s Approach. p. 48, 376, 378, 381.
|
||||||
|
.. [3] Pressman, Roger S. & Maxim, Bruce R. (2020). Software Engineering,
|
||||||
|
A Practitioner’s Approach. p. 388.
|
||||||
|
.. [4] Pressman, Roger S. & Maxim, Bruce R. (2020). Software Engineering,
|
||||||
|
A Practitioner’s Approach. Software Engineering, p. 377.
|
||||||
|
.. [5] Sommerville, Ian (2016). Software Engineering. p. 59, 232, 240.
|
||||||
|
.. [6] Luo, Qingzhou, et al. An empirical analysis of flaky tests.
|
||||||
|
Proceedings of the 22nd ACM SIGSOFT International Symposium on
|
||||||
|
Foundations of Software Engineering. 2014.
|
||||||
|
.. [7] Humble, Jez & Farley, David (2010). Continuous Delivery:
|
||||||
|
Reliable Software Releases Through Build, Test, and Deployment, p. 122.
|
||||||
|
.. [8] Humble, Jez & Farley, David (2010). Continuous Delivery:
|
||||||
|
Reliable Software Releases Through Build, Test, and Deployment, p. 55.
|
||||||
|
.. [9] Sommerville, Ian (2016). Software Engineering. p. 743.
|
@ -8,5 +8,6 @@ found at::
|
|||||||
|
|
||||||
https://wiki.qemu.org/Testing/CI
|
https://wiki.qemu.org/Testing/CI
|
||||||
|
|
||||||
|
.. include:: ci-definitions.rst
|
||||||
.. include:: ci-jobs.rst
|
.. include:: ci-jobs.rst
|
||||||
.. include:: ci-runners.rst
|
.. include:: ci-runners.rst
|
||||||
|
17
meson.build
17
meson.build
@ -472,11 +472,6 @@ if not get_option('zstd').auto() or have_block
|
|||||||
required: get_option('zstd'),
|
required: get_option('zstd'),
|
||||||
method: 'pkg-config', kwargs: static_kwargs)
|
method: 'pkg-config', kwargs: static_kwargs)
|
||||||
endif
|
endif
|
||||||
gbm = not_found
|
|
||||||
if 'CONFIG_GBM' in config_host
|
|
||||||
gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
|
|
||||||
link_args: config_host['GBM_LIBS'].split())
|
|
||||||
endif
|
|
||||||
virgl = not_found
|
virgl = not_found
|
||||||
if not get_option('virglrenderer').auto() or have_system
|
if not get_option('virglrenderer').auto() or have_system
|
||||||
virgl = dependency('virglrenderer',
|
virgl = dependency('virglrenderer',
|
||||||
@ -816,11 +811,17 @@ coreaudio = not_found
|
|||||||
if 'CONFIG_AUDIO_COREAUDIO' in config_host
|
if 'CONFIG_AUDIO_COREAUDIO' in config_host
|
||||||
coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
|
coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
|
||||||
endif
|
endif
|
||||||
|
|
||||||
opengl = not_found
|
opengl = not_found
|
||||||
if 'CONFIG_OPENGL' in config_host
|
if 'CONFIG_OPENGL' in config_host
|
||||||
opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
|
opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
|
||||||
link_args: config_host['OPENGL_LIBS'].split())
|
link_args: config_host['OPENGL_LIBS'].split())
|
||||||
endif
|
endif
|
||||||
|
gbm = not_found
|
||||||
|
if (have_system or have_tools) and (virgl.found() or opengl.found())
|
||||||
|
gbm = dependency('gbm', method: 'pkg-config', required: false,
|
||||||
|
kwargs: static_kwargs)
|
||||||
|
endif
|
||||||
|
|
||||||
gnutls = not_found
|
gnutls = not_found
|
||||||
gnutls_crypto = not_found
|
gnutls_crypto = not_found
|
||||||
@ -1244,6 +1245,7 @@ config_host_data.set('CONFIG_MPATH', mpathpersist.found())
|
|||||||
config_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api)
|
config_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api)
|
||||||
config_host_data.set('CONFIG_CURL', curl.found())
|
config_host_data.set('CONFIG_CURL', curl.found())
|
||||||
config_host_data.set('CONFIG_CURSES', curses.found())
|
config_host_data.set('CONFIG_CURSES', curses.found())
|
||||||
|
config_host_data.set('CONFIG_GBM', gbm.found())
|
||||||
config_host_data.set('CONFIG_GLUSTERFS', glusterfs.found())
|
config_host_data.set('CONFIG_GLUSTERFS', glusterfs.found())
|
||||||
if glusterfs.found()
|
if glusterfs.found()
|
||||||
config_host_data.set('CONFIG_GLUSTERFS_XLATOR_OPT', glusterfs.version().version_compare('>=4'))
|
config_host_data.set('CONFIG_GLUSTERFS_XLATOR_OPT', glusterfs.version().version_compare('>=4'))
|
||||||
@ -1912,10 +1914,13 @@ if have_system
|
|||||||
int main(void) { fdt_check_full(NULL, 0); return 0; }''',
|
int main(void) { fdt_check_full(NULL, 0); return 0; }''',
|
||||||
dependencies: fdt)
|
dependencies: fdt)
|
||||||
fdt_opt = 'system'
|
fdt_opt = 'system'
|
||||||
|
elif fdt_opt == 'system'
|
||||||
|
error('system libfdt requested, but it is too old (1.5.1 or newer required)')
|
||||||
elif have_internal
|
elif have_internal
|
||||||
fdt_opt = 'internal'
|
fdt_opt = 'internal'
|
||||||
else
|
else
|
||||||
fdt_opt = 'disabled'
|
fdt_opt = 'disabled'
|
||||||
|
fdt = not_found
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if fdt_opt == 'internal'
|
if fdt_opt == 'internal'
|
||||||
@ -3083,7 +3088,7 @@ summary_info += {'U2F support': u2f.found()}
|
|||||||
summary_info += {'libusb': libusb.found()}
|
summary_info += {'libusb': libusb.found()}
|
||||||
summary_info += {'usb net redir': usbredir.found()}
|
summary_info += {'usb net redir': usbredir.found()}
|
||||||
summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
|
summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
|
||||||
summary_info += {'GBM': config_host.has_key('CONFIG_GBM')}
|
summary_info += {'GBM': gbm.found()}
|
||||||
summary_info += {'libiscsi support': libiscsi.found()}
|
summary_info += {'libiscsi support': libiscsi.found()}
|
||||||
summary_info += {'libnfs support': libnfs.found()}
|
summary_info += {'libnfs support': libnfs.found()}
|
||||||
if targetos == 'windows'
|
if targetos == 'windows'
|
||||||
|
@ -1834,7 +1834,7 @@ DEF("display", HAS_ARG, QEMU_OPTION_display,
|
|||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_SDL)
|
#if defined(CONFIG_SDL)
|
||||||
"-display sdl[,alt_grab=on|off][,ctrl_grab=on|off][,gl=on|core|es|off]\n"
|
"-display sdl[,alt_grab=on|off][,ctrl_grab=on|off][,gl=on|core|es|off]\n"
|
||||||
" [,show-cursor=on|off][,window-close=on|off]\n"
|
" [,grab-mod=<mod>][,show-cursor=on|off][,window-close=on|off]\n"
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_GTK)
|
#if defined(CONFIG_GTK)
|
||||||
"-display gtk[,full-screen=on|off][,gl=on|off][,grab-on-hover=on|off]\n"
|
"-display gtk[,full-screen=on|off][,gl=on|off][,grab-on-hover=on|off]\n"
|
||||||
@ -1880,9 +1880,15 @@ SRST
|
|||||||
window; see the SDL documentation for other possibilities).
|
window; see the SDL documentation for other possibilities).
|
||||||
Valid parameters are:
|
Valid parameters are:
|
||||||
|
|
||||||
``alt_grab=on|off`` : Use Control+Alt+Shift-g to toggle mouse grabbing
|
``grab-mod=<mods>`` : Used to select the modifier keys for toggling
|
||||||
|
the mouse grabbing in conjunction with the "g" key. `<mods>` can be
|
||||||
|
either `lshift-lctrl-lalt` or `rctrl`.
|
||||||
|
|
||||||
``ctrl_grab=on|off`` : Use Right-Control-g to toggle mouse grabbing
|
``alt_grab=on|off`` : Use Control+Alt+Shift-g to toggle mouse grabbing.
|
||||||
|
This parameter is deprecated - use ``grab-mod`` instead.
|
||||||
|
|
||||||
|
``ctrl_grab=on|off`` : Use Right-Control-g to toggle mouse grabbing.
|
||||||
|
This parameter is deprecated - use ``grab-mod`` instead.
|
||||||
|
|
||||||
``gl=on|off|core|es`` : Use OpenGL for displaying
|
``gl=on|off|core|es`` : Use OpenGL for displaying
|
||||||
|
|
||||||
@ -1967,7 +1973,8 @@ SRST
|
|||||||
``-alt-grab``
|
``-alt-grab``
|
||||||
Use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt). Note that
|
Use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt). Note that
|
||||||
this also affects the special keys (for fullscreen, monitor-mode
|
this also affects the special keys (for fullscreen, monitor-mode
|
||||||
switching, etc).
|
switching, etc). This option is deprecated - please use
|
||||||
|
``-display sdl,grab-mod=lshift-lctrl-lalt`` instead.
|
||||||
ERST
|
ERST
|
||||||
|
|
||||||
DEF("ctrl-grab", 0, QEMU_OPTION_ctrl_grab,
|
DEF("ctrl-grab", 0, QEMU_OPTION_ctrl_grab,
|
||||||
@ -1977,7 +1984,8 @@ SRST
|
|||||||
``-ctrl-grab``
|
``-ctrl-grab``
|
||||||
Use Right-Ctrl to grab mouse (instead of Ctrl-Alt). Note that this
|
Use Right-Ctrl to grab mouse (instead of Ctrl-Alt). Note that this
|
||||||
also affects the special keys (for fullscreen, monitor-mode
|
also affects the special keys (for fullscreen, monitor-mode
|
||||||
switching, etc).
|
switching, etc). This option is deprecated - please use
|
||||||
|
``-display sdl,grab-mod=rctrl`` instead.
|
||||||
ERST
|
ERST
|
||||||
|
|
||||||
DEF("no-quit", 0, QEMU_OPTION_no_quit,
|
DEF("no-quit", 0, QEMU_OPTION_no_quit,
|
||||||
|
@ -1,91 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# This script checks the git log for URLs to the QEMU launchpad bugtracker
|
|
||||||
# and optionally checks whether the corresponding bugs are not closed yet.
|
|
||||||
|
|
||||||
show_help () {
|
|
||||||
echo "Usage:"
|
|
||||||
echo " -s <commit> : Start searching at this commit"
|
|
||||||
echo " -e <commit> : End searching at this commit"
|
|
||||||
echo " -c : Check if bugs are still open"
|
|
||||||
echo " -b : Open bugs in browser"
|
|
||||||
}
|
|
||||||
|
|
||||||
while getopts "s:e:cbh" opt; do
|
|
||||||
case "$opt" in
|
|
||||||
s) start="$OPTARG" ;;
|
|
||||||
e) end="$OPTARG" ;;
|
|
||||||
c) check_if_open=1 ;;
|
|
||||||
b) show_in_browser=1 ;;
|
|
||||||
h) show_help ; exit 0 ;;
|
|
||||||
*) echo "Use -h for help." ; exit 1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "x$start" = "x" ]; then
|
|
||||||
start=$(git tag -l 'v[0-9]*\.[0-9]*\.0' | tail -n 2 | head -n 1)
|
|
||||||
fi
|
|
||||||
if [ "x$end" = "x" ]; then
|
|
||||||
end=$(git tag -l 'v[0-9]*\.[0-9]*\.0' | tail -n 1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$start" = "x" ] || [ "x$end" = "x" ]; then
|
|
||||||
echo "Could not determine start or end revision ... Please note that this"
|
|
||||||
echo "script must be run from a checked out git repository of QEMU."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Searching git log for bugs in the range $start..$end"
|
|
||||||
|
|
||||||
urlstr='https://bugs.launchpad.net/\(bugs\|qemu/+bug\)/'
|
|
||||||
bug_urls=$(git log $start..$end \
|
|
||||||
| sed -n '\,'"$urlstr"', s,\(.*\)\('"$urlstr"'\)\([0-9]*\).*,\2\4,p' \
|
|
||||||
| sort -u)
|
|
||||||
|
|
||||||
echo Found bug URLs:
|
|
||||||
for i in $bug_urls ; do echo " $i" ; done
|
|
||||||
|
|
||||||
if [ "x$check_if_open" = "x1" ]; then
|
|
||||||
echo
|
|
||||||
echo "Checking which ones are still open..."
|
|
||||||
for i in $bug_urls ; do
|
|
||||||
if ! curl -s -L "$i" | grep "value status" | grep -q "Fix Released" ; then
|
|
||||||
echo " $i"
|
|
||||||
final_bug_urls="$final_bug_urls $i"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
final_bug_urls=$bug_urls
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$final_bug_urls" = "x" ]; then
|
|
||||||
echo "No open bugs found."
|
|
||||||
elif [ "x$show_in_browser" = "x1" ]; then
|
|
||||||
# Try to determine which browser we should use
|
|
||||||
if [ "x$BROWSER" != "x" ]; then
|
|
||||||
bugbrowser="$BROWSER"
|
|
||||||
elif command -v xdg-open >/dev/null 2>&1; then
|
|
||||||
bugbrowser=xdg-open
|
|
||||||
elif command -v gnome-open >/dev/null 2>&1; then
|
|
||||||
bugbrowser=gnome-open
|
|
||||||
elif [ "$(uname)" = "Darwin" ]; then
|
|
||||||
bugbrowser=open
|
|
||||||
elif command -v sensible-browser >/dev/null 2>&1; then
|
|
||||||
bugbrowser=sensible-browser
|
|
||||||
else
|
|
||||||
echo "Please set the BROWSER variable to the browser of your choice."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
# Now show the bugs in the browser
|
|
||||||
first=1
|
|
||||||
for i in $final_bug_urls; do
|
|
||||||
"$bugbrowser" "$i"
|
|
||||||
if [ $first = 1 ]; then
|
|
||||||
# if it is the first entry, give the browser some time to start
|
|
||||||
# (to avoid messages like "Firefox is already running, but is
|
|
||||||
# not responding...")
|
|
||||||
sleep 4
|
|
||||||
first=0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
24
softmmu/vl.c
24
softmmu/vl.c
@ -1017,15 +1017,24 @@ static void parse_display(const char *p)
|
|||||||
* parse_display_qapi() due to some options not in
|
* parse_display_qapi() due to some options not in
|
||||||
* DisplayOptions, specifically:
|
* DisplayOptions, specifically:
|
||||||
* - ctrl_grab + alt_grab
|
* - ctrl_grab + alt_grab
|
||||||
* Not clear yet what happens to them long-term. Should
|
* They can't be moved into the QAPI since they use underscores,
|
||||||
* replaced by something better or deprecated and dropped.
|
* thus they will get replaced by "grab-mod" in the long term
|
||||||
*/
|
*/
|
||||||
#if defined(CONFIG_SDL)
|
#if defined(CONFIG_SDL)
|
||||||
dpy.type = DISPLAY_TYPE_SDL;
|
dpy.type = DISPLAY_TYPE_SDL;
|
||||||
while (*opts) {
|
while (*opts) {
|
||||||
const char *nextopt;
|
const char *nextopt;
|
||||||
|
|
||||||
if (strstart(opts, ",alt_grab=", &nextopt)) {
|
if (strstart(opts, ",grab-mod=", &nextopt)) {
|
||||||
|
opts = nextopt;
|
||||||
|
if (strstart(opts, "lshift-lctrl-lalt", &nextopt)) {
|
||||||
|
alt_grab = 1;
|
||||||
|
} else if (strstart(opts, "rctrl", &nextopt)) {
|
||||||
|
ctrl_grab = 1;
|
||||||
|
} else {
|
||||||
|
goto invalid_sdl_args;
|
||||||
|
}
|
||||||
|
} else if (strstart(opts, ",alt_grab=", &nextopt)) {
|
||||||
opts = nextopt;
|
opts = nextopt;
|
||||||
if (strstart(opts, "on", &nextopt)) {
|
if (strstart(opts, "on", &nextopt)) {
|
||||||
alt_grab = 1;
|
alt_grab = 1;
|
||||||
@ -1034,6 +1043,7 @@ static void parse_display(const char *p)
|
|||||||
} else {
|
} else {
|
||||||
goto invalid_sdl_args;
|
goto invalid_sdl_args;
|
||||||
}
|
}
|
||||||
|
warn_report("alt_grab is deprecated, use grab-mod instead.");
|
||||||
} else if (strstart(opts, ",ctrl_grab=", &nextopt)) {
|
} else if (strstart(opts, ",ctrl_grab=", &nextopt)) {
|
||||||
opts = nextopt;
|
opts = nextopt;
|
||||||
if (strstart(opts, "on", &nextopt)) {
|
if (strstart(opts, "on", &nextopt)) {
|
||||||
@ -1043,6 +1053,7 @@ static void parse_display(const char *p)
|
|||||||
} else {
|
} else {
|
||||||
goto invalid_sdl_args;
|
goto invalid_sdl_args;
|
||||||
}
|
}
|
||||||
|
warn_report("ctrl_grab is deprecated, use grab-mod instead.");
|
||||||
} else if (strstart(opts, ",window_close=", &nextopt) ||
|
} else if (strstart(opts, ",window_close=", &nextopt) ||
|
||||||
strstart(opts, ",window-close=", &nextopt)) {
|
strstart(opts, ",window-close=", &nextopt)) {
|
||||||
if (strstart(opts, ",window_close=", NULL)) {
|
if (strstart(opts, ",window_close=", NULL)) {
|
||||||
@ -2878,6 +2889,8 @@ void qemu_init(int argc, char **argv, char **envp)
|
|||||||
dpy.type = DISPLAY_TYPE_NONE;
|
dpy.type = DISPLAY_TYPE_NONE;
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_curses:
|
case QEMU_OPTION_curses:
|
||||||
|
warn_report("-curses is deprecated, "
|
||||||
|
"use -display curses instead.");
|
||||||
#ifdef CONFIG_CURSES
|
#ifdef CONFIG_CURSES
|
||||||
dpy.type = DISPLAY_TYPE_CURSES;
|
dpy.type = DISPLAY_TYPE_CURSES;
|
||||||
#else
|
#else
|
||||||
@ -3236,9 +3249,13 @@ void qemu_init(int argc, char **argv, char **envp)
|
|||||||
break;
|
break;
|
||||||
case QEMU_OPTION_alt_grab:
|
case QEMU_OPTION_alt_grab:
|
||||||
alt_grab = 1;
|
alt_grab = 1;
|
||||||
|
warn_report("-alt-grab is deprecated, please use "
|
||||||
|
"-display sdl,grab-mod=lshift-lctrl-lalt instead.");
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_ctrl_grab:
|
case QEMU_OPTION_ctrl_grab:
|
||||||
ctrl_grab = 1;
|
ctrl_grab = 1;
|
||||||
|
warn_report("-ctrl-grab is deprecated, please use "
|
||||||
|
"-display sdl,grab-mod=rctrl instead.");
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_no_quit:
|
case QEMU_OPTION_no_quit:
|
||||||
dpy.has_window_close = true;
|
dpy.has_window_close = true;
|
||||||
@ -3247,6 +3264,7 @@ void qemu_init(int argc, char **argv, char **envp)
|
|||||||
"-display ...,window-close=off instead.");
|
"-display ...,window-close=off instead.");
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_sdl:
|
case QEMU_OPTION_sdl:
|
||||||
|
warn_report("-sdl is deprecated, use -display sdl instead.");
|
||||||
#ifdef CONFIG_SDL
|
#ifdef CONFIG_SDL
|
||||||
dpy.type = DISPLAY_TYPE_SDL;
|
dpy.type = DISPLAY_TYPE_SDL;
|
||||||
break;
|
break;
|
||||||
|
@ -301,7 +301,9 @@ QTestState *qtest_init_without_qmp_handshake(const char *extra_args)
|
|||||||
s->expected_status = 0;
|
s->expected_status = 0;
|
||||||
s->qemu_pid = fork();
|
s->qemu_pid = fork();
|
||||||
if (s->qemu_pid == 0) {
|
if (s->qemu_pid == 0) {
|
||||||
g_setenv("QEMU_AUDIO_DRV", "none", true);
|
if (!g_setenv("QEMU_AUDIO_DRV", "none", true)) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
execlp("/bin/sh", "sh", "-c", command, NULL);
|
execlp("/bin/sh", "sh", "-c", command, NULL);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user