Here is an update to QEMU 7.2.0.
https://wiki.qemu.org/ChangeLog/7.2 Index: Makefile =================================================================== RCS file: /home/cvs/ports/emulators/qemu/Makefile,v retrieving revision 1.227 diff -u -p -u -p -r1.227 Makefile --- Makefile 7 Nov 2022 17:14:39 -0000 1.227 +++ Makefile 14 Dec 2022 06:28:15 -0000 @@ -4,10 +4,8 @@ DPB_PROPERTIES= parallel COMMENT-main= multi system emulator COMMENT-ga= QEMU guest agent -VERSION= 7.1.0 +VERSION= 7.2.0 DISTNAME= qemu-${VERSION} -REVISION-main= 0 -REVISION-ga= 0 CATEGORIES= emulators MASTER_SITES= https://download.qemu.org/ EXTRACT_SUFX= .tar.xz Index: distinfo =================================================================== RCS file: /home/cvs/ports/emulators/qemu/distinfo,v retrieving revision 1.67 diff -u -p -u -p -r1.67 distinfo --- distinfo 13 Sep 2022 20:11:35 -0000 1.67 +++ distinfo 14 Dec 2022 22:39:00 -0000 @@ -1,2 +1,2 @@ -SHA256 (qemu-7.1.0.tar.xz) = oGNOU2ve1XzzjsinUa2xJLicd2/ghG8hq2xnKPHLu+Y= -SIZE (qemu-7.1.0.tar.xz) = 121833004 +SHA256 (qemu-7.2.0.tar.xz) = W0nOJod0Ta1JSukKiYxSIEo0BuhNBySCoeG+hU7rIVc= +SIZE (qemu-7.2.0.tar.xz) = 122408576 Index: patches/patch-audio_audio_c =================================================================== RCS file: patches/patch-audio_audio_c diff -N patches/patch-audio_audio_c --- patches/patch-audio_audio_c 24 Apr 2022 10:20:14 -0000 1.13 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,13 +0,0 @@ -sndio module - -Index: audio/audio.c ---- audio/audio.c.orig -+++ audio/audio.c -@@ -2025,6 +2025,7 @@ void audio_create_pdos(Audiodev *dev) - CASE(OSS, oss, Oss); - CASE(PA, pa, Pa); - CASE(SDL, sdl, Sdl); -+ CASE(SNDIO, sndio, ); - CASE(SPICE, spice, ); - CASE(WAV, wav, ); - Index: patches/patch-audio_audio_template_h =================================================================== RCS file: patches/patch-audio_audio_template_h diff -N patches/patch-audio_audio_template_h --- patches/patch-audio_audio_template_h 24 Apr 2022 10:20:14 -0000 1.8 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -sndio module - -Index: audio/audio_template.h ---- audio/audio_template.h.orig -+++ audio/audio_template.h -@@ -336,6 +336,8 @@ AudiodevPerDirectionOptions *glue(audio_get_pdo_, TYPE - return qapi_AudiodevPaPerDirectionOptions_base(dev->u.pa.TYPE); - case AUDIODEV_DRIVER_SDL: - return qapi_AudiodevSdlPerDirectionOptions_base(dev->u.sdl.TYPE); -+ case AUDIODEV_DRIVER_SNDIO: -+ return dev->u.sndio.TYPE; - case AUDIODEV_DRIVER_SPICE: - return dev->u.spice.TYPE; - case AUDIODEV_DRIVER_WAV: Index: patches/patch-audio_meson_build =================================================================== RCS file: patches/patch-audio_meson_build diff -N patches/patch-audio_meson_build --- patches/patch-audio_meson_build 11 Mar 2022 18:59:40 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,13 +0,0 @@ -sndio module - -Index: audio/meson.build ---- audio/meson.build.orig -+++ audio/meson.build -@@ -17,6 +17,7 @@ foreach m : [ - ['pa', pulse, files('paaudio.c')], - ['sdl', sdl, files('sdlaudio.c')], - ['jack', jack, files('jackaudio.c')], -+ ['sndio', sndio, files('sndioaudio.c')], - ['spice', spice, files('spiceaudio.c')] - ] - if m[1].found() Index: patches/patch-audio_sndioaudio_c =================================================================== RCS file: patches/patch-audio_sndioaudio_c diff -N patches/patch-audio_sndioaudio_c --- patches/patch-audio_sndioaudio_c 13 Sep 2022 20:11:35 -0000 1.7 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,572 +0,0 @@ -sndio module - -Index: audio/sndioaudio.c ---- audio/sndioaudio.c.orig -+++ audio/sndioaudio.c -@@ -0,0 +1,566 @@ -+/* -+ * SPDX-License-Identifier: ISC -+ * -+ * Copyright (c) 2019 Alexandre Ratchov <[email protected]> -+ */ -+ -+/* -+ * TODO : -+ * -+ * Use a single device and open it in full-duplex rather than -+ * opening it twice (once for playback once for recording). -+ * -+ * This is the only way to ensure that playback doesn't drift with respect -+ * to recording, which is what guest systems expect. -+ */ -+ -+#include <poll.h> -+#include <sndio.h> -+#include "qemu/osdep.h" -+#include "qemu/help-texts.h" -+#include "qemu/main-loop.h" -+#include "audio.h" -+#include "trace.h" -+ -+#define AUDIO_CAP "sndio" -+#include "audio_int.h" -+ -+/* default latency in microseconds if no option is set */ -+#define SNDIO_LATENCY_US 50000 -+ -+typedef struct SndioVoice { -+ union { -+ HWVoiceOut out; -+ HWVoiceIn in; -+ } hw; -+ struct sio_par par; -+ struct sio_hdl *hdl; -+ struct pollfd *pfds; -+ struct pollindex { -+ struct SndioVoice *self; -+ int index; -+ } *pindexes; -+ unsigned char *buf; -+ size_t buf_size; -+ size_t sndio_pos; -+ size_t qemu_pos; -+ unsigned int mode; -+ unsigned int nfds; -+ bool enabled; -+} SndioVoice; -+ -+typedef struct SndioConf { -+ const char *devname; -+ unsigned int latency; -+} SndioConf; -+ -+/* needed for forward reference */ -+static void sndio_poll_in(void *arg); -+static void sndio_poll_out(void *arg); -+ -+/* -+ * stop polling descriptors -+ */ -+static void sndio_poll_clear(SndioVoice *self) -+{ -+ struct pollfd *pfd; -+ int i; -+ -+ for (i = 0; i < self->nfds; i++) { -+ pfd = &self->pfds[i]; -+ qemu_set_fd_handler(pfd->fd, NULL, NULL, NULL); -+ } -+ -+ self->nfds = 0; -+} -+ -+/* -+ * write data to the device until it blocks or -+ * all of our buffered data is written -+ */ -+static void sndio_write(SndioVoice *self) -+{ -+ size_t todo, n; -+ -+ todo = self->qemu_pos - self->sndio_pos; -+ -+ /* -+ * transfer data to device, until it blocks -+ */ -+ while (todo > 0) { -+ n = sio_write(self->hdl, self->buf + self->sndio_pos, todo); -+ if (n == 0) { -+ break; -+ } -+ self->sndio_pos += n; -+ todo -= n; -+ } -+ -+ if (self->sndio_pos == self->buf_size) { -+ /* -+ * we complete the block -+ */ -+ self->sndio_pos = 0; -+ self->qemu_pos = 0; -+ } -+} -+ -+/* -+ * read data from the device until it blocks or -+ * there no room any longer -+ */ -+static void sndio_read(SndioVoice *self) -+{ -+ size_t todo, n; -+ -+ todo = self->buf_size - self->sndio_pos; -+ -+ /* -+ * transfer data from the device, until it blocks -+ */ -+ while (todo > 0) { -+ n = sio_read(self->hdl, self->buf + self->sndio_pos, todo); -+ if (n == 0) { -+ break; -+ } -+ self->sndio_pos += n; -+ todo -= n; -+ } -+} -+ -+/* -+ * Set handlers for all descriptors libsndio needs to -+ * poll -+ */ -+static void sndio_poll_wait(SndioVoice *self) -+{ -+ struct pollfd *pfd; -+ int events, i; -+ -+ events = 0; -+ if (self->mode == SIO_PLAY) { -+ if (self->sndio_pos < self->qemu_pos) { -+ events |= POLLOUT; -+ } -+ } else { -+ if (self->sndio_pos < self->buf_size) { -+ events |= POLLIN; -+ } -+ } -+ -+ /* -+ * fill the given array of descriptors with the events sndio -+ * wants, they are different from our 'event' variable because -+ * sndio may use descriptors internally. -+ */ -+ self->nfds = sio_pollfd(self->hdl, self->pfds, events); -+ -+ for (i = 0; i < self->nfds; i++) { -+ pfd = &self->pfds[i]; -+ if (pfd->fd < 0) { -+ continue; -+ } -+ qemu_set_fd_handler(pfd->fd, -+ (pfd->events & POLLIN) ? sndio_poll_in : NULL, -+ (pfd->events & POLLOUT) ? sndio_poll_out : NULL, -+ &self->pindexes[i]); -+ pfd->revents = 0; -+ } -+} -+ -+/* -+ * call-back called when one of the descriptors -+ * became readable or writable -+ */ -+static void sndio_poll_event(SndioVoice *self, int index, int event) -+{ -+ int revents; -+ -+ /* -+ * ensure we're not called twice this cycle -+ */ -+ sndio_poll_clear(self); -+ -+ /* -+ * make self->pfds[] look as we're returning from poll syscal, -+ * this is how sio_revents expects events to be. -+ */ -+ self->pfds[index].revents = event; -+ -+ /* -+ * tell sndio to handle events and return whether we can read or -+ * write without blocking. -+ */ -+ revents = sio_revents(self->hdl, self->pfds); -+ if (self->mode == SIO_PLAY) { -+ if (revents & POLLOUT) { -+ sndio_write(self); -+ } -+ -+ if (self->qemu_pos < self->buf_size) { -+ audio_run(self->hw.out.s, "sndio_out"); -+ } -+ } else { -+ if (revents & POLLIN) { -+ sndio_read(self); -+ } -+ -+ if (self->qemu_pos < self->sndio_pos) { -+ audio_run(self->hw.in.s, "sndio_in"); -+ } -+ } -+ -+ /* -+ * audio_run() may have changed state -+ */ -+ if (self->enabled) { -+ sndio_poll_wait(self); -+ } -+} -+ -+/* -+ * return the upper limit of the amount of free play buffer space -+ */ -+static size_t sndio_buffer_get_free(HWVoiceOut *hw) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ return self->buf_size - self->qemu_pos; -+} -+ -+/* -+ * return a buffer where data to play can be stored, -+ * its size is stored in the location pointed by the size argument. -+ */ -+static void *sndio_get_buffer_out(HWVoiceOut *hw, size_t *size) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ *size = self->buf_size - self->qemu_pos; -+ return self->buf + self->qemu_pos; -+} -+ -+/* -+ * return a buffer where data to play can be stored -+ */ -+static size_t sndio_put_buffer_out(HWVoiceOut *hw, void *buf, size_t size) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ self->qemu_pos += size; -+ sndio_poll_wait(self); -+ return size; -+} -+ -+/* -+ * return a buffer from where recorded data is available, -+ * its size is stored in the location pointed by the size argument. -+ * it may not exceed the initial value of "*size". -+ */ -+static void *sndio_get_buffer_in(HWVoiceIn *hw, size_t *size) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ size_t todo, max_todo; -+ -+ /* -+ * unlike the get_buffer_out() method, get_buffer_in() -+ * must return a buffer of at most the given size, see audio.c -+ */ -+ max_todo = *size; -+ -+ todo = self->sndio_pos - self->qemu_pos; -+ if (todo > max_todo) { -+ todo = max_todo; -+ } -+ -+ *size = todo; -+ return self->buf + self->qemu_pos; -+} -+ -+/* -+ * discard the given amount of recorded data -+ */ -+static void sndio_put_buffer_in(HWVoiceIn *hw, void *buf, size_t size) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ self->qemu_pos += size; -+ if (self->qemu_pos == self->buf_size) { -+ self->qemu_pos = 0; -+ self->sndio_pos = 0; -+ } -+ sndio_poll_wait(self); -+} -+ -+/* -+ * call-back called when one of our descriptors becomes writable -+ */ -+static void sndio_poll_out(void *arg) -+{ -+ struct pollindex *pindex = (struct pollindex *) arg; -+ -+ sndio_poll_event(pindex->self, pindex->index, POLLOUT); -+} -+ -+/* -+ * call-back called when one of our descriptors becomes readable -+ */ -+static void sndio_poll_in(void *arg) -+{ -+ struct pollindex *pindex = (struct pollindex *) arg; -+ -+ sndio_poll_event(pindex->self, pindex->index, POLLIN); -+} -+ -+static void sndio_fini(SndioVoice *self) -+{ -+ if (self->hdl) { -+ sio_close(self->hdl); -+ self->hdl = NULL; -+ } -+ -+ g_free(self->pfds); -+ g_free(self->pindexes); -+ g_free(self->buf); -+} -+ -+static int sndio_init(SndioVoice *self, -+ struct audsettings *as, int mode, Audiodev *dev) -+{ -+ AudiodevSndioOptions *opts = &dev->u.sndio; -+ unsigned long long latency; -+ const char *dev_name; -+ struct sio_par req; -+ unsigned int nch; -+ int i, nfds; -+ -+ dev_name = opts->has_dev ? opts->dev : SIO_DEVANY; -+ latency = opts->has_latency ? opts->latency : SNDIO_LATENCY_US; -+ -+ /* open the device in non-blocking mode */ -+ self->hdl = sio_open(dev_name, mode, 1); -+ if (self->hdl == NULL) { -+ dolog("failed to open device\n"); -+ return -1; -+ } -+ -+ self->mode = mode; -+ -+ sio_initpar(&req); -+ -+ switch (as->fmt) { -+ case AUDIO_FORMAT_S8: -+ req.bits = 8; -+ req.sig = 1; -+ break; -+ case AUDIO_FORMAT_U8: -+ req.bits = 8; -+ req.sig = 0; -+ break; -+ case AUDIO_FORMAT_S16: -+ req.bits = 16; -+ req.sig = 1; -+ break; -+ case AUDIO_FORMAT_U16: -+ req.bits = 16; -+ req.sig = 0; -+ break; -+ case AUDIO_FORMAT_S32: -+ req.bits = 32; -+ req.sig = 1; -+ break; -+ case AUDIO_FORMAT_U32: -+ req.bits = 32; -+ req.sig = 0; -+ break; -+ default: -+ dolog("unknown audio sample format\n"); -+ return -1; -+ } -+ -+ if (req.bits > 8) { -+ req.le = as->endianness ? 0 : 1; -+ } -+ -+ req.rate = as->freq; -+ if (mode == SIO_PLAY) { -+ req.pchan = as->nchannels; -+ } else { -+ req.rchan = as->nchannels; -+ } -+ -+ /* set on-device buffer size */ -+ req.appbufsz = req.rate * latency / 1000000; -+ -+ if (!sio_setpar(self->hdl, &req)) { -+ dolog("failed set audio params\n"); -+ goto fail; -+ } -+ -+ if (!sio_getpar(self->hdl, &self->par)) { -+ dolog("failed get audio params\n"); -+ goto fail; -+ } -+ -+ nch = (mode == SIO_PLAY) ? self->par.pchan : self->par.rchan; -+ -+ /* -+ * With the default setup, sndio supports any combination of parameters -+ * so these checks are mostly to catch configuration errors. -+ */ -+ if (self->par.bits != req.bits || self->par.bps != req.bits / 8 || -+ self->par.sig != req.sig || (req.bits > 8 && self->par.le != req.le) || -+ self->par.rate != as->freq || nch != as->nchannels) { -+ dolog("unsupported audio params\n"); -+ goto fail; -+ } -+ -+ /* -+ * we use one block as buffer size; this is how -+ * transfers get well aligned -+ */ -+ self->buf_size = self->par.round * self->par.bps * nch; -+ -+ self->buf = g_malloc(self->buf_size); -+ if (self->buf == NULL) { -+ dolog("failed to allocate audio buffer\n"); -+ goto fail; -+ } -+ -+ nfds = sio_nfds(self->hdl); -+ -+ self->pfds = g_malloc_n(nfds, sizeof(struct pollfd)); -+ if (self->pfds == NULL) { -+ dolog("failed to allocate pollfd structures\n"); -+ goto fail; -+ } -+ -+ self->pindexes = g_malloc_n(nfds, sizeof(struct pollindex)); -+ if (self->pindexes == NULL) { -+ dolog("failed to allocate pollindex structures\n"); -+ goto fail; -+ } -+ -+ for (i = 0; i < nfds; i++) { -+ self->pindexes[i].self = self; -+ self->pindexes[i].index = i; -+ } -+ -+ return 0; -+fail: -+ sndio_fini(self); -+ return -1; -+} -+ -+static void sndio_enable(SndioVoice *self, bool enable) -+{ -+ if (enable) { -+ sio_start(self->hdl); -+ self->enabled = true; -+ sndio_poll_wait(self); -+ } else { -+ self->enabled = false; -+ sndio_poll_clear(self); -+ sio_stop(self->hdl); -+ } -+} -+ -+static void sndio_enable_out(HWVoiceOut *hw, bool enable) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ sndio_enable(self, enable); -+} -+ -+static void sndio_enable_in(HWVoiceIn *hw, bool enable) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ sndio_enable(self, enable); -+} -+ -+static int sndio_init_out(HWVoiceOut *hw, struct audsettings *as, void *opaque) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ if (sndio_init(self, as, SIO_PLAY, opaque) == -1) { -+ return -1; -+ } -+ -+ audio_pcm_init_info(&hw->info, as); -+ hw->samples = self->par.round; -+ return 0; -+} -+ -+static int sndio_init_in(HWVoiceIn *hw, struct audsettings *as, void *opaque) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ if (sndio_init(self, as, SIO_REC, opaque) == -1) { -+ return -1; -+ } -+ -+ audio_pcm_init_info(&hw->info, as); -+ hw->samples = self->par.round; -+ return 0; -+} -+ -+static void sndio_fini_out(HWVoiceOut *hw) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ sndio_fini(self); -+} -+ -+static void sndio_fini_in(HWVoiceIn *hw) -+{ -+ SndioVoice *self = (SndioVoice *) hw; -+ -+ sndio_fini(self); -+} -+ -+static void *sndio_audio_init(Audiodev *dev) -+{ -+ assert(dev->driver == AUDIODEV_DRIVER_SNDIO); -+ return dev; -+} -+ -+static void sndio_audio_fini(void *opaque) -+{ -+} -+ -+static struct audio_pcm_ops sndio_pcm_ops = { -+ .init_out = sndio_init_out, -+ .fini_out = sndio_fini_out, -+ .enable_out = sndio_enable_out, -+ .write = audio_generic_write, -+ .buffer_get_free = sndio_buffer_get_free, -+ .get_buffer_out = sndio_get_buffer_out, -+ .put_buffer_out = sndio_put_buffer_out, -+ .init_in = sndio_init_in, -+ .fini_in = sndio_fini_in, -+ .read = audio_generic_read, -+ .enable_in = sndio_enable_in, -+ .get_buffer_in = sndio_get_buffer_in, -+ .put_buffer_in = sndio_put_buffer_in, -+}; -+ -+static struct audio_driver sndio_audio_driver = { -+ .name = "sndio", -+ .descr = "sndio https://sndio.org", -+ .init = sndio_audio_init, -+ .fini = sndio_audio_fini, -+ .pcm_ops = &sndio_pcm_ops, -+ .can_be_default = 1, -+ .max_voices_out = INT_MAX, -+ .max_voices_in = INT_MAX, -+ .voice_size_out = sizeof(SndioVoice), -+ .voice_size_in = sizeof(SndioVoice) -+}; -+ -+static void register_audio_sndio(void) -+{ -+ audio_driver_register(&sndio_audio_driver); -+} -+ -+type_init(register_audio_sndio); Index: patches/patch-configure =================================================================== RCS file: /home/cvs/ports/emulators/qemu/patches/patch-configure,v retrieving revision 1.74 diff -u -p -u -p -r1.74 patch-configure --- patches/patch-configure 13 Sep 2022 20:11:35 -0000 1.74 +++ patches/patch-configure 10 Nov 2022 05:28:23 -0000 @@ -6,15 +6,15 @@ Revert.. Index: configure --- configure.orig +++ configure -@@ -79,6 +79,7 @@ TMPO="${TMPDIR1}/${TMPB}.o" - TMPCXX="${TMPDIR1}/${TMPB}.cxx" +@@ -77,6 +77,7 @@ TMPC="${TMPDIR1}/${TMPB}.c" + TMPO="${TMPDIR1}/${TMPB}.o" TMPM="${TMPDIR1}/${TMPB}.m" TMPE="${TMPDIR1}/${TMPB}.exe" +TMPTXT="${TMPDIR1}/${TMPB}.txt" rm -f config.log -@@ -1354,7 +1355,6 @@ if test "$static" = "yes" ; then +@@ -1314,7 +1315,6 @@ if test "$static" = "yes" ; then plugins="no" fi fi @@ -22,7 +22,7 @@ Index: configure cat > $TMPC << EOF -@@ -1511,6 +1511,56 @@ if ! has "$pkg_config_exe"; then +@@ -1459,6 +1459,56 @@ if ! has "$pkg_config_exe"; then fi ########################################## @@ -79,7 +79,7 @@ Index: configure # glib support probe # When bumping glib_req_ver, please check also whether we should increase -@@ -2481,6 +2531,15 @@ fi +@@ -2390,6 +2440,15 @@ fi if test "$plugins" = "yes" ; then echo "CONFIG_PLUGIN=y" >> $config_host_mak Index: patches/patch-meson_build =================================================================== RCS file: /home/cvs/ports/emulators/qemu/patches/patch-meson_build,v retrieving revision 1.7 diff -u -p -u -p -r1.7 patch-meson_build --- patches/patch-meson_build 13 Sep 2022 20:11:35 -0000 1.7 +++ patches/patch-meson_build 4 Dec 2022 01:09:10 -0000 @@ -1,4 +1,3 @@ -- sndio module - localstatedir does not belong under prefix - Remove hardcoding of optimization @@ -9,41 +8,12 @@ Index: meson.build .allowed() have_ga = get_option('guest_agent') \ .disable_auto_if(not have_system and not have_tools) \ -- .require(targetos in ['sunos', 'linux', 'windows'], -+ .require(targetos in ['sunos', 'linux', 'openbsd', 'windows'], +- .require(targetos in ['sunos', 'linux', 'windows', 'freebsd'], ++ .require(targetos in ['sunos', 'linux', 'windows', 'freebsd', 'openbsd'], error_message: 'unsupported OS for QEMU guest agent') \ .allowed() have_block = have_system or have_tools -@@ -681,6 +681,11 @@ if not get_option('jack').auto() or have_system - jack = dependency('jack', required: get_option('jack'), - method: 'pkg-config', kwargs: static_kwargs) - endif -+sndio = not_found -+if not get_option('sndio').auto() or have_system -+ sndio = dependency('sndio', required: get_option('sndio'), -+ method: 'pkg-config', kwargs: static_kwargs) -+endif - - spice_protocol = not_found - if not get_option('spice_protocol').auto() or have_system -@@ -1597,6 +1602,7 @@ if have_system - 'oss': oss.found(), - 'pa': pulse.found(), - 'sdl': sdl.found(), -+ 'sndio': sndio.found(), - } - foreach k, v: audio_drivers_available - config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), v) -@@ -1604,7 +1610,7 @@ if have_system - - # Default to native drivers first, OSS second, SDL third - audio_drivers_priority = \ -- [ 'pa', 'coreaudio', 'dsound', 'oss' ] + \ -+ [ 'pa', 'coreaudio', 'dsound', 'sndio', 'oss' ] + \ - (targetos == 'linux' ? [] : [ 'sdl' ]) - audio_drivers_default = [] - foreach k: audio_drivers_priority -@@ -1729,7 +1735,7 @@ config_host_data.set('CONFIG_QEMU_FIRMWAREPATH', qemu_ +@@ -1790,7 +1790,7 @@ config_host_data.set('CONFIG_QEMU_FIRMWAREPATH', qemu_ 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')) @@ -52,7 +22,7 @@ Index: meson.build 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')) -@@ -3767,11 +3773,9 @@ if targetos == 'darwin' +@@ -3756,11 +3756,9 @@ if targetos == 'darwin' summary_info += {'Objective-C compiler': ' '.join(meson.get_compiler('objc').cmd_array())} endif summary_info += {'CFLAGS': ' '.join(get_option('c_args') @@ -64,11 +34,3 @@ Index: meson.build + (get_option('debug') ? ['-g'] : []))} endif if targetos == 'darwin' -@@ -3927,6 +3931,7 @@ if vnc.found() - endif - if targetos not in ['darwin', 'haiku', 'windows'] - summary_info += {'OSS support': oss} -+ summary_info += {'sndio support': sndio} - elif targetos == 'darwin' - summary_info += {'CoreAudio support': coreaudio} - elif targetos == 'windows' Index: patches/patch-meson_mesonbuild_compilers_cpp_py =================================================================== RCS file: /home/cvs/ports/emulators/qemu/patches/patch-meson_mesonbuild_compilers_cpp_py,v retrieving revision 1.3 diff -u -p -u -p -r1.3 patch-meson_mesonbuild_compilers_cpp_py --- patches/patch-meson_mesonbuild_compilers_cpp_py 11 Mar 2022 18:59:40 -0000 1.3 +++ patches/patch-meson_mesonbuild_compilers_cpp_py 10 Nov 2022 05:27:50 -0000 @@ -1,19 +1,19 @@ Index: meson/mesonbuild/compilers/cpp.py --- meson/mesonbuild/compilers/cpp.py.orig +++ meson/mesonbuild/compilers/cpp.py -@@ -247,7 +247,7 @@ class ClangCPPCompiler(ClangCompiler, CPPCompiler): - return [] - - def language_stdlib_only_link_flags(self) -> T.List[str]: -- return ['-lstdc++'] -+ return ['-lc++'] +@@ -254,7 +254,7 @@ class ClangCPPCompiler(ClangCompiler, CPPCompiler): + search_dirs: T.List[str] = [] + for d in self.get_compiler_dirs(env, 'libraries'): + search_dirs.append(f'-L{d}') +- return search_dirs + ['-lstdc++'] ++ return search_dirs + ['-lc++'] class AppleClangCPPCompiler(ClangCPPCompiler): -@@ -397,7 +397,7 @@ class GnuCPPCompiler(GnuCompiler, CPPCompiler): - return ['-fpch-preprocess', '-include', os.path.basename(header)] - - def language_stdlib_only_link_flags(self) -> T.List[str]: +@@ -418,7 +418,7 @@ class GnuCPPCompiler(GnuCompiler, CPPCompiler): + search_dirs: T.List[str] = [] + for d in self.get_compiler_dirs(env, 'libraries'): + search_dirs.append(f'-L{d}') - return ['-lstdc++'] + return ['-lestdc++'] Index: patches/patch-meson_options_txt =================================================================== RCS file: patches/patch-meson_options_txt diff -N patches/patch-meson_options_txt --- patches/patch-meson_options_txt 13 Sep 2022 20:11:35 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,23 +0,0 @@ -sndio module - -Index: meson_options.txt ---- meson_options.txt.orig -+++ meson_options.txt -@@ -21,7 +21,7 @@ option('tls_priority', type : 'string', value : 'NORMA - option('default_devices', type : 'boolean', value : true, - description: 'Include a default selection of devices in emulators') - option('audio_drv_list', type: 'array', value: ['default'], -- choices: ['alsa', 'coreaudio', 'default', 'dsound', 'jack', 'oss', 'pa', 'sdl'], -+ choices: ['alsa', 'coreaudio', 'default', 'dsound', 'jack', 'oss', 'pa', 'sdl', 'sndio'], - description: 'Set audio driver list') - option('block_drv_rw_whitelist', type : 'string', value : '', - description: 'set block driver read-write whitelist (by default affects only QEMU, not tools like qemu-img)') -@@ -240,6 +240,8 @@ option('oss', type: 'feature', value: 'auto', - description: 'OSS sound support') - option('pa', type: 'feature', value: 'auto', - description: 'PulseAudio sound support') -+option('sndio', type: 'feature', value: 'auto', -+ description: 'sndio sound support') - - option('vhost_kernel', type: 'feature', value: 'auto', - description: 'vhost kernel backend support') Index: patches/patch-plugins_meson_build =================================================================== RCS file: /home/cvs/ports/emulators/qemu/patches/patch-plugins_meson_build,v retrieving revision 1.2 diff -u -p -u -p -r1.2 patch-plugins_meson_build --- patches/patch-plugins_meson_build 2 Sep 2022 11:35:53 -0000 1.2 +++ patches/patch-plugins_meson_build 10 Nov 2022 05:27:50 -0000 @@ -11,7 +11,7 @@ Index: plugins/meson.build # Modules need more symbols than just those in plugins/qemu-plugins.symbols if not enable_modules - if targetos == 'darwin' -- qemu_plugins_symbols_list = configure_file( +- configure_file( - input: files('qemu-plugins.symbols'), - output: 'qemu-plugins-ld64.symbols', - capture: true, Index: patches/patch-qapi_audio_json =================================================================== RCS file: patches/patch-qapi_audio_json diff -N patches/patch-qapi_audio_json --- patches/patch-qapi_audio_json 13 Sep 2022 20:11:35 -0000 1.9 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,50 +0,0 @@ -sndio module - -Index: qapi/audio.json ---- qapi/audio.json.orig -+++ qapi/audio.json -@@ -107,6 +107,28 @@ - '*threshold': 'uint32' } } - - ## -+# @AudiodevSndioOptions: -+# -+# Options of the sndio audio backend. -+# -+# @in: options of the capture stream -+# -+# @out: options of the playback stream -+# -+# @dev: the name of the sndio device to use (default 'default') -+# -+# @latency: play buffer size (in microseconds) -+# -+# Since: 7.2 -+## -+{ 'struct': 'AudiodevSndioOptions', -+ 'data': { -+ '*in': 'AudiodevPerDirectionOptions', -+ '*out': 'AudiodevPerDirectionOptions', -+ '*dev': 'str', -+ '*latency': 'uint32'} } -+ -+## - # @AudiodevCoreaudioPerDirectionOptions: - # - # Options of the Core Audio backend that are used for both playback and -@@ -387,7 +409,7 @@ - ## - { 'enum': 'AudiodevDriver', - 'data': [ 'none', 'alsa', 'coreaudio', 'dbus', 'dsound', 'jack', 'oss', 'pa', -- 'sdl', 'spice', 'wav' ] } -+ 'sdl', 'sndio', 'spice', 'wav' ] } - - ## - # @Audiodev: -@@ -418,5 +440,6 @@ - 'oss': 'AudiodevOssOptions', - 'pa': 'AudiodevPaOptions', - 'sdl': 'AudiodevSdlOptions', -+ 'sndio': 'AudiodevSndioOptions', - 'spice': 'AudiodevGenericOptions', - 'wav': 'AudiodevWavOptions' } } Index: patches/patch-qemu-options_hx =================================================================== RCS file: patches/patch-qemu-options_hx diff -N patches/patch-qemu-options_hx --- patches/patch-qemu-options_hx 13 Sep 2022 20:11:35 -0000 1.13 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,35 +0,0 @@ -sndio module - -Index: qemu-options.hx ---- qemu-options.hx.orig -+++ qemu-options.hx -@@ -767,6 +767,9 @@ DEF("audiodev", HAS_ARG, QEMU_OPTION_audiodev, - "-audiodev sdl,id=id[,prop[=value][,...]]\n" - " in|out.buffer-count= number of buffers\n" - #endif -+#ifdef CONFIG_AUDIO_SNDIO -+ "-audiodev sndio,id=id[,prop[=value][,...]]\n" -+#endif - #ifdef CONFIG_SPICE - "-audiodev spice,id=id[,prop[=value][,...]]\n" - #endif -@@ -932,6 +935,19 @@ SRST - - ``in|out.buffer-count=count`` - Sets the count of the buffers. -+ -+``-audiodev sndio,id=id[,prop[=value][,...]]`` -+ Creates a backend using SNDIO. This backend is available on -+ OpenBSD and most other Unix-like systems. -+ -+ Sndio specific options are: -+ -+ ``in|out.dev=device`` -+ Specify the sndio device to use for input and/or output. Default -+ is ``default``. -+ -+ ``in|out.latency=usecs`` -+ Sets the desired period length in microseconds. - - ``-audiodev spice,id=id[,prop[=value][,...]]`` - Creates a backend that sends audio through SPICE. This backend Index: patches/patch-qga_commands-bsd_c =================================================================== RCS file: patches/patch-qga_commands-bsd_c diff -N patches/patch-qga_commands-bsd_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-qga_commands-bsd_c 10 Nov 2022 05:27:50 -0000 @@ -0,0 +1,16 @@ +Index: qga/commands-bsd.c +--- qga/commands-bsd.c.orig ++++ qga/commands-bsd.c +@@ -21,7 +21,12 @@ + #include <sys/ucred.h> + #include <sys/mount.h> + #include <net/if_dl.h> ++#ifdef __OpenBSD__ ++#include <net/if_arp.h> ++#include <netinet/if_ether.h> ++#else + #include <net/ethernet.h> ++#endif + #include <paths.h> + + #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) Index: patches/patch-qga_commands-posix_c =================================================================== RCS file: /home/cvs/ports/emulators/qemu/patches/patch-qga_commands-posix_c,v retrieving revision 1.6 diff -u -p -u -p -r1.6 patch-qga_commands-posix_c --- patches/patch-qga_commands-posix_c 14 Sep 2022 20:52:16 -0000 1.6 +++ patches/patch-qga_commands-posix_c 4 Dec 2022 06:39:40 -0000 @@ -11,21 +11,23 @@ Setting user password is not supported o Index: qga/commands-posix.c --- qga/commands-posix.c.orig +++ qga/commands-posix.c -@@ -57,11 +57,20 @@ +@@ -45,13 +45,23 @@ + #include <arpa/inet.h> + #include <sys/socket.h> #include <net/if.h> - #include <sys/types.h> - #include <ifaddrs.h> --#ifdef CONFIG_SOLARIS -+#if defined(__OpenBSD__) -+#include <net/if_dl.h> -+#include <net/if_types.h> ++#ifdef __OpenBSD__ ++#include <net/if_arp.h> +#include <netinet/if_ether.h> -+#elif defined CONFIG_SOLARIS ++#else + #include <net/ethernet.h> ++#endif + #include <sys/types.h> + #ifdef CONFIG_SOLARIS #include <sys/sockio.h> #endif #endif -+#ifdef CONFIG_BSD ++#ifdef __OpenBSD__ +#include <sys/sysctl.h> +#include <sys/statvfs.h> +#endif @@ -33,120 +35,17 @@ Index: qga/commands-posix.c static void ga_wait_child(pid_t pid, int *status, Error **errp) { pid_t rpid; -@@ -88,7 +97,11 @@ void qmp_guest_shutdown(bool has_mode, const char *mod - pid_t pid; - int status; - --#ifdef CONFIG_SOLARIS -+#ifdef CONFIG_BSD -+ const char *powerdown_flag = "-p"; -+ const char *halt_flag = "-h"; -+ const char *reboot_flag = "-r"; -+#elif defined (CONFIG_SOLARIS) - const char *powerdown_flag = "-i5"; - const char *halt_flag = "-i0"; - const char *reboot_flag = "-i6"; -@@ -154,9 +167,11 @@ void qmp_guest_shutdown(bool has_mode, const char *mod - void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp) - { - int ret; -+#ifndef CONFIG_BSD - int status; - pid_t pid; - Error *local_err = NULL; -+#endif - struct timeval tv; - static const char hwclock_path[] = "/sbin/hwclock"; - static int hwclock_available = -1; -@@ -195,6 +210,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns - } - } - -+#ifndef CONFIG_BSD - /* Now, if user has passed a time to set and the system time is set, we - * just need to synchronize the hardware clock. However, if no time was - * passed, user is requesting the opposite: set the system time from the -@@ -230,6 +246,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns - error_setg(errp, "hwclock failed to set hardware clock to system time"); - return; +@@ -2232,12 +2242,118 @@ out: + close(datafd[1]); } -+#endif } - - typedef enum { -@@ -2985,7 +3002,7 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp - return head; - } - --#else /* defined(__linux__) */ -+#elif defined(CONFIG_BSD) - - void qmp_guest_suspend_disk(Error **errp) - { -@@ -3004,10 +3021,209 @@ void qmp_guest_suspend_hybrid(Error **errp) - - GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp) +-#else /* __linux__ || __FreeBSD__ */ ++#elif defined(__OpenBSD__) /* __linux__ || __FreeBSD__ */ + void qmp_guest_set_user_password(const char *username, + const char *password, + bool crypted, + Error **errp) { -+ int64_t current; -+ GuestLogicalProcessorList *head, **link; -+ long sc_max; -+ Error *local_err = NULL; -+ int Query[2]; -+ int NumCpu = 0; -+ size_t Length = sizeof(NumCpu); -+ -+ Query[0] = CTL_HW; -+#ifdef HW_NCPUONLINE -+ Query[1] = HW_NCPUONLINE; -+#else -+ Query[1] = HW_NCPU; -+#endif -+ -+ current = 0; -+ head = NULL; -+ link = &head; -+ if (sysctl(Query, 2, &NumCpu, &Length, NULL, 0) == -1) { -+ error_setg(errp, "sysctl get CTL_HW.HW_NCPU failed"); -+ } -+ sc_max = NumCpu; -+ -+ while (local_err == NULL && current < sc_max) { -+ GuestLogicalProcessor *vcpu; -+ GuestLogicalProcessorList *entry; -+ int64_t id = current++; -+ vcpu = g_malloc0(sizeof *vcpu); -+ vcpu->logical_id = id; -+ vcpu->has_can_offline = false; /* lolspeak ftw */ -+ vcpu->online = true; -+ vcpu->can_offline = false; -+ entry = g_malloc0(sizeof *entry); -+ entry->value = vcpu; -+ *link = entry; -+ link = &entry->next; -+ } -+ -+ if (local_err == NULL) { -+ /* there's no guest with zero VCPUs */ -+ g_assert(head != NULL); -+ return head; -+ } -+ -+ qapi_free_GuestLogicalProcessorList(head); -+ error_propagate(errp, local_err); -+ return NULL; -+} -+ -+int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp) -+{ - error_setg(errp, QERR_UNSUPPORTED); -+ return -1; -+} -+ -+void qmp_guest_set_user_password(const char *username, -+ const char *password, -+ bool crypted, -+ Error **errp) -+{ + Error *local_err = NULL; + char *pw_path = NULL; + pid_t pid; @@ -247,6 +146,82 @@ Index: qga/commands-posix.c + close(datafd[1]); + } +} ++#else /* __OpenBSD__ */ ++void qmp_guest_set_user_password(const char *username, ++ const char *password, ++ bool crypted, ++ Error **errp) ++{ + error_setg(errp, QERR_UNSUPPORTED); + } + #endif /* __linux__ || __FreeBSD__ */ +@@ -2750,7 +2866,7 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp + return head; + } + +-#else /* defined(__linux__) */ ++#elif defined(CONFIG_BSD) + + void qmp_guest_suspend_disk(Error **errp) + { +@@ -2769,10 +2885,103 @@ void qmp_guest_suspend_hybrid(Error **errp) + + GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp) + { ++ int64_t current; ++ GuestLogicalProcessorList *head, **link; ++ long sc_max; ++ Error *local_err = NULL; ++ int Query[2]; ++ int NumCpu = 0; ++ size_t Length = sizeof(NumCpu); ++ ++ Query[0] = CTL_HW; ++#ifdef HW_NCPUONLINE ++ Query[1] = HW_NCPUONLINE; ++#else ++ Query[1] = HW_NCPU; ++#endif ++ ++ current = 0; ++ head = NULL; ++ link = &head; ++ if (sysctl(Query, 2, &NumCpu, &Length, NULL, 0) == -1) { ++ error_setg(errp, "sysctl get CTL_HW.HW_NCPU failed"); ++ } ++ sc_max = NumCpu; ++ ++ while (local_err == NULL && current < sc_max) { ++ GuestLogicalProcessor *vcpu; ++ GuestLogicalProcessorList *entry; ++ int64_t id = current++; ++ vcpu = g_malloc0(sizeof *vcpu); ++ vcpu->logical_id = id; ++ vcpu->has_can_offline = false; /* lolspeak ftw */ ++ vcpu->online = true; ++ vcpu->can_offline = false; ++ entry = g_malloc0(sizeof *entry); ++ entry->value = vcpu; ++ *link = entry; ++ link = &entry->next; ++ } ++ ++ if (local_err == NULL) { ++ /* there's no guest with zero VCPUs */ ++ g_assert(head != NULL); ++ return head; ++ } ++ ++ qapi_free_GuestLogicalProcessorList(head); ++ error_propagate(errp, local_err); ++ return NULL; ++} ++ ++int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp) ++{ + error_setg(errp, QERR_UNSUPPORTED); ++ return -1; ++} + +GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp) +{ @@ -293,51 +268,25 @@ Index: qga/commands-posix.c int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp) { error_setg(errp, QERR_UNSUPPORTED); -@@ -3144,9 +3360,11 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inter - GuestNetworkInterfaceStat *interface_stat = NULL; - char addr4[INET_ADDRSTRLEN]; - char addr6[INET6_ADDRSTRLEN]; -+#ifndef __OpenBSD__ - int sock; - struct ifreq ifr; - unsigned char *mac_addr; -+#endif - void *p; - - g_debug("Processing %s interface", ifa->ifa_name); -@@ -3162,6 +3380,23 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inter +@@ -2881,7 +3090,7 @@ static int guest_get_network_stats(const char *name, + return -1; + } - if (!info->has_hardware_address) { - /* we haven't obtained HW address yet */ -+#ifdef __OpenBSD__ -+ if (ifa->ifa_addr != NULL && -+ ifa->ifa_addr->sa_family == AF_LINK) { -+ struct sockaddr_dl *sdl = -+ (struct sockaddr_dl *)ifa->ifa_addr; -+ -+ if (sdl->sdl_alen == ETHER_ADDR_LEN && -+ (sdl->sdl_type == IFT_ETHER || -+ sdl->sdl_type == IFT_CARP)) { -+ info->hardware_address = -+ g_strdup_printf("%s", -+ ether_ntoa((struct ether_addr *)LLADDR(sdl))); -+ -+ info->has_hardware_address = true; -+ } -+ } -+#else - sock = socket(PF_INET, SOCK_STREAM, 0); - if (sock == -1) { - error_setg_errno(errp, errno, "failed to create socket"); -@@ -3200,6 +3435,7 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inter - info->has_hardware_address = true; - } - close(sock); -+#endif - } +-#ifndef __FreeBSD__ ++#ifndef CONFIG_BSD + /* + * Fill "buf" with MAC address by ifaddrs. Pointer buf must point to a + * buffer with ETHER_ADDR_LEN length at least. +@@ -2930,7 +3139,7 @@ bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned c + close(sock); + return true; + } +-#endif /* __FreeBSD__ */ ++#endif /* CONFIG_BSD */ - if (ifa->ifa_addr && -@@ -3291,11 +3527,245 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inter + /* + * Build information about guest interfaces +@@ -3070,11 +3279,245 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inter #if !defined(CONFIG_FSFREEZE) @@ -583,7 +532,7 @@ Index: qga/commands-posix.c GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp) { -@@ -3361,12 +3831,21 @@ GList *ga_command_blacklist_init(GList *blacklist) +@@ -3140,12 +3583,21 @@ GList *ga_command_init_blockedrpcs(GList *blockedrpcs) { #if !defined(__linux__) { @@ -605,7 +554,7 @@ Index: qga/commands-posix.c char **p = (char **)list; while (*p) { -@@ -3382,11 +3861,19 @@ GList *ga_command_blacklist_init(GList *blacklist) +@@ -3161,11 +3613,19 @@ GList *ga_command_init_blockedrpcs(GList *blockedrpcs) #if !defined(CONFIG_FSFREEZE) { Index: patches/patch-qga_main_c =================================================================== RCS file: /home/cvs/ports/emulators/qemu/patches/patch-qga_main_c,v retrieving revision 1.5 diff -u -p -u -p -r1.5 patch-qga_main_c --- patches/patch-qga_main_c 13 Sep 2022 20:11:35 -0000 1.5 +++ patches/patch-qga_main_c 10 Nov 2022 05:27:50 -0000 @@ -3,23 +3,27 @@ Adapted from https://github.com/aborche/ Index: qga/main.c --- qga/main.c.orig +++ qga/main.c -@@ -45,9 +45,15 @@ - #endif +@@ -40,12 +40,16 @@ + #include "commands-common.h" #ifndef _WIN32 +-#ifdef __FreeBSD__ +#ifdef CONFIG_BSD -+#define QGA_VIRTIO_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0" -+#define QGA_STATE_RELATIVE_DIR "run" + #define QGA_VIRTIO_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0" +-#else /* __FreeBSD__ */ ++#else /* CONFIG_BSD */ + #define QGA_VIRTIO_PATH_DEFAULT "/dev/virtio-ports/org.qemu.guest_agent.0" +-#endif /* __FreeBSD__ */ ++#endif /* CONFIG_BSD */ ++#ifdef __OpenBSD__ +#define QGA_SERIAL_PATH_DEFAULT "/dev/cua01" +#else - #define QGA_VIRTIO_PATH_DEFAULT "/dev/virtio-ports/org.qemu.guest_agent.0" - #define QGA_STATE_RELATIVE_DIR "run" #define QGA_SERIAL_PATH_DEFAULT "/dev/ttyS0" +#endif + #define QGA_STATE_RELATIVE_DIR "run" #else #define QGA_VIRTIO_PATH_DEFAULT "\\\\.\\Global\\org.qemu.guest_agent.0" - #define QGA_STATE_RELATIVE_DIR "qemu-ga" -@@ -1475,7 +1481,11 @@ int main(int argc, char **argv) +@@ -1483,7 +1487,11 @@ int main(int argc, char **argv) } if (config->method == NULL) { Index: pkg/PLIST-main =================================================================== RCS file: /home/cvs/ports/emulators/qemu/pkg/PLIST-main,v retrieving revision 1.11 diff -u -p -u -p -r1.11 PLIST-main --- pkg/PLIST-main 13 Sep 2022 20:11:35 -0000 1.11 +++ pkg/PLIST-main 8 Dec 2022 06:38:23 -0000 @@ -90,6 +90,7 @@ share/doc/qemu/_static/pygments.css share/doc/qemu/_static/qemu_128x128.png share/doc/qemu/_static/qemu_32x32.png share/doc/qemu/_static/searchtools.js +share/doc/qemu/_static/sphinx_highlight.js share/doc/qemu/_static/theme_overrides.css share/doc/qemu/_static/underscore-1.13.1.js share/doc/qemu/_static/underscore.js @@ -101,6 +102,7 @@ share/doc/qemu/about/license.html share/doc/qemu/about/removed-features.html share/doc/qemu/dbus-dbusindex.html share/doc/qemu/devel/ +share/doc/qemu/devel/acpi-bits.html share/doc/qemu/devel/atomics.html share/doc/qemu/devel/bitops.html share/doc/qemu/devel/block-coroutine-wrapper.html @@ -121,6 +123,7 @@ share/doc/qemu/devel/index-tcg.html share/doc/qemu/devel/index.html share/doc/qemu/devel/kconfig.html share/doc/qemu/devel/loads-stores.html +share/doc/qemu/devel/maintainers.html share/doc/qemu/devel/memory.html share/doc/qemu/devel/migration.html share/doc/qemu/devel/modules.html @@ -260,6 +263,11 @@ share/doc/qemu/system/managed-startup.ht share/doc/qemu/system/monitor.html share/doc/qemu/system/multi-process.html share/doc/qemu/system/mux-chardev.html +share/doc/qemu/system/openrisc/ +share/doc/qemu/system/openrisc/cpu-features.html +share/doc/qemu/system/openrisc/emulation.html +share/doc/qemu/system/openrisc/or1k-sim.html +share/doc/qemu/system/openrisc/virt.html share/doc/qemu/system/ppc/ share/doc/qemu/system/ppc/embedded.html share/doc/qemu/system/ppc/powermac.html @@ -292,6 +300,7 @@ share/doc/qemu/system/target-avr.html share/doc/qemu/system/target-i386.html share/doc/qemu/system/target-m68k.html share/doc/qemu/system/target-mips.html +share/doc/qemu/system/target-openrisc.html share/doc/qemu/system/target-ppc.html share/doc/qemu/system/target-riscv.html share/doc/qemu/system/target-rx.html
