1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: xorg-meson.eclass
# @MAINTAINER:
# x11@gentoo.org
# @AUTHOR:
# Author: Matt Turner <mattst88@gentoo.org>
# @SUPPORTED_EAPIS: 8
# @PROVIDES: meson meson-multilib
# @BLURB: Reduces code duplication in the X11 ebuilds.
# @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
inherit flag-o-matic
if [[ ${PV} == *9999* ]]; then
inherit git-r3
fi
# @ECLASS_VARIABLE: XORG_MULTILIB
# @PRE_INHERIT
# @DESCRIPTION:
# If set to 'yes', multilib support for package will be enabled. Set
# before inheriting this eclass.
: "${XORG_MULTILIB:="no"}"
[[ ${XORG_MULTILIB} == yes ]] && inherit meson-multilib || inherit meson
# @ECLASS_VARIABLE: XORG_BASE_INDIVIDUAL_URI
# @PRE_INHERIT
# @DESCRIPTION:
# Set up SRC_URI for individual 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"
DEPEND+=" >=x11-base/xorg-server-1.20:=[xorg]"
RDEPEND+=" >=x11-base/xorg-server-1.20:=[xorg]"
if [[ ${PN} == xf86-video-* ]]; then
DEPEND+=" >=x11-libs/libpciaccess-0.14"
RDEPEND+=" >=x11-libs/libpciaccess-0.14"
fi
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
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
# @INTERNAL
# @DESCRIPTION:
# Set up CFLAGS for a debug build
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
# @DEFAULT_UNSET
# @DESCRIPTION:
# Array of an additional options to pass to meson setup.
# @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 "$@"
else
meson_src_configure "$@"
fi
}
# @FUNCTION: xorg-meson_src_install
# @DESCRIPTION:
# Install a built package to ${ED}, 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 ! in_iuse doc && [[ -d "${ED}"/usr/share/man/man3 ]]; then
eqawarn "ebuild should set XORG_DOC=doc since package installs man3 documentation"
fi
if in_iuse doc && ! use doc; then
rm -rf "${ED}"/usr/share/man/man3 || die
find "${ED}"/usr -type d -empty -delete || die
fi
}
fi
EXPORT_FUNCTIONS src_unpack src_configure src_install
|