git: 564c4cb3d9bb - main - emulators/qemu: Add FLAVOR for the qemu guest agent

From: Ryan Steinmetz <zi_at_FreeBSD.org>
Date: Fri, 20 Jan 2023 19:27:56 UTC
The branch main has been updated by zi:

URL: https://cgit.FreeBSD.org/ports/commit/?id=564c4cb3d9bb0aa87d676103fa164ea9833b7897

commit 564c4cb3d9bb0aa87d676103fa164ea9833b7897
Author:     Ryan Steinmetz <zi@FreeBSD.org>
AuthorDate: 2023-01-20 19:26:34 +0000
Commit:     Ryan Steinmetz <zi@FreeBSD.org>
CommitDate: 2023-01-20 19:26:34 +0000

    emulators/qemu: Add FLAVOR for the qemu guest agent
    
    - Bump PORTREVISION
    
    Approved by:    maintainer (via IRC)
---
 emulators/qemu/Makefile                  | 45 ++++++++++++++++++++------------
 emulators/qemu/files/qemu-guest-agent.in | 31 ++++++++++++++++++++++
 emulators/qemu/pkg-descr-ga              | 11 ++++++++
 emulators/qemu/pkg-plist-ga              | 43 ++++++++++++++++++++++++++++++
 4 files changed, 114 insertions(+), 16 deletions(-)

diff --git a/emulators/qemu/Makefile b/emulators/qemu/Makefile
index ab3651a9c86e..574efdcd571f 100644
--- a/emulators/qemu/Makefile
+++ b/emulators/qemu/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	qemu
 PORTVERSION=	7.2.0
+PORTREVISION=	1
 CATEGORIES=	emulators
 MASTER_SITES=	https://download.qemu.org/
 DIST_SUBDIR=	qemu/${PORTVERSION}
@@ -10,47 +11,52 @@ WWW=		https://www.qemu.org/
 
 LICENSE=	GPLv2
 
-.if ${FLAVOR:U} != tools
+.if ${FLAVOR:U} != tools && ${FLAVOR:U} != guestagent
 ONLY_FOR_ARCHS=	aarch64 amd64 i386 powerpc64 powerpc64le
 # We need to check if it build with other ARCHS
 .endif
 
 BUILD_DEPENDS=	bash:shells/bash
-.if ${FLAVOR:U} != tools
+.if ${FLAVOR:U} != tools && ${FLAVOR:U} != guestagent
 LIB_DEPENDS+=	libfdt.so:sysutils/dtc \
 		libzstd.so:archivers/zstd
 .endif
-.if (${FLAVOR:U} != nox11 && ${FLAVOR:U} != tools)
+.if (${FLAVOR:U} != nox11 && ${FLAVOR:U} != tools && ${FLAVOR:U} != guestagent)
 LIB_DEPENDS+=	libepoxy.so:graphics/libepoxy
 .endif
 
-FLAVORS=			default nox11 tools
+FLAVORS=			default nox11 tools guestagent
 FLAVOR?=			${FLAVORS:[1]}
 default_CONFLICTS_INSTALL=	qemu-devel qemu-nox11 qemu-tools qemu-utils \
 				qemu6* qemu70*
 nox11_PKGNAMESUFFIX=		-nox11
-nox11_CONFLICTS_INSTALL=	qemu qemu-devel qemu6* qemu70*
+nox11_CONFLICTS_INSTALL=	qemu qemu-devel qemu6* qemu70* qemu-guest-agent
 nox11_COMMENT=			(without X11)
 tools_PKGNAMESUFFIX=		-tools
 tools_COMMENT=			(tools only)
 tools_CONFLICTS_INSTALL=	qemu qemu-devel qemu-nox11 qemu-utils qemu6* \
-				qemu70*
+				qemu70* qemu-guest-agent
 tools_DESCR=			${.CURDIR}/pkg-descr-tools
 tools_PLIST=			${.CURDIR}/pkg-plist-tools
