On Sat, May 3, 2025 at 2:28 AM Sam James <s...@gentoo.org> wrote: > > Matt Turner <matts...@gentoo.org> writes: > > > To be used by X.Org packages with a meson build system. Largely a copy > > of xorg-3.eclass with changes necessary to switch from autotools to > > meson. > > > > Compared with xorg-3, I've dropped a few things that I don't think are > > necessary (at least initially), namely: > > > > - font support (media-libs/font-* packages); packages change very > > rarely and don't have meson build systems upstream. > > Seems reasonable. We can add that later if needed (or give them their > own eclass if things necessitated that). > > > - XORG_DOC dependencies. This actually looks wrong in xorg-3? > > - asciidoc is used to generate docbook documentation (which I > > don't think we ever do in the ebuilds) > > - xmlto is used to create some man pages from XML, but the man pages > > are checked into git so we don't ever need to generate them > > Heh, I think I remember being confused about this before. > > > --- > > eclass/xorg-meson.eclass | 224 +++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 224 insertions(+) > > create mode 100644 eclass/xorg-meson.eclass > > > > diff --git ./eclass/xorg-meson.eclass ./eclass/xorg-meson.eclass > > new file mode 100644 > > index 000000000000..5c0a7d582479 > > --- /dev/null > > +++ ./eclass/xorg-meson.eclass > > @@ -0,0 +1,224 @@ > > +# Copyright 2025 Gentoo Authors > > +# Distributed under the terms of the GNU General Public License v2 > > + > > +# @ECLASS: xorg-meson.eclass > > +# @MAINTAINER: > > +# x...@gentoo.org > > +# @AUTHOR: > > +# Author: Matt Turner <matts...@gentoo.org> > > +# @SUPPORTED_EAPIS: 8 > > +# @PROVIDES: meson meson-multilib > > +# @BLURB: Reduces code duplication in the modularized X11 ebuilds. > > IMO "modularized" in 2025 looks odd, it's obvious, but feel free to keep > it.
Agreed. Removed. > > +# @DESCRIPTION: > > +# This eclass makes trivial X ebuilds possible for apps, drivers, > > +# and more. Many things that would normally be done in various functions > > +# can be accessed by setting variables instead, such as patching, > > +# passing options to meson and installing docs. > > +# > > +# All you need to do in a basic ebuild is inherit this eclass and set > > +# DESCRIPTION, KEYWORDS and RDEPEND/DEPEND. If your package is hosted > > +# with the other X packages, you don't need to set SRC_URI. Pretty much > > +# everything else should be automatic. > > + > > +case ${EAPI} in > > + 8) ;; > > + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; > > +esac > > + > > +if [[ -z ${_XORG_MESON_ECLASS} ]]; then > > +_XORG_MESON_ECLASS=1 > > + > > +GIT_ECLASS="" > > +if [[ ${PV} == *9999* ]]; then > > + GIT_ECLASS="git-r3" > > +fi > > + > > +# @ECLASS_VARIABLE: XORG_MULTILIB > > +# @PRE_INHERIT > > +# @DESCRIPTION: > > +# If set to 'yes', the multilib support for package will be enabled. Set > > s/the// Thanks, fixed. > > +# before inheriting this eclass. > > +: "${XORG_MULTILIB:="no"}" > > + > > +inherit flag-o-matic ${GIT_ECLASS} > > +unset GIT_ECLASS > > Just call inherit twice (once earlier on), let's not bother with the variable > and then > having to unset it. Sounds good, fixed. > > + > > +[[ ${XORG_MULTILIB} == yes ]] && inherit meson-multilib || inherit meson > > + > > +# @ECLASS_VARIABLE: XORG_BASE_INDIVIDUAL_URI > > +# @PRE_INHERIT > > +# @DESCRIPTION: > > +# Set up SRC_URI for individual modular releases. If set to an empty > > +# string, no SRC_URI will be provided by the eclass. > > +: "${XORG_BASE_INDIVIDUAL_URI="https://www.x.org/releases/individual"}" > > + > > +# @ECLASS_VARIABLE: XORG_MODULE > > +# @PRE_INHERIT > > +# @DESCRIPTION: > > +# The subdirectory to download source from. Possible settings are app, > > +# doc, data, util, driver, font, lib, proto, xserver. Set above the > > +# inherit to override the default autoconfigured module. > > +: "${XORG_MODULE:="auto"}" > > +if [[ ${XORG_MODULE} == auto ]]; then > > + case "${CATEGORY}/${P}" in > > + app-doc/*) XORG_MODULE=doc/ ;; > > + media-fonts/*) XORG_MODULE=font/ ;; > > + x11-apps/*|x11-wm/*) XORG_MODULE=app/ ;; > > + x11-misc/*|x11-themes/*) XORG_MODULE=util/ ;; > > + x11-base/*) XORG_MODULE=xserver/ ;; > > + x11-drivers/*) XORG_MODULE=driver/ ;; > > + x11-libs/*) XORG_MODULE=lib/ ;; > > + *) XORG_MODULE= ;; > > + esac > > +fi > > + > > +# @ECLASS_VARIABLE: XORG_PACKAGE_NAME > > +# @PRE_INHERIT > > +# @DESCRIPTION: > > +# For git checkout the git repository might differ from package name. > > +# This variable can be used for proper directory specification > > +: "${XORG_PACKAGE_NAME:=${PN}}" > > + > > +HOMEPAGE="https://www.x.org/wiki/ > > https://gitlab.freedesktop.org/xorg/${XORG_MODULE}${XORG_PACKAGE_NAME}" > > + > > +# @ECLASS_VARIABLE: XORG_TARBALL_SUFFIX > > +# @PRE_INHERIT > > +# @DESCRIPTION: > > +# Most X11 projects provide tarballs as tar.xz. This eclass defaults to xz. > > +: "${XORG_TARBALL_SUFFIX:="xz"}" > > + > > +if [[ ${PV} == *9999* ]]; then > > + : > > "${EGIT_REPO_URI:="https://gitlab.freedesktop.org/xorg/${XORG_MODULE}${XORG_PACKAGE_NAME}.git"}" > > +elif [[ -n ${XORG_BASE_INDIVIDUAL_URI} ]]; then > > + > > SRC_URI="${XORG_BASE_INDIVIDUAL_URI}/${XORG_MODULE}${P}.tar.${XORG_TARBALL_SUFFIX}" > > +fi > > + > > +: "${SLOT:=0}" > > + > > +# Set the license for the package. This can be overridden by setting > > +# LICENSE after the inherit. Nearly all FreeDesktop-hosted X packages > > +# are under the MIT license. > > +: "${LICENSE:=MIT}" > > + > > +if [[ ${PN} == xf86-video-* || ${PN} == xf86-input-* ]]; then > > + DEPEND+=" x11-base/xorg-proto" > > + RDEPEND+=" x11-base/xorg-server:=" > > + COMMON_DEPEND+=" >=x11-base/xorg-server-1.20[xorg]" > > + [[ ${PN} == xf86-video-* ]] && COMMON_DEPEND+=" > > >=x11-libs/libpciaccess-0.14" > > +fi > > +BDEPEND+=" virtual/pkgconfig" > > + > > +# @ECLASS_VARIABLE: XORG_DOC > > +# @PRE_INHERIT > > +# @DESCRIPTION: > > +# Controls the installation of man3 developer documentation. Possible > > values > > +# are the name of the useflag or "no". Default value is "no". > > +: "${XORG_DOC:="no"}" > > + > > +case ${XORG_DOC} in > > + no) > > + ;; > > + *) > > + IUSE+=" ${XORG_DOC}" > > + ;; > > +esac > > + > > +DEPEND+=" ${COMMON_DEPEND}" > > +RDEPEND+=" ${COMMON_DEPEND}" > > +unset COMMON_DEPEND > > + > > +debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: DEPEND=${DEPEND}" > > +debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: RDEPEND=${RDEPEND}" > > +debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: PDEPEND=${PDEPEND}" > > +debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: BDEPEND=${BDEPEND}" > > + > > +# @FUNCTION: xorg-meson_src_unpack > > +# @DESCRIPTION: > > +# Simply unpack source code. > > +xorg-meson_src_unpack() { > > + debug-print-function ${FUNCNAME} "$@" > > + > > + if [[ ${PV} == *9999* ]]; then > > + git-r3_src_unpack > > + else > > + unpack ${A} > > + fi > > +} > > + > > +# @FUNCTION: xorg-meson_flags_setup > > +# @DESCRIPTION: > > +# Set up CFLAGS for a debug build > > Make this an internal function, maybe? Thanks, fixed. > > +xorg-meson_flags_setup() { > > + debug-print-function ${FUNCNAME} "$@" > > + > > + # Hardened flags break module autoloading et al (also fixes #778494) > > + if [[ ${PN} == xorg-server || ${PN} == xf86-video-* || ${PN} == > > xf86-input-* ]]; then > > + filter-flags -fno-plt > > + append-ldflags -Wl,-z,lazy > > + fi > > +} > > + > > +# @VARIABLE: XORG_CONFIGURE_OPTIONS > > +# @DESCRIPTION: > > +# Array of an additional options to pass to meson setup. > > +# @DEFAULT_UNSET > > + > > +# @FUNCTION: xorg-meson_src_configure > > +# @DESCRIPTION: > > +# Perform any necessary pre-configuration steps, then run configure > > +xorg-meson_src_configure() { > > + debug-print-function ${FUNCNAME} "$@" > > + > > + xorg-meson_flags_setup > > + > > + local emesonargs=( > > + -Ddefault_library=shared > > + "${XORG_CONFIGURE_OPTIONS[@]}" > > + ) > > + > > + if [[ ${XORG_MULTILIB} == yes ]]; then > > + meson-multilib_src_configure "$@" > > If you wanted, you could (earlier on) set ${_XORG_MESON} or something, > and then use that like: > ${_XORG_MESON}_src_configure > ... but who cares. After removing the src_compile implementation, there are only two instances so I'll just keep it as-is for now. > > + else > > + meson_src_configure "$@" > > + fi > > +} > > + > > +# @FUNCTION: xorg-meson_src_compile > > +# @DESCRIPTION: > > +# Compile a package, performing all X-related tasks. > > +xorg-meson_src_compile() { > > + debug-print-function ${FUNCNAME} "$@" > > + > > + if [[ ${XORG_MULTILIB} == yes ]]; then > > + meson-multilib_src_compile "$@" > > + else > > + meson_src_compile "$@" > > + fi > > +} > > + > > You're missing src_test? Does it Just Work? (If so, why do we need > xorg-meson_src_compile then?) Ah, good catch. Indeed, we don't need src_test nor src_compile. Removed src_compile. > > +# @FUNCTION: xorg-meson_src_install > > +# @DESCRIPTION: > > +# Install a built package to ${D}, performing any necessary steps. > > +xorg-meson_src_install() { > > + debug-print-function ${FUNCNAME} "$@" > > + > > + if [[ ${XORG_MULTILIB} == yes ]]; then > > + meson-multilib_src_install "$@" > > + else > > + meson_src_install "$@" > > + fi > > + > > + # Many X11 libraries unconditionally install developer documentation > > + if [[ -d "${D}"/usr/share/man/man3 ]]; then > > ${ED} and below Thanks, fixed. > > > + ! in_iuse doc && eqawarn "ebuild should set XORG_DOC=doc > > since package installs man3 documentation" > > + fi > > + > > + if in_iuse doc && ! use doc; then > > + rm -rf "${D}"/usr/share/man/man3 > > + rmdir "${D}"/usr{/share{/man,},} 2>/dev/null > > + fi > > +} > > + > > +fi > > + > > +EXPORT_FUNCTIONS src_configure src_unpack src_compile src_install