qemu: 6.2.0 -> 7.0.0
The guest agent now refuses to build unless being built for one of a list of specific supported operating systems. Co-authored-by: Will Cohen <willcohen@users.noreply.github.com>
This commit is contained in:
parent
b161e729ab
commit
9d733f3d49
|
@ -1,77 +0,0 @@
|
||||||
From 4ca09b7cd1d42eb6b1587fed74cd4d684e31bfbe Mon Sep 17 00:00:00 2001
|
|
||||||
From: Keno Fischer <keno@juliacomputing.com>
|
|
||||||
Date: Sun, 27 Feb 2022 17:35:22 -0500
|
|
||||||
Subject: [PATCH] 9p: darwin: meson: Allow VirtFS on Darwin
|
|
||||||
|
|
||||||
To allow VirtFS on darwin, we need to check that pthread_fchdir_np is
|
|
||||||
available, which has only been available since macOS 10.12.
|
|
||||||
|
|
||||||
Additionally, virtfs_proxy_helper is disabled on Darwin. This patch
|
|
||||||
series does not currently provide an implementation of the proxy-helper,
|
|
||||||
but this functionality could be implemented later on.
|
|
||||||
|
|
||||||
Signed-off-by: Keno Fischer <keno@juliacomputing.com>
|
|
||||||
[Michael Roitzsch: - Rebase for NixOS]
|
|
||||||
Signed-off-by: Michael Roitzsch <reactorcontrol@icloud.com>
|
|
||||||
[Will Cohen: - Rebase to master]
|
|
||||||
Signed-off-by: Will Cohen <wwcohen@gmail.com>
|
|
||||||
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
||||||
[Will Cohen: - Add check for pthread_fchdir_np to virtfs
|
|
||||||
- Add comments to patch commit
|
|
||||||
- Note that virtfs_proxy_helper does not work
|
|
||||||
on macOS
|
|
||||||
- Fully adjust meson virtfs error note to specify
|
|
||||||
macOS
|
|
||||||
- Rebase to master]
|
|
||||||
Signed-off-by: Will Cohen <wwcohen@gmail.com>
|
|
||||||
Message-Id: <20220227223522.91937-12-wwcohen@gmail.com>
|
|
||||||
Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
|
|
||||||
Acked-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
|
|
||||||
---
|
|
||||||
fsdev/meson.build | 1 +
|
|
||||||
meson.build | 17 +++++++++++------
|
|
||||||
2 files changed, 12 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/fsdev/meson.build b/fsdev/meson.build
|
|
||||||
index adf57cc43e..b632b66348 100644
|
|
||||||
--- a/fsdev/meson.build
|
|
||||||
+++ b/fsdev/meson.build
|
|
||||||
@@ -7,6 +7,7 @@ fsdev_ss.add(when: ['CONFIG_FSDEV_9P'], if_true: files(
|
|
||||||
'qemu-fsdev.c',
|
|
||||||
), if_false: files('qemu-fsdev-dummy.c'))
|
|
||||||
softmmu_ss.add_all(when: 'CONFIG_LINUX', if_true: fsdev_ss)
|
|
||||||
+softmmu_ss.add_all(when: 'CONFIG_DARWIN', if_true: fsdev_ss)
|
|
||||||
|
|
||||||
if have_virtfs_proxy_helper
|
|
||||||
executable('virtfs-proxy-helper',
|
|
||||||
diff --git a/meson.build b/meson.build
|
|
||||||
index 2265fa409a..6d73c02903 100644
|
|
||||||
--- a/meson.build
|
|
||||||
+++ b/meson.build
|
|
||||||
@@ -1383,12 +1383,17 @@ endif
|
|
||||||
have_host_block_device = (targetos != 'darwin' or
|
|
||||||
cc.has_header('IOKit/storage/IOMedia.h'))
|
|
||||||
|
|
||||||
-have_virtfs = (targetos == 'linux' and
|
|
||||||
- have_system and
|
|
||||||
- libattr.found() and
|
|
||||||
- libcap_ng.found())
|
|
||||||
-
|
|
||||||
-have_virtfs_proxy_helper = have_virtfs and have_tools
|
|
||||||
+have_virtfs = get_option('virtfs') \
|
|
||||||
+ .require(targetos == 'linux' or targetos == 'darwin',
|
|
||||||
+ error_message: 'virtio-9p (virtfs) requires Linux or macOS') \
|
|
||||||
+ .require(targetos == 'linux' or cc.has_function('pthread_fchdir_np'),
|
|
||||||
+ error_message: 'virtio-9p (virtfs) on macOS requires the presence of pthread_fchdir_np') \
|
|
||||||
+ .require(targetos == 'darwin' or (libattr.found() and libcap_ng.found()),
|
|
||||||
+ error_message: 'virtio-9p (virtfs) on Linux requires libcap-ng-devel and libattr-devel') \
|
|
||||||
+ .disable_auto_if(not have_tools and not have_system) \
|
|
||||||
+ .allowed()
|
|
||||||
+
|
|
||||||
+have_virtfs_proxy_helper = targetos != 'darwin' and have_virtfs and have_tools
|
|
||||||
|
|
||||||
if get_option('virtfs').enabled()
|
|
||||||
if not have_virtfs
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
, makeWrapper, runtimeShell, removeReferencesTo
|
, makeWrapper, runtimeShell, removeReferencesTo
|
||||||
, attr, libcap, libcap_ng, socat
|
, attr, libcap, libcap_ng, socat
|
||||||
, CoreServices, Cocoa, Hypervisor, rez, setfile
|
, CoreServices, Cocoa, Hypervisor, rez, setfile
|
||||||
|
, guestAgentSupport ? with stdenv.hostPlatform; isLinux || isSunOS || isWindows
|
||||||
, numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl
|
, numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl
|
||||||
, seccompSupport ? stdenv.isLinux, libseccomp
|
, seccompSupport ? stdenv.isLinux, libseccomp
|
||||||
, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner
|
, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner
|
||||||
|
@ -40,11 +41,11 @@ stdenv.mkDerivation rec {
|
||||||
+ lib.optionalString xenSupport "-xen"
|
+ lib.optionalString xenSupport "-xen"
|
||||||
+ lib.optionalString hostCpuOnly "-host-cpu-only"
|
+ lib.optionalString hostCpuOnly "-host-cpu-only"
|
||||||
+ lib.optionalString nixosTestRunner "-for-vm-tests";
|
+ lib.optionalString nixosTestRunner "-for-vm-tests";
|
||||||
version = "6.2.0";
|
version = "7.0.0";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url= "https://download.qemu.org/qemu-${version}.tar.xz";
|
url= "https://download.qemu.org/qemu-${version}.tar.xz";
|
||||||
sha256 = "0iavlsy9hin8k38230j8lfmyipx3965zljls1dp34mmc8n75vqb8";
|
sha256 = "sha256-9rN1x5UfcoQCeYsLqrsthkeMpT1Eztvvq74cRr9G+Dk=";
|
||||||
};
|
};
|
||||||
|
|
||||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||||
|
@ -82,80 +83,26 @@ stdenv.mkDerivation rec {
|
||||||
|
|
||||||
dontUseMesonConfigure = true; # meson's configurePhase isn't compatible with qemu build
|
dontUseMesonConfigure = true; # meson's configurePhase isn't compatible with qemu build
|
||||||
|
|
||||||
outputs = [ "out" "ga" ];
|
outputs = [ "out" ] ++ lib.optional guestAgentSupport "ga";
|
||||||
# On aarch64-linux we would shoot over the Hydra's 2G output limit.
|
# On aarch64-linux we would shoot over the Hydra's 2G output limit.
|
||||||
separateDebugInfo = !(stdenv.isAarch64 && stdenv.isLinux);
|
separateDebugInfo = !(stdenv.isAarch64 && stdenv.isLinux);
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
./fix-qemu-ga.patch
|
./fix-qemu-ga.patch
|
||||||
# MTP Devices were broken in QEMU 6.1.0, this patch fixes that.
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/9d30c78c7d3b994825cbe63fa277279ae3ef4248.patch";
|
|
||||||
sha256 = "sha256-AChB9HMEShrM+2UW2aOT9+MqlAm568sG3HxHK3nDC/M=";
|
|
||||||
})
|
|
||||||
# Cocoa clipboard support only works on macOS 10.14+
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/7e3e20d89129614f4a7b2451fe321cc6ccca3b76.diff";
|
|
||||||
sha256 = "09xz06g57wxbacic617pq9c0qb7nly42gif0raplldn5lw964xl2";
|
|
||||||
revert = true;
|
|
||||||
})
|
|
||||||
# 9p-darwin for 7.0 backported to 6.2.0
|
|
||||||
#
|
|
||||||
# Can generally be removed when updating derivation to 7.0. Nine of the
|
|
||||||
# patches can be drawn directly from QEMU upstream, but the second commit
|
|
||||||
# and the eleventh commit had to be modified when rebasing back to 6.2.0.
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/e0bd743bb2dd4985791d4de880446bdbb4e04fed.patch";
|
|
||||||
sha256 = "sha256-c6QYL3zig47fJwm6rqkqGp3E1PakVTaihvXDRebbBlQ=";
|
|
||||||
})
|
|
||||||
./rename-9p-util.patch
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/f41db099c71151291c269bf48ad006de9cbd9ca6.patch";
|
|
||||||
sha256 = "sha256-70/rrhZw+02JJbJ3CoW8B1GbdM4Lwb2WkUdwstYAoIQ=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/6b3b279bd670c6a2fa23c9049820c814f0e2c846.patch";
|
|
||||||
sha256 = "sha256-7WqklSvLirEuxTXTIMQDQhWpXnwMseJ1RumT+faq/Y8=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/67a71e3b71a2834d028031a92e76eb9444e423c6.patch";
|
|
||||||
sha256 = "sha256-COFm/SwfJSoSl9YDpL6ceAE8CcE4mGhsGxw1HMuL++o=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/38d7fd68b0c8775b5253ab84367419621aa032e6.patch";
|
|
||||||
sha256 = "sha256-iwGIzq9FWW6zpbDg/IKrp5OZpK9cgQqTRWWq8WBIHRQ=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/57b3910bc3513ab515296692daafd1c546f3c115.patch";
|
|
||||||
sha256 = "sha256-ybl9+umZAcQKHYL7NkGJQC0W7bccTagA9KQiFaR2LYA=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/b5989326f558faedd2511f29459112cced2ca8f5.patch";
|
|
||||||
sha256 = "sha256-s+O9eCgj2Ev+INjL9LY9MJBdISIdZLslI3lue2DICGM=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/029ed1bd9defa33a80bb40cdcd003699299af8db.patch";
|
|
||||||
sha256 = "sha256-mGqcRWcEibDJdhTRrN7ZWrMuCfUWW8vWiFj7sb2/RYo=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/d3671fd972cd185a6923433aa4802f54d8b62112.patch";
|
|
||||||
sha256 = "sha256-GUh5o7mbFTm/dm6CqcGdoMlC+YrV8RlcEwu/mxrfTzo=";
|
|
||||||
})
|
|
||||||
# The next two commits are to make Linux v5.17 work on aarch64-darwin. These are included in QEMU v7.
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/ad99f64f1cfff7c5e7af0e697523d9b7e45423b6.patch";
|
|
||||||
sha256 = "sha256-e6WtfQIPEiXhWucd5ab7UIoccbWEAv3bwksn4hR85CY=";
|
|
||||||
})
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://gitlab.com/qemu-project/qemu/-/commit/7f6c295cdfeaa229c360cac9a36e4e595aa902ae.patch";
|
|
||||||
sha256 = "sha256-mORtgfU1CYQFKO5UrXgM9cJyZxeF2bz8iAoq0UlFQeY=";
|
|
||||||
})
|
|
||||||
./allow-virtfs-on-darwin.patch
|
|
||||||
# QEMU upstream does not demand compatibility to pre-10.13, so 9p-darwin
|
# QEMU upstream does not demand compatibility to pre-10.13, so 9p-darwin
|
||||||
# support on nix requires utimensat fallback. The patch adding this fallback
|
# support on nix requires utimensat fallback. The patch adding this fallback
|
||||||
# set was removed during the process of upstreaming this functionality, and
|
# set was removed during the process of upstreaming this functionality, and
|
||||||
# will still be needed in nix until the macOS SDK reaches 10.13+.
|
# will still be needed in nix until the macOS SDK reaches 10.13+.
|
||||||
./provide-fallback-for-utimensat.patch
|
./provide-fallback-for-utimensat.patch
|
||||||
|
# Cocoa clipboard support only works on macOS 10.14+
|
||||||
|
./revert-ui-cocoa-add-clipboard-support.patch
|
||||||
|
# Standard about panel requires AppKit and macOS 10.13+
|
||||||
|
(fetchpatch {
|
||||||
|
url = "https://gitlab.com/qemu-project/qemu/-/commit/99eb313ddbbcf73c1adcdadceba1423b691c6d05.diff";
|
||||||
|
sha256 = "sha256-gTRf9XENAfbFB3asYCXnw4OV4Af6VE1W56K2xpYDhgM=";
|
||||||
|
revert = true;
|
||||||
|
})
|
||||||
]
|
]
|
||||||
++ lib.optional nixosTestRunner ./force-uid0-on-9p.patch;
|
++ lib.optional nixosTestRunner ./force-uid0-on-9p.patch;
|
||||||
|
|
||||||
|
@ -194,7 +141,6 @@ stdenv.mkDerivation rec {
|
||||||
"--disable-strip" # We'll strip ourselves after separating debug info.
|
"--disable-strip" # We'll strip ourselves after separating debug info.
|
||||||
"--enable-docs"
|
"--enable-docs"
|
||||||
"--enable-tools"
|
"--enable-tools"
|
||||||
"--enable-guest-agent"
|
|
||||||
"--localstatedir=/var"
|
"--localstatedir=/var"
|
||||||
"--sysconfdir=/etc"
|
"--sysconfdir=/etc"
|
||||||
# Always use our Meson, not the bundled version, which doesn't
|
# Always use our Meson, not the bundled version, which doesn't
|
||||||
|
@ -202,6 +148,7 @@ stdenv.mkDerivation rec {
|
||||||
"--meson=meson"
|
"--meson=meson"
|
||||||
"--cross-prefix=${stdenv.cc.targetPrefix}"
|
"--cross-prefix=${stdenv.cc.targetPrefix}"
|
||||||
"--cpu=${stdenv.hostPlatform.uname.processor}"
|
"--cpu=${stdenv.hostPlatform.uname.processor}"
|
||||||
|
(lib.enableFeature guestAgentSupport "guest-agent")
|
||||||
] ++ lib.optional numaSupport "--enable-numa"
|
] ++ lib.optional numaSupport "--enable-numa"
|
||||||
++ lib.optional seccompSupport "--enable-seccomp"
|
++ lib.optional seccompSupport "--enable-seccomp"
|
||||||
++ lib.optional smartcardSupport "--enable-smartcard"
|
++ lib.optional smartcardSupport "--enable-smartcard"
|
||||||
|
@ -233,7 +180,7 @@ stdenv.mkDerivation rec {
|
||||||
postFixup = ''
|
postFixup = ''
|
||||||
# the .desktop is both invalid and pointless
|
# the .desktop is both invalid and pointless
|
||||||
rm -f $out/share/applications/qemu.desktop
|
rm -f $out/share/applications/qemu.desktop
|
||||||
|
'' + lib.optionalString guestAgentSupport ''
|
||||||
# move qemu-ga (guest agent) to separate output
|
# move qemu-ga (guest agent) to separate output
|
||||||
mkdir -p $ga/bin
|
mkdir -p $ga/bin
|
||||||
mv $out/bin/qemu-ga $ga/bin/
|
mv $out/bin/qemu-ga $ga/bin/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
From 70328c307001f4bb75d30d93c5bba3c3cd790c88 Mon Sep 17 00:00:00 2001
|
From 747a741772cde6bb340eb8bdb493390280de8d16 Mon Sep 17 00:00:00 2001
|
||||||
From: Keno Fischer <keno@juliacomputing.com>
|
From: Keno Fischer <keno@juliacomputing.com>
|
||||||
Date: Sat, 16 Jun 2018 20:56:54 -0400
|
Date: Sat, 16 Jun 2018 20:56:54 -0400
|
||||||
Subject: [PATCH] 9p: darwin: Provide fallback impl for utimensat
|
Subject: [PATCH] 9p: darwin: Provide fallback impl for utimensat
|
||||||
|
@ -160,7 +160,7 @@ index db451b0784..320697f347 100644
|
||||||
+ return utimensat(dirfd, filename, times, AT_SYMLINK_NOFOLLOW);
|
+ return utimensat(dirfd, filename, times, AT_SYMLINK_NOFOLLOW);
|
||||||
+}
|
+}
|
||||||
diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
|
diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
|
||||||
index 1f74d37558..a4b002d1b5 100644
|
index 97e681e167..fd50d6243a 100644
|
||||||
--- a/hw/9pfs/9p-util.h
|
--- a/hw/9pfs/9p-util.h
|
||||||
+++ b/hw/9pfs/9p-util.h
|
+++ b/hw/9pfs/9p-util.h
|
||||||
@@ -36,6 +36,12 @@ static inline int qemu_lsetxattr(const char *path, const char *name,
|
@@ -36,6 +36,12 @@ static inline int qemu_lsetxattr(const char *path, const char *name,
|
||||||
|
@ -176,14 +176,14 @@ index 1f74d37558..a4b002d1b5 100644
|
||||||
static inline void close_preserve_errno(int fd)
|
static inline void close_preserve_errno(int fd)
|
||||||
{
|
{
|
||||||
int serrno = errno;
|
int serrno = errno;
|
||||||
@@ -96,6 +102,8 @@ ssize_t flistxattrat_nofollow(int dirfd, const char *filename,
|
@@ -98,6 +104,8 @@ ssize_t flistxattrat_nofollow(int dirfd, const char *filename,
|
||||||
char *list, size_t size);
|
char *list, size_t size);
|
||||||
ssize_t fremovexattrat_nofollow(int dirfd, const char *filename,
|
ssize_t fremovexattrat_nofollow(int dirfd, const char *filename,
|
||||||
const char *name);
|
const char *name);
|
||||||
+int utimensat_nofollow(int dirfd, const char *filename,
|
+int utimensat_nofollow(int dirfd, const char *filename,
|
||||||
+ const struct timespec times[2]);
|
+ const struct timespec times[2]);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Darwin has d_seekoff, which appears to function similarly to d_off.
|
* Darwin has d_seekoff, which appears to function similarly to d_off.
|
||||||
--
|
--
|
||||||
2.35.1
|
2.35.1
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
From 011b121d7f84c8974f03a81582cf1107249245bb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Keno Fischer <keno@juliacomputing.com>
|
|
||||||
Date: Sun, 27 Feb 2022 17:35:13 -0500
|
|
||||||
Subject: [PATCH] 9p: Rename 9p-util -> 9p-util-linux
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
The current file only has the Linux versions of these functions.
|
|
||||||
Rename the file accordingly and update the Makefile to only build
|
|
||||||
it on Linux. A Darwin version of these will follow later in the
|
|
||||||
series.
|
|
||||||
|
|
||||||
Signed-off-by: Keno Fischer <keno@juliacomputing.com>
|
|
||||||
[Michael Roitzsch: - Rebase for NixOS]
|
|
||||||
Signed-off-by: Michael Roitzsch <reactorcontrol@icloud.com>
|
|
||||||
Signed-off-by: Will Cohen <wwcohen@gmail.com>
|
|
||||||
Reviewed-by: Greg Kurz <groug@kaod.org>
|
|
||||||
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
|
|
||||||
Message-Id: <20220227223522.91937-3-wwcohen@gmail.com>
|
|
||||||
Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
|
|
||||||
---
|
|
||||||
hw/9pfs/{9p-util.c => 9p-util-linux.c} | 0
|
|
||||||
hw/9pfs/meson.build | 2 +-
|
|
||||||
2 files changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
rename hw/9pfs/{9p-util.c => 9p-util-linux.c} (100%)
|
|
||||||
|
|
||||||
diff --git a/hw/9pfs/9p-util.c b/hw/9pfs/9p-util-linux.c
|
|
||||||
similarity index 100%
|
|
||||||
rename from hw/9pfs/9p-util.c
|
|
||||||
rename to hw/9pfs/9p-util-linux.c
|
|
||||||
diff --git a/hw/9pfs/meson.build b/hw/9pfs/meson.build
|
|
||||||
index 99be5d9119..1b28e70040 100644
|
|
||||||
--- a/hw/9pfs/meson.build
|
|
||||||
+++ b/hw/9pfs/meson.build
|
|
||||||
@@ -4,7 +4,6 @@ fs_ss.add(files(
|
|
||||||
'9p-posix-acl.c',
|
|
||||||
'9p-proxy.c',
|
|
||||||
'9p-synth.c',
|
|
||||||
- '9p-util.c',
|
|
||||||
'9p-xattr-user.c',
|
|
||||||
'9p-xattr.c',
|
|
||||||
'9p.c',
|
|
||||||
@@ -14,6 +13,7 @@ fs_ss.add(files(
|
|
||||||
'coth.c',
|
|
||||||
'coxattr.c',
|
|
||||||
))
|
|
||||||
+fs_ss.add(when: 'CONFIG_LINUX', if_true: files('9p-util-linux.c'))
|
|
||||||
fs_ss.add(when: 'CONFIG_XEN', if_true: files('xen-9p-backend.c'))
|
|
||||||
softmmu_ss.add_all(when: 'CONFIG_FSDEV_9P', if_true: fs_ss)
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
|
@ -0,0 +1,208 @@
|
||||||
|
From 19b0952b36b6b5c4bd2665cc0bd4e55a85f81b55 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Will Cohen <willcohen@users.noreply.github.com>
|
||||||
|
Date: Tue, 29 Mar 2022 14:00:56 -0400
|
||||||
|
Subject: [PATCH] Revert "ui/cocoa: Add clipboard support"
|
||||||
|
|
||||||
|
This reverts commit 7e3e20d89129614f4a7b2451fe321cc6ccca3b76.
|
||||||
|
---
|
||||||
|
include/ui/clipboard.h | 2 +-
|
||||||
|
ui/clipboard.c | 2 +-
|
||||||
|
ui/cocoa.m | 121 -----------------------------------------
|
||||||
|
3 files changed, 2 insertions(+), 123 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/ui/clipboard.h b/include/ui/clipboard.h
|
||||||
|
index ce76aa451f..c4e1dc4ff4 100644
|
||||||
|
--- a/include/ui/clipboard.h
|
||||||
|
+++ b/include/ui/clipboard.h
|
||||||
|
@@ -269,7 +269,7 @@ void qemu_clipboard_set_data(QemuClipboardPeer *peer,
|
||||||
|
QemuClipboardInfo *info,
|
||||||
|
QemuClipboardType type,
|
||||||
|
uint32_t size,
|
||||||
|
- const void *data,
|
||||||
|
+ void *data,
|
||||||
|
bool update);
|
||||||
|
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(QemuClipboardInfo, qemu_clipboard_info_unref)
|
||||||
|
diff --git a/ui/clipboard.c b/ui/clipboard.c
|
||||||
|
index 9079ef829b..6b9ed59e1b 100644
|
||||||
|
--- a/ui/clipboard.c
|
||||||
|
+++ b/ui/clipboard.c
|
||||||
|
@@ -140,7 +140,7 @@ void qemu_clipboard_set_data(QemuClipboardPeer *peer,
|
||||||
|
QemuClipboardInfo *info,
|
||||||
|
QemuClipboardType type,
|
||||||
|
uint32_t size,
|
||||||
|
- const void *data,
|
||||||
|
+ void *data,
|
||||||
|
bool update)
|
||||||
|
{
|
||||||
|
if (!info ||
|
||||||
|
diff --git a/ui/cocoa.m b/ui/cocoa.m
|
||||||
|
index c4e5468f9e..cd3bdf0cec 100644
|
||||||
|
--- a/ui/cocoa.m
|
||||||
|
+++ b/ui/cocoa.m
|
||||||
|
@@ -28,7 +28,6 @@
|
||||||
|
#include <crt_externs.h>
|
||||||
|
|
||||||
|
#include "qemu-common.h"
|
||||||
|
-#include "ui/clipboard.h"
|
||||||
|
#include "ui/console.h"
|
||||||
|
#include "ui/input.h"
|
||||||
|
#include "ui/kbd-state.h"
|
||||||
|
@@ -107,10 +106,6 @@ static void cocoa_switch(DisplayChangeListener *dcl,
|
||||||
|
static QemuSemaphore app_started_sem;
|
||||||
|
static bool allow_events;
|
||||||
|
|
||||||
|
-static NSInteger cbchangecount = -1;
|
||||||
|
-static QemuClipboardInfo *cbinfo;
|
||||||
|
-static QemuEvent cbevent;
|
||||||
|
-
|
||||||
|
// Utility functions to run specified code block with iothread lock held
|
||||||
|
typedef void (^CodeBlock)(void);
|
||||||
|
typedef bool (^BoolCodeBlock)(void);
|
||||||
|
@@ -1805,105 +1800,6 @@ static void addRemovableDevicesMenuItems(void)
|
||||||
|
qapi_free_BlockInfoList(pointerToFree);
|
||||||
|
}
|
||||||
|
|
||||||
|
-@interface QemuCocoaPasteboardTypeOwner : NSObject<NSPasteboardTypeOwner>
|
||||||
|
-@end
|
||||||
|
-
|
||||||
|
-@implementation QemuCocoaPasteboardTypeOwner
|
||||||
|
-
|
||||||
|
-- (void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSPasteboardType)type
|
||||||
|
-{
|
||||||
|
- if (type != NSPasteboardTypeString) {
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- with_iothread_lock(^{
|
||||||
|
- QemuClipboardInfo *info = qemu_clipboard_info_ref(cbinfo);
|
||||||
|
- qemu_event_reset(&cbevent);
|
||||||
|
- qemu_clipboard_request(info, QEMU_CLIPBOARD_TYPE_TEXT);
|
||||||
|
-
|
||||||
|
- while (info == cbinfo &&
|
||||||
|
- info->types[QEMU_CLIPBOARD_TYPE_TEXT].available &&
|
||||||
|
- info->types[QEMU_CLIPBOARD_TYPE_TEXT].data == NULL) {
|
||||||
|
- qemu_mutex_unlock_iothread();
|
||||||
|
- qemu_event_wait(&cbevent);
|
||||||
|
- qemu_mutex_lock_iothread();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (info == cbinfo) {
|
||||||
|
- NSData *data = [[NSData alloc] initWithBytes:info->types[QEMU_CLIPBOARD_TYPE_TEXT].data
|
||||||
|
- length:info->types[QEMU_CLIPBOARD_TYPE_TEXT].size];
|
||||||
|
- [sender setData:data forType:NSPasteboardTypeString];
|
||||||
|
- [data release];
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- qemu_clipboard_info_unref(info);
|
||||||
|
- });
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-@end
|
||||||
|
-
|
||||||
|
-static QemuCocoaPasteboardTypeOwner *cbowner;
|
||||||
|
-
|
||||||
|
-static void cocoa_clipboard_notify(Notifier *notifier, void *data);
|
||||||
|
-static void cocoa_clipboard_request(QemuClipboardInfo *info,
|
||||||
|
- QemuClipboardType type);
|
||||||
|
-
|
||||||
|
-static QemuClipboardPeer cbpeer = {
|
||||||
|
- .name = "cocoa",
|
||||||
|
- .notifier = { .notify = cocoa_clipboard_notify },
|
||||||
|
- .request = cocoa_clipboard_request
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
-static void cocoa_clipboard_update_info(QemuClipboardInfo *info)
|
||||||
|
-{
|
||||||
|
- if (info->owner == &cbpeer || info->selection != QEMU_CLIPBOARD_SELECTION_CLIPBOARD) {
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (info != cbinfo) {
|
||||||
|
- NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
- qemu_clipboard_info_unref(cbinfo);
|
||||||
|
- cbinfo = qemu_clipboard_info_ref(info);
|
||||||
|
- cbchangecount = [[NSPasteboard generalPasteboard] declareTypes:@[NSPasteboardTypeString] owner:cbowner];
|
||||||
|
- [pool release];
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- qemu_event_set(&cbevent);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void cocoa_clipboard_notify(Notifier *notifier, void *data)
|
||||||
|
-{
|
||||||
|
- QemuClipboardNotify *notify = data;
|
||||||
|
-
|
||||||
|
- switch (notify->type) {
|
||||||
|
- case QEMU_CLIPBOARD_UPDATE_INFO:
|
||||||
|
- cocoa_clipboard_update_info(notify->info);
|
||||||
|
- return;
|
||||||
|
- case QEMU_CLIPBOARD_RESET_SERIAL:
|
||||||
|
- /* ignore */
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void cocoa_clipboard_request(QemuClipboardInfo *info,
|
||||||
|
- QemuClipboardType type)
|
||||||
|
-{
|
||||||
|
- NSData *text;
|
||||||
|
-
|
||||||
|
- switch (type) {
|
||||||
|
- case QEMU_CLIPBOARD_TYPE_TEXT:
|
||||||
|
- text = [[NSPasteboard generalPasteboard] dataForType:NSPasteboardTypeString];
|
||||||
|
- if (text) {
|
||||||
|
- qemu_clipboard_set_data(&cbpeer, info, type,
|
||||||
|
- [text length], [text bytes], true);
|
||||||
|
- [text release];
|
||||||
|
- }
|
||||||
|
- break;
|
||||||
|
- default:
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* The startup process for the OSX/Cocoa UI is complicated, because
|
||||||
|
* OSX insists that the UI runs on the initial main thread, and so we
|
||||||
|
@@ -1938,7 +1834,6 @@ static void cocoa_clipboard_request(QemuClipboardInfo *info,
|
||||||
|
COCOA_DEBUG("Second thread: calling qemu_main()\n");
|
||||||
|
status = qemu_main(gArgc, gArgv, *_NSGetEnviron());
|
||||||
|
COCOA_DEBUG("Second thread: qemu_main() returned, exiting\n");
|
||||||
|
- [cbowner release];
|
||||||
|
exit(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2054,18 +1949,6 @@ static void cocoa_refresh(DisplayChangeListener *dcl)
|
||||||
|
[cocoaView setAbsoluteEnabled:YES];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- if (cbchangecount != [[NSPasteboard generalPasteboard] changeCount]) {
|
||||||
|
- qemu_clipboard_info_unref(cbinfo);
|
||||||
|
- cbinfo = qemu_clipboard_info_new(&cbpeer, QEMU_CLIPBOARD_SELECTION_CLIPBOARD);
|
||||||
|
- if ([[NSPasteboard generalPasteboard] availableTypeFromArray:@[NSPasteboardTypeString]]) {
|
||||||
|
- cbinfo->types[QEMU_CLIPBOARD_TYPE_TEXT].available = true;
|
||||||
|
- }
|
||||||
|
- qemu_clipboard_update(cbinfo);
|
||||||
|
- cbchangecount = [[NSPasteboard generalPasteboard] changeCount];
|
||||||
|
- qemu_event_set(&cbevent);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
[pool release];
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2105,10 +1988,6 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
|
|
||||||
|
// register vga output callbacks
|
||||||
|
register_displaychangelistener(&dcl);
|
||||||
|
-
|
||||||
|
- qemu_event_init(&cbevent, false);
|
||||||
|
- cbowner = [[QemuCocoaPasteboardTypeOwner alloc] init];
|
||||||
|
- qemu_clipboard_peer_register(&cbpeer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static QemuDisplay qemu_display_cocoa = {
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
Loading…
Reference in a new issue