+guestagent_PKGNAMESUFFIX=		-guest-agent
+guestagent_COMMENT=			(guest agent)
+guestagent_DESCR=		${.CURDIR}/pkg-descr-ga
+guestagent_PLIST=		${.CURDIR}/pkg-plist-ga
+guestagent_CONFLICTS_INSTALL=	qemu qemu-devel qemu-nox11 qemu-tools qemu-utils qemu6* \
+				qemu70* qemu-guest-agent
 
 USES=		cpe gmake gnome ninja perl5 pkgconfig python:build tar:xz
 USE_GNOME=	glib20
 USE_PERL5=	build
-.if ${FLAVOR:U} != tools
+.if ${FLAVOR:U} != tools && ${FLAVOR:U} != guestagent
 USES+=		iconv:wchar_t
 .endif
-.if (${FLAVOR:U} != nox11 && ${FLAVOR:U} != tools)
+.if (${FLAVOR:U} != nox11 && ${FLAVOR:U} != tools && ${FLAVOR:U} != guestagent)
 USE_GNOME+=	cairo
 .endif
 
 HAS_CONFIGURE=		yes
 CONFIGURE_ARGS+=	--cc=${CC} \
-			--disable-guest-agent \
 			--disable-kvm \
 			--disable-linux-aio \
 			--disable-linux-user \
@@ -62,11 +68,17 @@ CONFIGURE_ARGS+=	--cc=${CC} \
 			--mandir=${PREFIX}/man \
 			--prefix=${PREFIX} \
 			--python=${PYTHON_CMD}
-.if ${FLAVOR:U} != tools
+.if ${FLAVOR:U} == guestagent
+USE_RC_SUBR=		qemu-guest-agent
+CONFIGURE_ARGS+=	--enable-guest-agent --disable-tools --disable-xkbcommon
+.else
+CONFIGURE_ARGS+=	--disable-guest-agent
+.endif
+.if ${FLAVOR:U} != tools && ${FLAVOR:U} != guestagent
 CONFIGURE_ARGS+=	--enable-fdt=system \
 			--enable-netmap
 .endif
-.if ${FLAVOR:U} == tools
+.if ${FLAVOR:U} == tools || ${FLAVOR:U} == guestagent
 CONFIGURE_ARGS+=	--disable-attr \
 			--disable-blobs \
 			--disable-brlapi \
@@ -77,7 +89,6 @@ CONFIGURE_ARGS+=	--disable-attr \
 			--disable-fdt \
 			--disable-gcrypt \
 			--disable-glusterfs \
-			--disable-guest-agent \
 			--disable-libnfs \
 			--disable-libusb \
 			--disable-lzo \
@@ -95,8 +106,10 @@ CONFIGURE_ARGS+=	--disable-attr \
 			--disable-user \
 			--disable-vhost-net \
 			--disable-virtfs \
