e67ca94047
Using the meson idiom of initializing a variaible to an empty array to represent a null value does not work well for a variable expected to hold a dependency object, as trying to apply found() to it will fail (currently). I think this can be demonstrated by configuing with Dglamor=no, then gbm_dep is set to [] in meson.build, and then tested with found() in include/meson.build. Use dependency('') to create an empty dependency. Future work: In the autotools build GBM is required if build_xorg & build_glamor. I suspect that it was also required for build_xwayland & build_glamor, but that was never checked. That test seems to have gone missing in meson.build, the required:false when checking for gbm should possibly be dropped? Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk> Reviewed-by: Eric Anholt <eric@anholt.net>
398 lines
11 KiB
Meson
398 lines
11 KiB
Meson
project('xserver', 'c',
|
|
default_options: ['buildtype=debugoptimized'],
|
|
version: '1.19.99.1',
|
|
meson_version: '>= 0.40.0',
|
|
)
|
|
add_project_arguments('-DHAVE_DIX_CONFIG_H', language: 'c')
|
|
cc = meson.get_compiler('c')
|
|
|
|
add_global_arguments('-fno-strict-aliasing', language : 'c')
|
|
add_global_arguments('-fvisibility=hidden', language : 'c')
|
|
|
|
add_global_link_arguments('-fvisibility=hidden', language : 'c')
|
|
|
|
# Quiet some EXA warnings.
|
|
add_global_arguments('-Wno-discarded-qualifiers', language : 'c')
|
|
|
|
xproto_dep = dependency('xproto', version: '>= 7.0.31')
|
|
randrproto_dep = dependency('randrproto', version: '>= 1.5.0')
|
|
renderproto_dep = dependency('renderproto', version: '>= 0.11')
|
|
xextproto_dep = dependency('xextproto', version: '>= 7.2.99.901')
|
|
inputproto_dep = dependency('inputproto', version: '>= 2.3')
|
|
kbproto_dep = dependency('kbproto', version: '>= 1.0.3')
|
|
fontsproto_dep = dependency('fontsproto', version: '>= 2.1.3')
|
|
fixesproto_dep = dependency('fixesproto', version: '>= 5.0')
|
|
damageproto_dep = dependency('damageproto', version: '>= 1.1')
|
|
xcmiscproto_dep = dependency('xcmiscproto', version: '>= 1.2.0')
|
|
bigreqsproto_dep = dependency('bigreqsproto', version: '>= 1.1.0')
|
|
xtrans_dep = dependency('xtrans', version: '>= 1.3.5')
|
|
|
|
videoproto_dep = dependency('videoproto')
|
|
compositeproto_dep = dependency('compositeproto', version: '>= 0.4')
|
|
recordproto_dep = dependency('recordproto', version: '>= 1.13.99.1')
|
|
scrnsaverproto_dep = dependency('scrnsaverproto', version: '>= 1.1')
|
|
resourceproto_dep = dependency('resourceproto', version: '>= 1.2.0')
|
|
xf86driproto_dep = dependency('xf86driproto', version: '>= 2.1.0', required: get_option('dri1') == 'yes')
|
|
dri2proto_dep = dependency('dri2proto', version: '>= 2.8', required: get_option('dri2') == 'yes')
|
|
dri3proto_dep = dependency('dri3proto', version: '>= 1.0', required: get_option('dri3') == 'yes')
|
|
xineramaproto_dep = dependency('xineramaproto')
|
|
xf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0')
|
|
xf86dgaproto_dep = dependency('xf86dgaproto', version: '>= 2.0.99.1', required: false)
|
|
xf86vidmodeproto_dep = dependency('xf86vidmodeproto', version: '>= 2.2.99.1', required: false)
|
|
windowswmproto_dep = dependency('windowswmproto', required: false)
|
|
applewmproto_dep = dependency('applewmproto', version: '>= 1.4', required: false)
|
|
xshmfence_dep = dependency('xshmfence', version: '>= 1.1', required: false)
|
|
|
|
pixman_dep = dependency('pixman-1')
|
|
libbsd_dep = dependency('libbsd', required: false)
|
|
xkbfile_dep = dependency('xkbfile')
|
|
xfont2_dep = dependency('xfont2', version: '>= 2.0')
|
|
nettle_dep = dependency('nettle')
|
|
|
|
dbus_required = get_option('systemd_logind') == 'yes'
|
|
dbus_dep = dependency('dbus-1', version: '>= 1.0', required: dbus_required)
|
|
|
|
# Resolve default values of some options
|
|
xkb_dir = get_option('xkb_dir')
|
|
if xkb_dir == ''
|
|
xkb_dir = join_paths(get_option('prefix'), 'share/X11/xkb')
|
|
endif
|
|
|
|
xkb_output_dir = get_option('xkb_output_dir')
|
|
if xkb_output_dir == ''
|
|
xkb_output_dir = join_paths(get_option('prefix'), 'share/X11/xkb/compiled')
|
|
endif
|
|
|
|
hal_option = get_option('hal')
|
|
glamor_option = get_option('glamor')
|
|
|
|
build_udev = get_option('udev')
|
|
if host_machine.system() == 'windows'
|
|
build_udev = false
|
|
hal_option = 'no'
|
|
endif
|
|
|
|
if get_option('systemd_logind') == 'auto'
|
|
build_systemd_logind = build_udev and dbus_dep.found()
|
|
else
|
|
build_systemd_logind = get_option('systemd_logind') == 'yes'
|
|
endif
|
|
|
|
build_xorg = false
|
|
if (host_machine.system() != 'darwin' and
|
|
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') == 'yes'
|
|
endif
|
|
endif
|
|
xorgsdkdir = join_paths(get_option('prefix'), get_option('includedir'), 'xorg')
|
|
|
|
build_xwayland = false
|
|
if (host_machine.system() != 'darwin' and
|
|
host_machine.system() != 'windows')
|
|
if get_option('xwayland') != 'no'
|
|
xwayland_required = get_option('xwayland') == 'yes'
|
|
|
|
xwayland_dep = [
|
|
dependency('wayland-client', version: '>= 1.3.0', required: xwayland_required),
|
|
dependency('wayland-protocols', version: '>= 1.5.0', required: xwayland_required),
|
|
dependency('libdrm', version: '>= 2.3.1', required: xwayland_required),
|
|
dependency('epoxy', required: xwayland_required),
|
|
]
|
|
|
|
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
|
|
endif
|
|
|
|
build_xnest = false
|
|
if (host_machine.system() != 'darwin' and
|
|
host_machine.system() != 'windows')
|
|
if get_option('xnest') != 'no'
|
|
xnest_required = get_option('xnest') == 'yes'
|
|
|
|
xnest_dep = [
|
|
dependency('xext', version: '>= 1.0.99.4', 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
|
|
|
|
# XXX: Finish these.
|
|
build_xquartz = false
|
|
build_xwin = false
|
|
|
|
if get_option('ipv6') == 'auto'
|
|
build_ipv6 = cc.has_function('getaddrinfo')
|
|
else
|
|
build_ipv6 = get_option('ipv6') == 'yes'
|
|
endif
|
|
|
|
int10 = get_option('int10')
|
|
if int10 == 'auto'
|
|
int10 = 'x86emu'
|
|
if host_machine.cpu() == 'powerpc' 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 == 'yes'
|
|
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
|
|
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 = get_option('module_dir')
|
|
if module_dir == ''
|
|
module_dir = join_paths(get_option('libdir'), 'xorg/modules')
|
|
endif
|
|
|
|
if glamor_option == 'auto'
|
|
build_glamor = build_xorg or build_xwayland
|
|
else
|
|
build_glamor = get_option('glamor') == 'yes'
|
|
endif
|
|
|
|
gbm_dep = dependency('', required:false)
|
|
if build_glamor
|
|
gbm_dep = dependency('gbm', version: '>= 10.2', required: false)
|
|
if gbm_dep.found()
|
|
gbm_linear_dep = dependency('gbm', version: '>= 10.6', required: false)
|
|
endif
|
|
endif
|
|
|
|
# XXX: Add more sha1 options, because Linux is about choice
|
|
sha1_dep = nettle_dep
|
|
|
|
xdmcp_dep = ''
|
|
if get_option('xdmcp')
|
|
xdmcp_dep = dependency('xdmcp')
|
|
endif
|
|
|
|
build_glx = get_option('glx')
|
|
|
|
if get_option('dri1') == 'auto'
|
|
build_dri1 = xf86driproto_dep.found()
|
|
else
|
|
build_dri1 = get_option('dri1') == 'yes'
|
|
endif
|
|
|
|
if get_option('dri2') == 'auto'
|
|
build_dri2 = dri2proto_dep.found()
|
|
else
|
|
build_dri2 = get_option('dri2') == 'yes'
|
|
endif
|
|
|
|
if get_option('dri3') == 'auto'
|
|
build_dri3 = dri3proto_dep.found() and xshmfence_dep.found()
|
|
else
|
|
build_dri3 = get_option('dri3') == 'yes'
|
|
if build_dri3
|
|
if not xshmfence_dep.found()
|
|
error('DRI3 requested, but xshmfence not found')
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
libdrm_required = (get_option('dri1') == 'yes') or (get_option('dri2') == 'yes') or (get_option('dri3') == 'yes')
|
|
libdrm_dep = dependency('libdrm', version: '>= 2.3.1', required: libdrm_required)
|
|
build_modesetting = false
|
|
if libdrm_dep.found()
|
|
if build_dri2
|
|
# 2.4.65 is required for drmGetDevice
|
|
dependency('libdrm', version: '>= 2.4.65')
|
|
endif
|
|
# 2.4.46 is required for cursor hotspot support.
|
|
build_modesetting = libdrm_dep.version().version_compare('>= 2.4.46')
|
|
endif
|
|
|
|
# XXX: Allow configuration of these.
|
|
build_apm = false
|
|
build_acpi = false
|
|
build_dpms = true
|
|
build_mitshm = true
|
|
build_res = true
|
|
build_screensaver = true
|
|
build_vbe = true
|
|
build_vgahw = true
|
|
build_xace = true
|
|
build_xsecurity = true
|
|
build_xf86bigfont = true
|
|
build_xinerama = true
|
|
build_xselinux = false
|
|
build_xv = true
|
|
build_dga = false
|
|
build_xf86vidmode = xf86vidmodeproto_dep.found()
|
|
|
|
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,
|
|
|
|
videoproto_dep,
|
|
compositeproto_dep,
|
|
recordproto_dep,
|
|
scrnsaverproto_dep,
|
|
resourceproto_dep,
|
|
xf86driproto_dep,
|
|
dri2proto_dep,
|
|
dri3proto_dep,
|
|
xineramaproto_dep,
|
|
xf86bigfontproto_dep,
|
|
xf86dgaproto_dep,
|
|
xf86vidmodeproto_dep,
|
|
windowswmproto_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',
|
|
)
|
|
|
|
glx_inc = include_directories('glx')
|
|
|
|
serverconfigdir = join_paths(get_option('libdir'), '/xorg')
|
|
|
|
# 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')
|
|
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
|
|
|
|
# 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')
|