mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-20 04:40:02 +01:00
For details on the protocol itself see the Wayland merge request: https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/72 The v120 event has a value base of 120, so one wheel detent is 120, half a wheel is 60, etc. This is the API Windows has been using since Vista but it requires HW support from the device. Logitech mice and many Microsoft mice of the last decade or so have support and it's enabled in the kernel since v5.0. The new events replace wl_pointer.axis_discrete events, once you bind to wl_pointer >= 8 you only get the v120 events. So backwards compatibility is simple, we just multiply the discrete events if we get them and treat everything as 120 event internally. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
916 lines
28 KiB
Meson
916 lines
28 KiB
Meson
project('xserver', 'c',
|
|
default_options: [
|
|
'buildtype=debugoptimized',
|
|
'c_std=gnu99',
|
|
],
|
|
version: '21.1.99.1',
|
|
meson_version: '>= 0.52.0',
|
|
)
|
|
release_date = '2021-07-05'
|
|
|
|
add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc'])
|
|
cc = meson.get_compiler('c')
|
|
|
|
add_project_arguments('-fno-strict-aliasing', language : 'c')
|
|
add_project_arguments('-fvisibility=hidden', language : 'c')
|
|
|
|
add_project_link_arguments('-fvisibility=hidden', language : 'c')
|
|
|
|
if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
|
|
test_wflags = [
|
|
'-Wall',
|
|
'-Wpointer-arith',
|
|
'-Wmissing-declarations',
|
|
'-Wformat=2',
|
|
'-Wstrict-prototypes',
|
|
'-Wmissing-prototypes',
|
|
'-Wnested-externs',
|
|
'-Wbad-function-cast',
|
|
'-Wold-style-definition',
|
|
'-Wunused',
|
|
'-Wuninitialized',
|
|
'-Wshadow',
|
|
'-Wmissing-noreturn',
|
|
'-Wmissing-format-attribute',
|
|
'-Wredundant-decls',
|
|
'-Werror=implicit',
|
|
'-Werror=nonnull',
|
|
'-Werror=init-self',
|
|
'-Werror=main',
|
|
'-Werror=missing-braces',
|
|
'-Werror=sequence-point',
|
|
'-Werror=return-type',
|
|
'-Werror=trigraphs',
|
|
'-Werror=array-bounds',
|
|
'-Werror=write-strings',
|
|
'-Werror=address',
|
|
'-Werror=int-to-pointer-cast',
|
|
'-Werror=pointer-to-int-cast',
|
|
]
|
|
else
|
|
test_wflags = []
|
|
endif
|
|
|
|
common_wflags = []
|
|
foreach wflag: test_wflags
|
|
if cc.has_argument(wflag)
|
|
common_wflags += [ wflag ]
|
|
endif
|
|
endforeach
|
|
|
|
add_project_arguments(common_wflags, language : ['c', 'objc'])
|
|
|
|
libdrm_req = '>= 2.4.89'
|
|
libselinux_req = '>= 2.0.86'
|
|
xext_req = '>= 1.0.99.4'
|
|
wayland_req = '>= 1.18.0'
|
|
wayland_protocols_req = '>= 1.28'
|
|
gbm_req = '>= 10.2'
|
|
xf86dgaproto_req = '>= 2.0.99.1'
|
|
|
|
xproto_dep = dependency('xproto', version: '>= 7.0.31', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
randrproto_dep = dependency('randrproto', version: '>= 1.6.0', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
renderproto_dep = dependency('renderproto', version: '>= 0.11', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
xextproto_dep = dependency('xextproto', version: '>= 7.2.99.901', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
inputproto_dep = dependency('inputproto', version: '>= 2.3.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
kbproto_dep = dependency('kbproto', version: '>= 1.0.3', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
fontsproto_dep = dependency('fontsproto', version: '>= 2.1.3', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
fixesproto_dep = dependency('fixesproto', version: '>= 6.0', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
damageproto_dep = dependency('damageproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
xcmiscproto_dep = dependency('xcmiscproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
bigreqsproto_dep = dependency('bigreqsproto', version: '>= 1.1.0', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
xtrans_dep = dependency('xtrans', version: '>= 1.3.5')
|
|
|
|
videoproto_dep = dependency('videoproto', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
compositeproto_dep = dependency('compositeproto', version: '>= 0.4', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
recordproto_dep = dependency('recordproto', version: '>= 1.13.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
scrnsaverproto_dep = dependency('scrnsaverproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
resourceproto_dep = dependency('resourceproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
xf86driproto_dep = dependency('xf86driproto', version: '>= 2.1.0', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri1') == 'true')
|
|
dri2proto_dep = dependency('dri2proto', version: '>= 2.8', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri2') == 'true')
|
|
dri3proto_dep = dependency('dri3proto', version: '>= 1.2', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri3') == 'true')
|
|
xineramaproto_dep = dependency('xineramaproto', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
xf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('xf86bigfont'))
|
|
xf86vidmodeproto_dep = dependency('xf86vidmodeproto', version: '>= 2.2.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
|
|
applewmproto_dep = dependency('applewmproto', version: '>= 1.4', fallback: ['xorgproto', 'ext_xorgproto'], required: false)
|
|
xshmfence_dep = dependency('xshmfence', version: '>= 1.1', required: false)
|
|
xwaylandproto_dep = dependency('xwaylandproto', version: '>= 1.0', fallback: ['xorgproto', 'ext_xorgproto'], required: false)
|
|
|
|
pixman_dep = dependency('pixman-1')
|
|
libbsd_dep = dependency('libbsd', required: false)
|
|
xkbcomp_dep = dependency('xkbcomp', required: false)
|
|
xkbfile_dep = dependency('xkbfile')
|
|
xfont2_dep = dependency('xfont2', version: '>= 2.0')
|
|
|
|
dbus_required = get_option('systemd_logind') == 'true'
|
|
dbus_dep = dependency('dbus-1', version: '>= 1.0', required: dbus_required)
|
|
|
|
# libsystemd-daemon was moved into libsystemd in version 209
|
|
libsystemd_daemon_dep = dependency('libsystemd', version: '>= 209', required: false)
|
|
if not libsystemd_daemon_dep.found()
|
|
libsystemd_daemon_dep = dependency('libsystemd-daemon', required: false)
|
|
endif
|
|
|
|
build_hashtable = false
|
|
|
|
# Resolve default values of some options
|
|
xkb_dir = get_option('xkb_dir')
|
|
if xkb_dir == ''
|
|
if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig'
|
|
xkb_dir = xkbcomp_dep.get_pkgconfig_variable('xkbconfigdir')
|
|
endif
|
|
if xkb_dir == ''
|
|
xkb_dir = join_paths(get_option('prefix'), 'share/X11/xkb')
|
|
endif
|
|
endif
|
|
|
|
xkb_output_dir = get_option('xkb_output_dir')
|
|
if xkb_output_dir == ''
|
|
xkb_output_dir = join_paths(xkb_dir, 'compiled')
|
|
endif
|
|
|
|
xkb_bin_dir = get_option('xkb_bin_dir')
|
|
if xkb_bin_dir == ''
|
|
if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig'
|
|
xkb_bin_dir = xkbcomp_dep.get_pkgconfig_variable('bindir')
|
|
endif
|
|
if xkb_bin_dir == ''
|
|
xkb_bin_dir = join_paths(get_option('prefix'), get_option('bindir'))
|
|
endif
|
|
endif
|
|
|
|
dfp = get_option('default_font_path')
|
|
if dfp == ''
|
|
fontrootdir = get_option('fontrootdir')
|
|
if fontrootdir == ''
|
|
fontutil_dep = dependency('fontutil', required: false)
|
|
if fontutil_dep.found()
|
|
fontrootdir = fontutil_dep.get_pkgconfig_variable('fontrootdir')
|
|
else
|
|
fontrootdir = join_paths(get_option('prefix'), get_option('datadir'), 'fonts', 'X11')
|
|
endif
|
|
endif
|
|
dfp_elements = [
|
|
join_paths(fontrootdir, 'misc'),
|
|
join_paths(fontrootdir, 'TTF'),
|
|
join_paths(fontrootdir, 'OTF'),
|
|
join_paths(fontrootdir, 'Type1'),
|
|
join_paths(fontrootdir, '100dpi'),
|
|
join_paths(fontrootdir, '75dpi'),
|
|
]
|
|
if host_machine.system() == 'darwin'
|
|
dfp_elements += [
|
|
'/Library/Fonts',
|
|
'/System/Library/Fonts',
|
|
]
|
|
endif
|
|
default_font_path = ','.join(dfp_elements)
|
|
else
|
|
default_font_path = dfp
|
|
endif
|
|
|
|
hal_option = get_option('hal')
|
|
glamor_option = get_option('glamor')
|
|
|
|
build_udev = get_option('udev')
|
|
build_udev_kms = get_option('udev_kms')
|
|
if ['windows', 'darwin', 'cygwin'].contains(host_machine.system())
|
|
build_udev = false
|
|
build_udev_kms = false
|
|
hal_option = 'false'
|
|
endif
|
|
|
|
if get_option('systemd_logind') == 'auto'
|
|
build_systemd_logind = build_udev_kms and dbus_dep.found()
|
|
else
|
|
build_systemd_logind = get_option('systemd_logind') == 'true'
|
|
endif
|
|
|
|
with_dtrace = get_option('dtrace')
|
|
if with_dtrace
|
|
dtrace = find_program('dtrace', required: true)
|
|
endif
|
|
|
|
build_xorg = false
|
|
if (host_machine.system() != 'windows')
|
|
if get_option('xorg') == 'auto'
|
|
build_xorg = (host_machine.system() != 'darwin' and
|
|
host_machine.system() != 'windows')
|
|
else
|
|
build_xorg = get_option('xorg') == 'true'
|
|
endif
|
|
endif
|
|
xorgsdkdir = join_paths(get_option('prefix'), get_option('includedir'), 'xorg')
|
|
libxcvt_dep = dependency('libxcvt', fallback: ['libxcvt', 'libxcvt_dep'], required: build_xorg)
|
|
|
|
build_xwayland = false
|
|
if (host_machine.system() != 'darwin' and
|
|
host_machine.system() != 'windows')
|
|
if get_option('xwayland') != 'false'
|
|
xwayland_required = get_option('xwayland') == 'true'
|
|
build_glamor = glamor_option == 'true' or glamor_option == 'auto'
|
|
|
|
xwayland_path = get_option('xwayland-path')
|
|
if (xwayland_path == '')
|
|
xwayland_path = join_paths(get_option('prefix'), get_option('bindir'))
|
|
endif
|
|
|
|
wayland_client_dep = dependency('wayland-client', version: wayland_req, required: xwayland_required)
|
|
xwayland_dep = [
|
|
wayland_client_dep,
|
|
dependency('wayland-protocols', version: wayland_protocols_req, required: xwayland_required),
|
|
dependency('libxcvt', fallback: ['libxcvt', 'libxcvt_dep'], required: xwayland_required),
|
|
]
|
|
|
|
if build_glamor
|
|
xwayland_dep += dependency('libdrm', version: libdrm_req, required: xwayland_required)
|
|
xwayland_dep += dependency('epoxy', required: xwayland_required)
|
|
endif
|
|
|
|
build_xwayland = true
|
|
# check for all the deps being found, to handle 'auto' mode.
|
|
foreach d: xwayland_dep
|
|
if not d.found()
|
|
build_xwayland = false
|
|
endif
|
|
endforeach
|
|
endif
|
|
else
|
|
wayland_client_dep = dependency('', required: false)
|
|
endif
|
|
|
|
build_xnest = false
|
|
if (host_machine.system() != 'windows')
|
|
if get_option('xnest') != 'false'
|
|
xnest_required = get_option('xnest') == 'true'
|
|
|
|
xnest_dep = [
|
|
dependency('xext', version: xext_req, required: xnest_required),
|
|
dependency('x11', required: xnest_required),
|
|
dependency('xau', required: xnest_required),
|
|
]
|
|
|
|
build_xnest = true
|
|
# check for all the deps being found, to handle 'auto' mode.
|
|
foreach d: xnest_dep
|
|
if not d.found()
|
|
build_xnest = false
|
|
endif
|
|
endforeach
|
|
endif
|
|
endif
|
|
|
|
build_xwin = false
|
|
if get_option('xwin') == 'auto'
|
|
if (host_machine.system() == 'cygwin' or
|
|
host_machine.system() == 'windows')
|
|
build_xwin = true
|
|
endif
|
|
else
|
|
build_xwin = get_option('xwin') == 'true'
|
|
endif
|
|
|
|
build_xquartz = false
|
|
if get_option('xquartz') == 'auto'
|
|
if host_machine.system() == 'darwin'
|
|
build_xquartz = true
|
|
endif
|
|
else
|
|
build_xquartz = get_option('xquartz') == 'true'
|
|
endif
|
|
|
|
build_rootless = false
|
|
if build_xquartz
|
|
build_rootless = true
|
|
endif
|
|
|
|
if get_option('ipv6') == 'auto'
|
|
build_ipv6 = cc.has_function('getaddrinfo')
|
|
else
|
|
build_ipv6 = get_option('ipv6') == 'true'
|
|
endif
|
|
|
|
int10 = get_option('int10')
|
|
if int10 == 'auto'
|
|
int10 = 'x86emu'
|
|
if host_machine.cpu() == 'ppc' and host_machine.system() == 'freebsd'
|
|
int10 = 'stub'
|
|
endif
|
|
if host_machine.cpu() == 'arm'
|
|
int10 = 'stub'
|
|
endif
|
|
endif
|
|
|
|
hal_dep = []
|
|
if hal_option == 'auto'
|
|
if not build_udev
|
|
hal_dep = dependency('hal', required: false)
|
|
build_hal = hal_dep.found()
|
|
else
|
|
build_hal = false
|
|
endif
|
|
else
|
|
build_hal = hal_option == 'true'
|
|
if build_hal
|
|
hal_dep = dependency('hal')
|
|
endif
|
|
endif
|
|
|
|
if build_udev and build_hal
|
|
error('Hotplugging through both libudev and hal not allowed')
|
|
endif
|
|
|
|
build_dbus = build_hal or build_systemd_logind
|
|
|
|
udev_dep = dependency('', required:false)
|
|
if build_udev or build_udev_kms
|
|
udev_dep = dependency('libudev', version: '>= 143')
|
|
endif
|
|
|
|
log_dir = get_option('log_dir')
|
|
if log_dir == ''
|
|
log_dir = join_paths(get_option('prefix'), get_option('localstatedir'), 'log')
|
|
endif
|
|
|
|
module_dir = join_paths(get_option('libdir'), get_option('module_dir'))
|
|
|
|
if glamor_option == 'auto'
|
|
build_glamor = build_xorg or build_xwayland
|
|
else
|
|
build_glamor = glamor_option == 'true'
|
|
endif
|
|
|
|
gbm_dep = dependency('', required: false)
|
|
epoxy_dep = dependency('', required: false)
|
|
if build_glamor
|
|
gbm_dep = dependency('gbm', version: gbm_req, required: false)
|
|
epoxy_dep = dependency('epoxy', required: false)
|
|
endif
|
|
|
|
if build_xwayland
|
|
libdecor_dep = dependency('libdecor-0', required: false)
|
|
libdecor_option = get_option('libdecor')
|
|
if libdecor_option == 'auto'
|
|
have_libdecor = libdecor_dep.found()
|
|
else
|
|
have_libdecor = libdecor_option == 'true'
|
|
if have_libdecor and not libdecor_dep.found()
|
|
error('libdecor support requested but not found')
|
|
endif
|
|
endif
|
|
else
|
|
have_libdecor = false
|
|
endif
|
|
|
|
eglstream_option = get_option('xwayland_eglstream')
|
|
if build_xwayland and build_glamor
|
|
eglstream_dep = dependency('wayland-eglstream-protocols', required:false)
|
|
if eglstream_option == 'auto'
|
|
build_eglstream = eglstream_dep.found()
|
|
else
|
|
build_eglstream = eglstream_option == 'true'
|
|
if build_eglstream and not eglstream_dep.found()
|
|
error('glamor EGLStream support requested, but wayland-eglstream-protocols not found')
|
|
endif
|
|
endif
|
|
else
|
|
build_eglstream = false
|
|
endif
|
|
|
|
# Lots of sha1 options, because Linux is about choice :)
|
|
|
|
# The idea behind the ordering here is that we should first prefer system
|
|
# builtin providers, and then smaller implementations of over larger ones.
|
|
test_sha1 = [
|
|
'libc', # libmd API is in libc on some BSDs
|
|
'CommonCrypto', # darwin API
|
|
'CryptoAPI', # windows API
|
|
'libmd', # other BSDs & Solaris
|
|
'libsha1', # "a tiny library providing a SHA1 implementation, created for facilitating X server compilation on embedded devices where larger libraries containing SHA1 implementations are not needed"
|
|
'libnettle',
|
|
'libgcrypt', # in debian base system
|
|
'libcrypto',
|
|
]
|
|
|
|
if get_option('sha1') != 'auto'
|
|
test_sha1 = [get_option('sha1')]
|
|
endif
|
|
|
|
sha1_found = false
|
|
foreach t : test_sha1
|
|
if t == 'libc'
|
|
if cc.has_function('SHA1Init')
|
|
sha1_found = true
|
|
sha1_dep = dependency('', required: false)
|
|
endif
|
|
elif t == 'CommonCrypto'
|
|
if cc.has_function('CC_SHA1_Init')
|
|
sha1_found = true
|
|
sha1_dep = dependency('', required: false)
|
|
endif
|
|
elif t == 'CryptoAPI'
|
|
if cc.has_header('wincrypt.h')
|
|
sha1_found = true
|
|
sha1_dep = dependency('', required: false)
|
|
endif
|
|
elif t == 'libmd'
|
|
md_dep = cc.find_library('md', required: false)
|
|
if md_dep.found()
|
|
sha1_found = true
|
|
sha1_dep = md_dep
|
|
endif
|
|
elif t == 'libsha1'
|
|
libsha1_dep = dependency('libsha1', required: false)
|
|
if libsha1_dep.found()
|
|
sha1_found = true
|
|
sha1_dep = libsha1_dep
|
|
endif
|
|
elif t == 'libnettle'
|
|
nettle_dep = dependency('nettle', required: false)
|
|
if nettle_dep.found()
|
|
sha1_found = true
|
|
sha1_dep = nettle_dep
|
|
endif
|
|
elif t == 'libgcrypt'
|
|
gcrypt_dep = dependency('libgcrypt', required: false)
|
|
if gcrypt_dep.found()
|
|
sha1_found = true
|
|
sha1_dep = gcrypt_dep
|
|
endif
|
|
elif t == 'libcrypto'
|
|
# we don't need all of OpenSSL, just libcrypto
|
|
libcrypto_dep = cc.find_library('crypto', required: false)
|
|
openssl_dep = dependency('openssl', required: false)
|
|
if libcrypto_dep.found() or openssl_dep.found()
|
|
sha1_found = true
|
|
if libcrypto_dep.found()
|
|
sha1_dep = libcrypto_dep
|
|
else
|
|
sha1_dep = openssl_dep
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
if sha1_found
|
|
sha1 = t
|
|
break
|
|
endif
|
|
endforeach
|
|
|
|
if sha1_found
|
|
message('Using @0@ SHA1 functions'.format(sha1))
|
|
else
|
|
if get_option('sha1') != 'auto'
|
|
error('@0@ SHA1 requested, but not found'.format(get_option('sha1')))
|
|
else
|
|
error('No suitable SHA1 implementation found')
|
|
endif
|
|
endif
|
|
|
|
xdmcp_dep = dependency('', required : false)
|
|
if get_option('xdmcp')
|
|
xdmcp_dep = dependency('xdmcp')
|
|
endif
|
|
|
|
has_xdm_auth = get_option('xdm-auth-1')
|
|
|
|
if not xdmcp_dep.found()
|
|
has_xdm_auth = false
|
|
endif
|
|
|
|
build_glx = get_option('glx')
|
|
if build_glx
|
|
build_hashtable = true
|
|
endif
|
|
|
|
libdrm_dep = dependency('libdrm', version: libdrm_req, required: false)
|
|
|
|
if get_option('dri1') == 'auto'
|
|
build_dri1 = xf86driproto_dep.found() and libdrm_dep.found()
|
|
else
|
|
build_dri1 = get_option('dri1') == 'true'
|
|
endif
|
|
|
|
if get_option('dri2') == 'auto'
|
|
build_dri2 = dri2proto_dep.found() and libdrm_dep.found()
|
|
else
|
|
build_dri2 = get_option('dri2') == 'true'
|
|
endif
|
|
|
|
if get_option('dri3') == 'auto'
|
|
build_dri3 = dri3proto_dep.found() and xshmfence_dep.found() and libdrm_dep.found()
|
|
else
|
|
build_dri3 = get_option('dri3') == 'true'
|
|
if build_dri3
|
|
if not xshmfence_dep.found()
|
|
error('DRI3 requested, but xshmfence not found')
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
libdrm_required = (build_dri1 or build_dri2 or build_dri3) and get_option('drm') == true
|
|
if not libdrm_dep.found() and libdrm_required
|
|
error('DRI requested, but LIBDRM not found')
|
|
endif
|
|
|
|
build_modesetting = libdrm_dep.found() and dri2proto_dep.found()
|
|
|
|
build_vgahw = false
|
|
if get_option('vgahw') == 'auto'
|
|
if (host_machine.system() != 'darwin' and
|
|
host_machine.system() != 'windows' and
|
|
host_machine.system() != 'cygwin')
|
|
build_vgahw = true
|
|
endif
|
|
else
|
|
build_vgahw = get_option('vgahw') == 'true'
|
|
endif
|
|
|
|
build_dpms = get_option('dpms')
|
|
if build_xquartz
|
|
build_dpms = false
|
|
endif
|
|
|
|
build_xf86bigfont = get_option('xf86bigfont')
|
|
build_screensaver = get_option('screensaver')
|
|
build_res = get_option('xres')
|
|
if build_res
|
|
build_hashtable = true
|
|
endif
|
|
|
|
build_xace = get_option('xace')
|
|
build_xinerama = get_option('xinerama')
|
|
|
|
build_xsecurity = get_option('xcsecurity')
|
|
if build_xsecurity
|
|
if not build_xace
|
|
error('cannot build Security extension without X-ACE')
|
|
endif
|
|
endif
|
|
|
|
build_xv = get_option('xv')
|
|
build_xvmc = get_option('xvmc')
|
|
if not build_xv
|
|
build_xvmc = false
|
|
endif
|
|
|
|
build_dga = false
|
|
xf86dgaproto_dep = dependency('', required: false)
|
|
if get_option('dga') == 'auto'
|
|
xf86dgaproto_dep = dependency('xf86dgaproto', version: xf86dgaproto_req, required: false)
|
|
if xf86dgaproto_dep.found()
|
|
build_dga = true
|
|
endif
|
|
elif get_option('dga') == 'true'
|
|
xf86dgaproto_dep = dependency('xf86dgaproto', version: xf86dgaproto_req, required: true)
|
|
build_dga = true
|
|
endif
|
|
|
|
build_apm = false
|
|
if (get_option('linux_apm') == true and
|
|
host_machine.system() == 'linux')
|
|
if cc.has_header('linux/apm_bios.h')
|
|
build_apm = true
|
|
endif
|
|
endif
|
|
|
|
build_acpi = false
|
|
if (get_option('linux_acpi') == true and
|
|
host_machine.system() == 'linux')
|
|
if (host_machine.cpu() == 'x86' or
|
|
host_machine.cpu() == 'x86_64' or
|
|
host_machine.cpu() == 'ia64')
|
|
build_acpi = true
|
|
endif
|
|
endif
|
|
|
|
build_mitshm = false
|
|
if get_option('mitshm') == 'auto'
|
|
build_mitshm = cc.has_header('sys/shm.h')
|
|
elif get_option('mitshm') == 'true'
|
|
build_mitshm = true
|
|
endif
|
|
|
|
m_dep = cc.find_library('m', required : false)
|
|
dl_dep = cc.find_library('dl', required : false)
|
|
|
|
common_dep = [
|
|
xproto_dep,
|
|
randrproto_dep,
|
|
renderproto_dep,
|
|
xextproto_dep,
|
|
inputproto_dep,
|
|
kbproto_dep,
|
|
fontsproto_dep,
|
|
fixesproto_dep,
|
|
damageproto_dep,
|
|
xcmiscproto_dep,
|
|
bigreqsproto_dep,
|
|
xtrans_dep,
|
|
libsystemd_daemon_dep,
|
|
|
|
videoproto_dep,
|
|
compositeproto_dep,
|
|
recordproto_dep,
|
|
scrnsaverproto_dep,
|
|
resourceproto_dep,
|
|
xf86driproto_dep,
|
|
dri2proto_dep,
|
|
dri3proto_dep,
|
|
xineramaproto_dep,
|
|
xf86bigfontproto_dep,
|
|
xf86dgaproto_dep,
|
|
xf86vidmodeproto_dep,
|
|
applewmproto_dep,
|
|
|
|
pixman_dep,
|
|
libbsd_dep,
|
|
xkbfile_dep,
|
|
xfont2_dep,
|
|
xdmcp_dep,
|
|
]
|
|
|
|
inc = include_directories(
|
|
'Xext',
|
|
'Xi',
|
|
'composite',
|
|
'damageext',
|
|
'exa',
|
|
'fb',
|
|
'glamor',
|
|
'mi',
|
|
'miext/damage',
|
|
'miext/shadow',
|
|
'miext/sync',
|
|
'dbe',
|
|
'dri3',
|
|
'include',
|
|
'present',
|
|
'randr',
|
|
'render',
|
|
'xfixes',
|
|
)
|
|
|
|
build_xselinux = false
|
|
if get_option('xselinux') != 'false'
|
|
dep_selinux = dependency('libselinux', version: libselinux_req,
|
|
required: get_option('xselinux') == 'true')
|
|
dep_audit = dependency('audit', required: get_option('xselinux') == 'true')
|
|
if get_option('xselinux') == 'true'
|
|
build_xselinux = true
|
|
else
|
|
build_xselinux = dep_selinux.found() and dep_audit.found()
|
|
endif
|
|
|
|
if build_xselinux
|
|
common_dep += dep_selinux
|
|
common_dep += dep_audit
|
|
endif
|
|
endif
|
|
|
|
socket_dep = []
|
|
if host_machine.system() == 'windows'
|
|
socket_dep = meson.get_compiler('c').find_library('ws2_32')
|
|
common_dep += socket_dep
|
|
endif
|
|
|
|
if get_option('libunwind')
|
|
common_dep += dependency('libunwind', required: true)
|
|
endif
|
|
|
|
glx_inc = include_directories('glx')
|
|
|
|
top_dir_inc = include_directories('.')
|
|
|
|
serverconfigdir = join_paths(get_option('prefix'), get_option('libdir'), 'xorg')
|
|
|
|
manpage_config = configuration_data()
|
|
manpage_config.set('vendorversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
|
|
manpage_config.set('xorgversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
|
|
manpage_config.set('xservername', 'Xorg')
|
|
manpage_config.set('xconfigfile', 'xorg.conf')
|
|
manpage_config.set('projectroot', get_option('prefix'))
|
|
manpage_config.set('apploaddir', '$(appdefaultdir)')
|
|
manpage_config.set('appmansuffix', '1')
|
|
manpage_config.set('drivermansuffix', '4')
|
|
manpage_config.set('adminmansuffix', '8')
|
|
manpage_config.set('libmansuffix', '3')
|
|
manpage_config.set('miscmansuffix', '7')
|
|
manpage_config.set('filemansuffix', '5')
|
|
manpage_config.set('logdir', log_dir)
|
|
manpage_config.set('datadir', join_paths(get_option('prefix'), get_option('datadir')))
|
|
manpage_config.set('mandir', join_paths(get_option('prefix'), get_option('mandir')))
|
|
manpage_config.set('sysconfdir', join_paths(get_option('prefix'), get_option('sysconfdir')))
|
|
manpage_config.set('xconfigdir', 'xorg.conf.d')
|
|
manpage_config.set('xkbdir', xkb_dir)
|
|
manpage_config.set('XKB_DFLT_RULES', get_option('xkb_default_rules'))
|
|
manpage_config.set('XKB_DFLT_MODEL', get_option('xkb_default_model'))
|
|
manpage_config.set('XKB_DFLT_LAYOUT', get_option('xkb_default_layout'))
|
|
manpage_config.set('XKB_DFLT_VARIANT', get_option('xkb_default_variant'))
|
|
manpage_config.set('XKB_DFLT_OPTIONS', get_option('xkb_default_options'))
|
|
manpage_config.set('bundle_id_prefix', '...')
|
|
manpage_config.set('modulepath', module_dir)
|
|
# wtf doesn't this work
|
|
# manpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), libexecdir))
|
|
manpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), 'libexec'))
|
|
manpage_config.set('default_font_path', default_font_path)
|
|
|
|
require_docs = get_option('docs') == 'true'
|
|
require_devel_docs = get_option('devel-docs') == 'true'
|
|
require_docs_pdf = (require_docs or require_devel_docs) and get_option('docs-pdf') == 'true'
|
|
|
|
sgml_doctools_dep = dependency('xorg-sgml-doctools',
|
|
required: require_docs or require_devel_docs)
|
|
xmlto = find_program('xmlto', required: require_docs or require_devel_docs)
|
|
xsltproc = find_program('xsltproc', required: require_docs or require_devel_docs)
|
|
fop = find_program('fop', required: require_docs_pdf)
|
|
|
|
build_docs = (get_option('docs') != 'false' and
|
|
sgml_doctools_dep.found() and
|
|
xmlto.found())
|
|
|
|
build_docs_devel = (get_option('devel-docs') != 'false' and
|
|
sgml_doctools_dep.found() and
|
|
xmlto.found())
|
|
|
|
build_docs_pdf = (get_option('docs-pdf') != 'false' and
|
|
(build_docs or build_docs_devel) and
|
|
fop.found())
|
|
|
|
if build_docs or build_docs_devel
|
|
doc_sgml_path = sgml_doctools_dep.get_pkgconfig_variable('sgmlrootdir')
|
|
doc_stylesheet_srcdir = join_paths(doc_sgml_path, 'X11')
|
|
|
|
# once we bump meson dependency to 0.56.0 we can use
|
|
# meson.project_build_root() instead of meson.build_root()
|
|
|
|
# Meson does not and will not support functions so we are copy-pasting
|
|
# documentation build code around which is unfortunate
|
|
# See https://mesonbuild.com/FAQ.html#why-doesnt-meson-have-user-defined-functionsmacros
|
|
|
|
docs_xmlto_search_flags = [
|
|
'--searchpath', doc_stylesheet_srcdir,
|
|
'--searchpath', meson.build_root(),
|
|
]
|
|
|
|
docs_xslt_search_flags = [
|
|
'--path', doc_stylesheet_srcdir,
|
|
'--path', meson.build_root(),
|
|
]
|
|
endif
|
|
|
|
# Include must come first, as it sets up dix-config.h
|
|
subdir('include')
|
|
|
|
# X server core
|
|
subdir('config')
|
|
subdir('dix')
|
|
subdir('dri3')
|
|
subdir('glx')
|
|
subdir('fb')
|
|
subdir('mi')
|
|
subdir('os')
|
|
# X extensions
|
|
subdir('composite')
|
|
subdir('damageext')
|
|
subdir('dbe')
|
|
subdir('miext/damage')
|
|
subdir('miext/shadow')
|
|
subdir('miext/sync')
|
|
if build_rootless
|
|
subdir('miext/rootless')
|
|
endif
|
|
subdir('present')
|
|
if build_xwin or build_xquartz
|
|
subdir('pseudoramiX')
|
|
endif
|
|
subdir('randr')
|
|
subdir('record')
|
|
subdir('render')
|
|
subdir('xfixes')
|
|
subdir('xkb')
|
|
subdir('Xext')
|
|
subdir('Xi')
|
|
# other
|
|
if build_glamor
|
|
subdir('glamor')
|
|
endif
|
|
if build_xorg or get_option('xephyr')
|
|
subdir('exa')
|
|
endif
|
|
subdir('doc')
|
|
|
|
# Common static libraries of all X servers
|
|
libxserver = [
|
|
libxserver_mi,
|
|
libxserver_dix,
|
|
|
|
libxserver_composite,
|
|
libxserver_damageext,
|
|
libxserver_dbe,
|
|
libxserver_randr,
|
|
libxserver_miext_damage,
|
|
libxserver_render,
|
|
libxserver_present,
|
|
libxserver_xext,
|
|
libxserver_miext_sync,
|
|
libxserver_xfixes,
|
|
libxserver_xi,
|
|
libxserver_xkb,
|
|
libxserver_record,
|
|
|
|
libxserver_os,
|
|
]
|
|
|
|
libxserver += libxserver_dri3
|
|
|
|
subdir('hw')
|
|
|
|
if host_machine.system() != 'windows'
|
|
subdir('test')
|
|
endif
|
|
|
|
install_man(configure_file(
|
|
input: 'man/Xserver.man',
|
|
output: 'Xserver.1',
|
|
configuration: manpage_config,
|
|
))
|
|
|
|
if build_xorg
|
|
sdkconfig = configuration_data()
|
|
awk = find_program('awk')
|
|
|
|
sdkconfig.set('prefix', get_option('prefix'))
|
|
sdkconfig.set('exec_prefix', '${prefix}')
|
|
sdkconfig.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
|
|
sdkconfig.set('includedir', join_paths('${prefix}', get_option('includedir')))
|
|
sdkconfig.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
|
|
sdkconfig.set('moduledir', join_paths('${exec_prefix}', module_dir))
|
|
sdkconfig.set('sdkdir', join_paths('${prefix}', get_option('includedir'), 'xorg'))
|
|
sdkconfig.set('sysconfigdir', join_paths('${datarootdir}', 'X11/xorg.conf.d'))
|
|
|
|
sdkconfig.set('abi_ansic',
|
|
run_command(awk, '-F', '[(,)]',
|
|
'/^#define ABI_ANSIC.*SET/ { printf "%d.%d", $2, $3 }',
|
|
files('hw/xfree86/common/xf86Module.h')
|
|
).stdout()
|
|
)
|
|
sdkconfig.set('abi_videodrv',
|
|
run_command(awk, '-F', '[(,)]',
|
|
'/^#define ABI_VIDEODRV.*SET/ { printf "%d.%d", $2, $3 }',
|
|
files('hw/xfree86/common/xf86Module.h')
|
|
).stdout()
|
|
)
|
|
sdkconfig.set('abi_xinput',
|
|
run_command(awk, '-F', '[(,)]',
|
|
'/^#define ABI_XINPUT.*SET/ { printf "%d.%d", $2, $3 }',
|
|
files('hw/xfree86/common/xf86Module.h')
|
|
).stdout()
|
|
)
|
|
sdkconfig.set('abi_extension',
|
|
run_command(awk, '-F', '[(,)]',
|
|
'/^#define ABI_EXTENSION.*SET/ { printf "%d.%d", $2, $3 }',
|
|
files('hw/xfree86/common/xf86Module.h')
|
|
).stdout()
|
|
)
|
|
|
|
sdk_required_modules = [
|
|
'pixman-1 >= 0.27.2',
|
|
]
|
|
|
|
# XXX this isn't trying very hard, but hard enough.
|
|
sdkconfig.set('PACKAGE_VERSION', meson.project_version())
|
|
sdkconfig.set('SDK_REQUIRED_MODULES', ' '.join(sdk_required_modules))
|
|
sdkconfig.set('symbol_visibility', '-fvisibility=hidden')
|
|
sdkconfig.set('XORG_DRIVER_LIBS', '')
|
|
|
|
# On Windows, modules built with the SDK will need to link with server and
|
|
# module implibs to resolve symbols
|
|
if (host_machine.system() == 'cygwin' or
|
|
host_machine.system() == 'windows')
|
|
sdkconfig.set('XORG_DRIVER_LIBS', '-lXorg.exe -L\${moduledir} -lshadow -no-undefined')
|
|
endif
|
|
|
|
configure_file(
|
|
input: 'xorg-server.pc.in',
|
|
output: 'xorg-server.pc',
|
|
configuration: sdkconfig,
|
|
install_dir: join_paths(get_option('prefix'),
|
|
get_option('libdir'),
|
|
'pkgconfig'),
|
|
)
|
|
|
|
install_data('xorg-server.m4',
|
|
install_dir: join_paths(get_option('datadir'), 'aclocal'))
|
|
endif
|
|
|
|
if build_docs or build_docs_devel
|
|
docxmlconfig = configuration_data()
|
|
docxmlconfig.set('PACKAGE_VERSION', meson.project_version())
|
|
docxmlconfig.set('RELEASE_DATE', release_date)
|
|
configure_file(
|
|
input: 'xserver.ent.in',
|
|
output: 'xserver.ent',
|
|
configuration: docxmlconfig
|
|
)
|
|
endif
|