-			--disable-vnc \
-			--enable-tools
+			--disable-vnc
+.endif
+.if ${FLAVOR:U} == tools
+CONFIGURE_ARGS+=	--enable-tools
 .endif
 
 CFLAGS:=	${CFLAGS:C/-fno-tree-vrp//}
@@ -116,7 +129,7 @@ OPTIONS_SINGLE_NCURSES=		NCURSES_BASE NCURSES_DEFAULT NCURSES_PORT
 .if ${FLAVOR:U} == nox11
 OPTIONS_EXCLUDE:=		GTK3 X11
 .endif
-.if ${FLAVOR:U} == tools
+.if ${FLAVOR:U} == tools || ${FLAVOR:U} == guestagent
 OPTIONS_EXCLUDE:=		CAPSTONE CDROM_DMA CURL DEBUG GNUTLS GTK3 ISCSI \
 				JPEG NCURSES NCURSES_BASE NCURSES_DEFAULT \
 				NCURSES_PORT OPENGL PNG SAMBA SASL STATIC_LINK \
@@ -233,7 +246,7 @@ do-install:
 
 .if !target(post-install)
 post-install:
-.if ${FLAVOR:U} != tools
+.if ${FLAVOR:U} != tools && ${FLAVOR:U} != guestagent
 	${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifup.sample ${STAGEDIR}${PREFIX}/etc
 	${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifdown.sample ${STAGEDIR}${PREFIX}/etc
 .endif
diff --git a/emulators/qemu/files/qemu-guest-agent.in b/emulators/qemu/files/qemu-guest-agent.in
new file mode 100644
index 000000000000..158666dbbc31
--- /dev/null
+++ b/emulators/qemu/files/qemu-guest-agent.in
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# PROVIDE: qemu_guest_agent
+# REQUIRE: DAEMON
+# KEYWORD: nojail
+#
+
+#
+# Add the following lines to /etc/rc.conf to enable qemu-guest-agent:
+#
+#qemu_guest_agent_enable="YES"
+#
+# For detailed logging add flags -v and -l to /etc/rc.conf
+#
+#qemu_guest_agent_flags="-d -v -l /var/log/qemu-ga.log"
+
+. /etc/rc.subr
+
+name=qemu_guest_agent
+rcvar=qemu_guest_agent_enable
+
+load_rc_config $name
+
+qemu_guest_agent_flags=${qemu_guest_agent_flags-"-d"}
+qemu_guest_agent_enable=${qemu_guest_agent_enable:-"NO"}
+
+qemu_guest_agent_bin=/usr/local/bin/qemu-ga
+command=${qemu_guest_agent_bin}
+pidfile="/var/run/qemu-ga.pid"
+
+run_rc_command "$1"
diff --git a/emulators/qemu/pkg-descr-ga b/emulators/qemu/pkg-descr-ga
new file mode 100644
index 000000000000..c796dce46669
--- /dev/null
+++ b/emulators/qemu/pkg-descr-ga
@@ -0,0 +1,11 @@
+The QEMU Guest Agent is a daemon intended to be run within virtual machines.
+It allows the hypervisor host to perform various operations in the guest,
+such as:
+
+* get information from the guest
+* set the guest’s system time
+* read/write a file
+* sync and freeze the filesystems
+* suspend the guest
+* reconfigure guest local processors
+* set user’s password
diff --git a/emulators/qemu/pkg-plist-ga b/emulators/qemu/pkg-plist-ga
new file mode 100644
index 000000000000..fb23343352ea
--- /dev/null
+++ b/emulators/qemu/pkg-plist-ga
@@ -0,0 +1,43 @@
+bin/qemu-ga
+include/qemu-plugin.h
+man/man1/qemu.1.gz
+man/man7/qemu-block-drivers.7.gz
+man/man7/qemu-cpu-models.7.gz
+man/man7/qemu-ga-ref.7.gz
+man/man7/qemu-qmp-ref.7.gz
+man/man8/qemu-ga.8.gz
+%%DATADIR%%/keymaps/ar
+%%DATADIR%%/keymaps/bepo
+%%DATADIR%%/keymaps/cz
+%%DATADIR%%/keymaps/da
+%%DATADIR%%/keymaps/de
+%%DATADIR%%/keymaps/de-ch
+%%DATADIR%%/keymaps/en-gb
+%%DATADIR%%/keymaps/en-us
+%%DATADIR%%/keymaps/es
+%%DATADIR%%/keymaps/et
+%%DATADIR%%/keymaps/fi
+%%DATADIR%%/keymaps/fo
+%%DATADIR%%/keymaps/fr
+%%DATADIR%%/keymaps/fr-be
+%%DATADIR%%/keymaps/fr-ca
+%%DATADIR%%/keymaps/fr-ch
+%%DATADIR%%/keymaps/hr
+%%DATADIR%%/keymaps/hu
+%%DATADIR%%/keymaps/is
+%%DATADIR%%/keymaps/it
+%%DATADIR%%/keymaps/ja
+%%DATADIR%%/keymaps/lt
+%%DATADIR%%/keymaps/lv
+%%DATADIR%%/keymaps/mk
+%%DATADIR%%/keymaps/nl
+%%DATADIR%%/keymaps/no
+%%DATADIR%%/keymaps/pl
+%%DATADIR%%/keymaps/pt
+%%DATADIR%%/keymaps/pt-br
+%%DATADIR%%/keymaps/ru
+%%DATADIR%%/keymaps/sl
+%%DATADIR%%/keymaps/sv
+%%DATADIR%%/keymaps/th
+%%DATADIR%%/keymaps/tr
+%%DATADIR%%/trace-events-all