Index | Thread | Search

From:
Antoine Jacoutot <ajacoutot@bsdfrog.org>
Subject:
Re: better interaction between meson and cargo modules
To:
ports@openbsd.org
Date:
Sat, 29 Aug 2026 14:26:32 +0200

Download raw body.

Thread
On Fri, Aug 28, 2026 at 05:33:08PM +0200, Antoine Jacoutot wrote:
> Hi.
> 
> Here's a diff for the meson MODULE to easily interact with the cargo one.
> Along with patches for ports using both MODULEs (all rebuilt fine).
> Comments, OK?

And a diff to the man page.

Index: share/man/man5/port-modules.5
===================================================================
RCS file: /cvs/src/share/man/man5/port-modules.5,v
diff -u -p -r1.288 port-modules.5
--- share/man/man5/port-modules.5	25 Aug 2026 14:36:31 -0000	1.288
+++ share/man/man5/port-modules.5	29 Aug 2026 12:25:57 -0000
@@ -759,6 +759,23 @@ To prevent this, unless devel/cmake/core
 .Xr cmake 1
 will be disabled by creating a link to false in ${WRKDIR}/bin/.
 .Pp
+Specific integration for building with
+.Xr cargo 1
+is automatically enabled if
+.Pa devel/cargo
+is included in MODULES.
+.Va MODCARGO_BUILD ,
+.Va MODCARGO_INSTALL ,
+and
+.Va MODCARGO_TEST
+are set to
+.Cm \&No ,
+${MODCARGO_ENV} is added to
+.Va MAKE_ENV
+and
+${MODCARGO_configure} is added to
+.Va MODMESON_pre-configure .
+.Pp
 This module supports the following knob:
 .Bl -tag -width Ds
 .It Ev MODMESON_WANTCOLOR


> Index: meson.port.mk
> ===================================================================
> RCS file: /cvs/ports/devel/meson/meson.port.mk,v
> diff -u -p -r1.125 meson.port.mk
> --- meson.port.mk	28 Aug 2026 10:56:26 -0000	1.125
> +++ meson.port.mk	28 Aug 2026 15:31:50 -0000
> @@ -56,6 +56,19 @@ MODMESON_CONFIGURE_ARGS +=	${_MODMESON_S
>  MODMESON_post-patch=	@ln -sf /usr/bin/false ${WRKDIR}/bin/cmake
>  .   endif
>  
> +# interaction with the devel/cargo MODULE
> +.   if ${MODULES:Mdevel/cargo}
> +MOD_ORDER != echo '${MODULES}' | grep -qE 'devel/meson.*devel/cargo' || echo KO
> +.     if ${MOD_ORDER} == "KO"
> +ERRORS +=	"Fatal: devel/meson must be listed before devel/cargo in MODULES"
> +.     endif
> +MODCARGO_BUILD=		No
> +MODCARGO_INSTALL=	No
> +MODCARGO_TEST=		No
> +MAKE_ENV +=		${MODCARGO_ENV}
> +MODMESON_pre-configure +=	@${MODCARGO_configure}
> +.   endif
> +
>  CONFIGURE_ARGS +=	${MODMESON_CONFIGURE_ARGS}
>  CONFIGURE_ENV +=	${MODMESON_CONFIGURE_ENV}
>  MODMESON_configure=	${SETENV} ${CONFIGURE_ENV} ${LOCALBASE}/bin/meson setup \
> 
> 
> Index: audio/euphonica/Makefile
> ===================================================================
> RCS file: /cvs/ports/audio/euphonica/Makefile,v
> diff -u -p -r1.5 Makefile
> --- audio/euphonica/Makefile	18 Aug 2026 13:08:43 -0000	1.5
> +++ audio/euphonica/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -19,8 +19,8 @@ WANTLIB += ${MODCARGO_WANTLIB} adwaita-1
>  WANTLIB += glib-2.0 gobject-2.0 graphene-1.0 gtk-4 intl m pipewire-0.3
>  WANTLIB += secret-1 sqlite3 ssl
>  
> -MODULES =		devel/cargo \
> -			devel/meson
> +MODULES =		devel/meson \
> +			devel/cargo
>  
>  BUILD_DEPENDS =		devel/gettext,-tools
>  
> @@ -41,17 +41,6 @@ MODULES +=		lang/clang
>  MODCARGO_ENV +=		CLANG_BASE_PATH=/usr \
>  			LIBCLANG_PATH=${LOCALBASE}/llvm${MODCLANG_VERSION}/lib \
>  			LD_LIBRARY_PATH=${LOCALBASE}/llvm${MODCLANG_VERSION}/lib
> -
> -CONFIGURE_STYLE =	meson
> -
> -MODCARGO_BUILD =	No
> -MODCARGO_INSTALL =	No
> -MODCARGO_TEST =		No
> -
> -MAKE_ENV +=		${MODCARGO_ENV}
> -
> -pre-configure:
> -	@${MODCARGO_configure}
>  
>  .include "crates.inc"
>  
> Index: x11/gnome/librsvg/Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/gnome/librsvg/Makefile,v
> diff -u -p -r1.256 Makefile
> --- x11/gnome/librsvg/Makefile	21 Aug 2026 16:51:51 -0000	1.256
> +++ x11/gnome/librsvg/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -31,19 +31,14 @@ GNOME_VERSION=		${STABLE_VERSION}
>  MODULES +=		lang/clang
>  MODCLANG_COMPILER_LINKS=	No
>  MODCLANG_RUNDEP=	No
> -MODULES +=		devel/cargo \
> -			devel/meson
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
> +MODULES +=		devel/meson \
> +			devel/cargo
>  MODGNOME_TOOLS +=	gi-docgen
>  BUILD_DEPENDS=		devel/cargo-c
>  # rst2man
>  BUILD_DEPENDS +=	textproc/py-docutils
>  LIB_DEPENDS +=		multimedia/dav1d
>  PKG_ARGS=		-Dold=0 -Dstable=1
> -MAKE_ENV +=		${MODCARGO_ENV}
> -MAKE_FLAGS +=		V=1
>  WANTLIB += ${MODCARGO_WANTLIB} cairo gdk_pixbuf-2.0 gio-2.0 glib-2.0
>  WANTLIB += gobject-2.0 m pango-1.0 pangocairo-1.0 xml2
>  WANTLIB += dav1d fontconfig harfbuzz
> @@ -98,7 +93,6 @@ LIB_DEPENDS +=		devel/pango \
>  .include "crates.inc"
>  pre-configure:
>  	ln -sf ${LOCALBASE}/bin/llvm-nm-${MODCLANG_VERSION} ${WRKDIR}/bin/llvm-nm
> -	@${MODCARGO_configure}
>  .else
>  post-install:
>  	rm ${PREFIX}/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.{a,la}
> Index: x11/gnome/gst-thumbnailers/Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/gnome/gst-thumbnailers/Makefile,v
> diff -u -p -r1.1.1.1 Makefile
> --- x11/gnome/gst-thumbnailers/Makefile	2 Aug 2026 10:35:18 -0000	1.1.1.1
> +++ x11/gnome/gst-thumbnailers/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -11,24 +11,14 @@ PERMIT_PACKAGE=		Yes
>  WANTLIB += ${MODCARGO_WANTLIB} gio-2.0 glib-2.0 glycin-2 gobject-2.0
>  WANTLIB += gstapp-1.0 gstbase-1.0 gstreamer-1.0 gstvideo-1.0 m
>  
> -MODULES=		devel/cargo \
> -			devel/meson \
> +MODULES=		devel/meson \
> +			devel/cargo \
>  			x11/gnome
>  
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
> -
> -MAKE_ENV +=		${MODCARGO_ENV}
> -MAKE_FLAGS +=		V=1
> -
>  LIB_DEPENDS=		multimedia/gstreamer1/plugins-base \
>  			x11/gnome/glycin
>  
>  DEBUG_PACKAGES=		${BUILD_PACKAGES}
> -
> -pre-configure:
> -	@${MODCARGO_configure}
>  
>  .include "crates.inc"
>  
> Index: x11/gnome/papers/Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/gnome/papers/Makefile,v
> diff -u -p -r1.9 Makefile
> --- x11/gnome/papers/Makefile	28 Aug 2026 09:41:58 -0000	1.9
> +++ x11/gnome/papers/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -31,21 +31,14 @@ MULTI_PACKAGES=		-main -nautilus
>  COMPILER=		base-clang ports-gcc base-gcc
>  COMPILER_LANGS=		c
>  
> -MODULES=		devel/cargo \
> +MODULES=		devel/meson \
>  			devel/dconf \
> -			devel/meson \
> +			devel/cargo \
>  			x11/gnome
>  
>  MODGNOME_TOOLS=		desktop-file-utils gobject-introspection gi-docgen \
>  			gtk-update-icon-cache yelp
>  
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
> -
> -MAKE_ENV +=		${MODCARGO_ENV}
> -MAKE_FLAGS +=		V=1
> -
>  BUILD_DEPENDS=		devel/appstream \
>  			x11/blueprint-compiler
>  
> @@ -65,9 +58,6 @@ RUN_DEPENDS-nautilus=	# empty
>  CONFIGURE_ARGS=		-Dsysprof=disabled
>  
>  DEBUG_PACKAGES=		${BUILD_PACKAGES}
> -
> -pre-configure:
> -	@${MODCARGO_configure}
>  
>  .include "crates.inc"
>  
> Index: x11/gnome/snapshot/Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/gnome/snapshot/Makefile,v
> diff -u -p -r1.2 Makefile
> --- x11/gnome/snapshot/Makefile	24 Aug 2026 14:10:54 -0000	1.2
> +++ x11/gnome/snapshot/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -15,17 +15,11 @@ WANTLIB += glycin-gtk4-2 gobject-2.0 gra
>  WANTLIB += gstpbutils-1.0 gstreamer-1.0 gstvideo-1.0 gtk-4 intl
>  WANTLIB += pango-1.0
>  
> -MODULES=		devel/cargo \
> +MODULES=		devel/meson \
>  			devel/dconf \
> -			devel/meson \
> +			devel/cargo \
>  			x11/gnome
>  
> -# don't overwrite meson(1) targets;
> -# see pre-{configure,build,install} and patch-src_meson_build
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
> -
>  MODGNOME_TOOLS=		desktop-file-utils gtk-update-icon-cache
>  
>  LIB_DEPENDS=		multimedia/gstreamer1/plugins-base \
> @@ -43,15 +37,6 @@ BUILD_DEPENDS +=	multimedia/gstreamer1/p
>  RUN_DEPENDS +=		multimedia/gstreamer1/plugins-bad
>  
>  DEBUG_PACKAGES=		${BUILD_PACKAGES}
> -
> -pre-configure:
> -	@${MODCARGO_configure}
> -
> -pre-build:
> -	@${MODCARGO_BUILD_TARGET}
> -
> -pre-install:
> -	@${MODCARGO_INSTALL_TARGET}
>  
>  .include "crates.inc"
>  
> Index: x11/gnome/snapshot/patches/patch-src_meson_build
> ===================================================================
> RCS file: x11/gnome/snapshot/patches/patch-src_meson_build
> diff -N x11/gnome/snapshot/patches/patch-src_meson_build
> --- x11/gnome/snapshot/patches/patch-src_meson_build	24 Aug 2026 13:47:24 -0000	1.1.1.1
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,31 +0,0 @@
> -Use our devel/cargo MODULE to build instead of a custom target that needs
> -network access to fetch crates.
> -
> -Index: src/meson.build
> ---- src/meson.build.orig
> -+++ src/meson.build
> -@@ -23,24 +23,3 @@ run_command(
> -   meson.project_source_root() / 'src' / 'config.rs',
> -   check: true,
> - )
> --
> --cargo_build = custom_target(
> --  'cargo-build',
> --  build_by_default: true,
> --  build_always_stale: true,
> --  output: meson.project_name(),
> --  console: true,
> --  install: true,
> --  install_dir: bindir,
> --  depends: resources,
> --  env: cargo_env,
> --  command: [
> --    cargo,
> --    'build',
> --    cargo_build_options,
> --    '&&',
> --    'cp',
> --    cargo_target / rust_target / meson.project_name(),
> --    '@OUTPUT@',
> --  ],
> --)
> Index: multimedia/gstreamer1/plugins-rs/Makefile
> ===================================================================
> RCS file: /cvs/ports/multimedia/gstreamer1/plugins-rs/Makefile,v
> diff -u -p -r1.14 Makefile
> --- multimedia/gstreamer1/plugins-rs/Makefile	1 Jul 2026 10:04:00 -0000	1.14
> +++ multimedia/gstreamer1/plugins-rs/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -13,13 +13,10 @@ WANTLIB += ${MODCARGO_WANTLIB} cairo dav
>  WANTLIB += graphene-1.0 gstbase-1.0 gstgl-1.0 gstreamer-1.0 gstrtp-1.0
>  WANTLIB += gstvideo-1.0 gtk-4 m pango-1.0 pangocairo-1.0 webpdemux
>  
> -MODULES=		devel/cargo \
> -			devel/meson
> +MODULES=		devel/meson \
> +			devel/cargo
>  
>  MODCARGO_DIST_SUBDIR=	../cargo
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
>  
>  # needs libclang.so
>  MODULES +=		lang/clang
> @@ -59,9 +56,6 @@ DISABLED +=	cdg ffv1 gif hsv png rav1e d
>  CONFIGURE_ARGS +=   -D${d}=disabled
>  .endfor
>  ###
> -
> -pre-configure:
> -	${MODCARGO_configure}
>  
>  .include "crates.inc"
>  
> Index: net/dnsdist/Makefile
> ===================================================================
> RCS file: /cvs/ports/net/dnsdist/Makefile,v
> diff -u -p -r1.70 Makefile
> --- net/dnsdist/Makefile	6 Aug 2026 10:59:20 -0000	1.70
> +++ net/dnsdist/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -21,19 +21,15 @@ SYSCONFDIR=		${BASESYSCONFDIR}/dnsdist
>  
>  COMPILER =		base-clang ports-gcc
>  
> +MODULES=		devel/meson
> +
>  .include <bsd.port.arch.mk>
>  
>  .if ${PROPERTIES:Mrust}
>  MODULES+=		devel/cargo
>  MODCARGO_CARGOTOML=	${WRKSRC}/dnsdist-rust-lib/rust/Cargo.toml
>  MODCARGO_TARGET_DIR=	${WRKSRC}/dnsdist-rust-lib/rust/target
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
>  CONFIGURE_ARGS=		-Dyaml=enabled
> -
> -pre-configure:
> -			@${MODCARGO_configure}
>  .else
>  CONFIGURE_ARGS=		-Dyaml=disabled
>  # Needed for SUPDISTFILES
> @@ -55,8 +51,6 @@ LIB_DEPENDS+=		${MODLUA_LIB_DEPENDS}
>  WANTLIB+=		${MODLUA_WANTLIB}
>  .endif
>  
> -MODULES+=		devel/meson
> -
>  CONFIGURE_STYLE=	meson
>  CONFIGURE_ARGS+=	-Dcdb=enabled \
>  			-Ddns-over-https=enabled \
> @@ -76,8 +70,6 @@ CONFIGURE_ARGS+=	-Dcdb=enabled \
>  			-Dsystemd-service=disabled \
>  			-Dtls-gnutls=disabled \
>  			-Dxsk=disabled \
> -
> -MAKE_ENV+=		${MODCARGO_ENV}
>  
>  BUILD_DEPENDS=		devel/boost \
>  			textproc/py-yaml
> Index: net/flare-messenger/Makefile
> ===================================================================
> RCS file: /cvs/ports/net/flare-messenger/Makefile,v
> diff -u -p -r1.4 Makefile
> --- net/flare-messenger/Makefile	7 Apr 2026 23:54:53 -0000	1.4
> +++ net/flare-messenger/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -28,18 +28,12 @@ WANTLIB += ${MODCARGO_WANTLIB} adwaita-1
>  WANTLIB += gio-2.0 glib-2.0 gobject-2.0 gtk-4 gtksourceview-5
>  WANTLIB += intl m pango-1.0 spelling-1
>  
> -MODULES=	devel/cargo \
> +MODULES=	devel/meson \
>  		devel/dconf \
> -		devel/meson
> +		devel/cargo
>  
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
>  MODCARGO_CRATES_KEEP=	libsqlite3-sys
>  
> -MAKE_ENV=	${MODCARGO_ENV}
> -MAKE_FLAGS=	V=1
> -
>  BUILD_DEPENDS=	devel/gettext,-tools \
>  		devel/protobuf \
>  		x11/blueprint-compiler \
> @@ -54,9 +48,6 @@ LIB_DEPENDS=	textproc/libspelling \
>  
>  post-extract:
>  	mv ${WRKDIR}/flare-* ${WRKSRC}
> -
> -pre-configure:
> -	@${MODCARGO_configure}
>  
>  .include "crates.inc"
>  
> Index: net/powerdns_recursor/Makefile
> ===================================================================
> RCS file: /cvs/ports/net/powerdns_recursor/Makefile,v
> diff -u -p -r1.77 Makefile
> --- net/powerdns_recursor/Makefile	6 Aug 2026 10:58:27 -0000	1.77
> +++ net/powerdns_recursor/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -25,6 +25,8 @@ MAINTAINER=		Otto Moerbeek <otto@drijf.n
>  
>  COMPILER =		base-clang ports-gcc
>  
> +MODULES=		devel/meson
> +
>  NO_TEST=		Yes
>  
>  LIB_DEPENDS=		devel/boost \
> @@ -36,9 +38,6 @@ LIB_DEPENDS=		devel/boost \
>  MODULES+=		devel/cargo
>  MODCARGO_CARGOTOML=	${WRKSRC}/rec-rust-lib/rust/Cargo.toml
>  MODCARGO_TARGET_DIR=	${WRKSRC}/rec-rust-lib/rust/target 
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
>  
>  .include <bsd.port.arch.mk>
>  
> @@ -57,11 +56,6 @@ WANTLIB+=		${MODLUA_WANTLIB}
>  SYSCONFDIR=		${BASESYSCONFDIR}/pdns
>  SUBST_VARS+=		BASESYSCONFDIR
>  
> -MODULES+=		devel/meson
> -
> -pre-configure:
> -			@${MODCARGO_configure}
> -
>  CONFIGURE_STYLE=	meson
>  
>  CONFIGURE_ARGS+=	-Dhardening=disabled \
> @@ -72,8 +66,6 @@ CONFIGURE_ARGS+=	-Dhardening=disabled \
>  			-Dsystemd-service=disabled \
>  			-Dlibcap=disabled \
>  			-Dtls-gnutls=disabled
> -
> -MAKE_ENV+=		${MODCARGO_ENV}
>  
>  EXAMPLE_DIR=		${PREFIX}/share/examples/pdns/
>  
> Index: x11/gnome/glycin/Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/gnome/glycin/Makefile,v
> diff -u -p -r1.2 Makefile
> --- x11/gnome/glycin/Makefile	22 Aug 2026 07:19:04 -0000	1.2
> +++ x11/gnome/glycin/Makefile	28 Aug 2026 15:32:27 -0000
> @@ -16,25 +16,17 @@ PERMIT_PACKAGE=		Yes
>  WANTLIB += ${MODCARGO_WANTLIB} gio-2.0 glib-2.0 gobject-2.0 gtk-4
>  WANTLIB += m
>  
> -MODULES=		devel/cargo \
> -			devel/meson \
> +MODULES=		devel/meson \
> +			devel/cargo \
>  			x11/gnome
>  
> -MODCARGO_BUILD=		No
> -MODCARGO_INSTALL=	No
> -MODCARGO_TEST=		No
> -
>  MODGNOME_TOOLS=		gobject-introspection vala
>  
> -MAKE_ENV +=		${MODCARGO_ENV}
>  MAKE_FLAGS +=		V=1
>  
>  LIB_DEPENDS=		x11/gtk+4
>  
>  DEBUG_PACKAGES=		${BUILD_PACKAGES}
> -
> -pre-configure:
> -	@${MODCARGO_configure}
>  
>  .include "crates.inc"
>  
> 
> 
> -- 
> Antoine
> 

-- 
Antoine