project('xserver', 'c',
|
default_options: [
|
'buildtype=debugoptimized',
|
'c_std=gnu99',
|
],
|
version: '1.20.11',
|
meson_version: '>= 0.42.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')
|
|
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_global_arguments(common_wflags, language : 'c')
|
|
xproto_dep = dependency('xproto', version: '>= 7.0.31')
|
randrproto_dep = dependency('randrproto', version: '>= 1.6.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') == 'true')
|
dri2proto_dep = dependency('dri2proto', version: '>= 2.8', required: get_option('dri2') == 'true')
|
dri3proto_dep = dependency('dri3proto', version: '>= 1.2', required: get_option('dri3') == 'true')
|
xineramaproto_dep = dependency('xineramaproto')
|
xf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0')
|
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)
|
xkbcomp_dep = dependency('xkbcomp', required: false)
|
xkbfile_dep = dependency('xkbfile')
|
xfont2_dep = dependency('xfont2', version: '>= 2.0')
|
nettle_dep = dependency('nettle')
|
|
dbus_required = get_option('systemd_logind') == 'true'
|
dbus_dep = dependency('dbus-1', version: '>= 1.0', required: dbus_required)
|
|
build_hashtable = false
|
|
# Resolve default values of some options
|
xkb_dir = get_option('xkb_dir')
|
if xkb_dir == ''
|
xkb_dir = xkbcomp_dep.get_pkgconfig_variable('xkbconfigdir')
|
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 == ''
|
xkb_bin_dir = xkbcomp_dep.get_pkgconfig_variable('bindir')
|
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 == ''
|
fontutil_dep = dependency('fontutil')
|
fontrootdir = fontutil_dep.get_pkgconfig_variable('fontrootdir')
|
default_font_path = ','.join([
|
join_paths(fontrootdir, 'misc'),
|
join_paths(fontrootdir, 'TTF'),
|
join_paths(fontrootdir, 'OTF'),
|
join_paths(fontrootdir, 'Type1'),
|
join_paths(fontrootdir, '100dpi'),
|
join_paths(fontrootdir, '75dpi'),
|
])
|
else
|
default_font_path = dfp
|
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 = 'false'
|
endif
|
|
if get_option('systemd_logind') == 'auto'
|
build_systemd_logind = build_udev and dbus_dep.found()
|
else
|
build_systemd_logind = get_option('systemd_logind') == 'true'
|
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') == 'true'
|
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') != 'false'
|
xwayland_required = get_option('xwayland') == 'true'
|
|
xwayland_dep = [
|
dependency('wayland-client', version: '>= 1.3.0', required: xwayland_required),
|
dependency('wayland-protocols', version: '>= 1.10', required: xwayland_required),
|
dependency('libdrm', version: '>= 2.4.89', 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') != 'false'
|
xnest_required = get_option('xnest') == 'true'
|
|
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
|
|
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
|
|
# XXX: Finish these.
|
build_xquartz = false
|
|
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() == '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 == '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
|
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 = get_option('glamor') == 'true'
|
endif
|
|
gbm_dep = dependency('', required: false)
|
epoxy_dep = dependency('', required: false)
|
if build_glamor
|
gbm_dep = dependency('gbm', version: '>= 10.2', required: false)
|
epoxy_dep = dependency('epoxy', required: 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
|
|
# XXX: Add more sha1 options, because Linux is about choice
|
sha1_dep = nettle_dep
|
|
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: '>= 2.4.89', 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
|
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_vbe = false
|
if get_option('vbe') == 'auto'
|
if (host_machine.system() != 'darwin' and
|
host_machine.system() != 'windows' and
|
host_machine.system() != 'cygwin')
|
build_vbe = true
|
endif
|
else
|
build_vbe = get_option('vbe') == 'true'
|
endif
|
|
rga_dep = dependency('', required: false)
|
if build_modesetting
|
rga_dep = dependency('librga', required: false)
|
endif
|
|
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
|
if get_option('dga') == 'auto'
|
xf86dgaproto_dep = dependency('xf86dgaproto', version: '>= 2.0.99.1', required: false)
|
if xf86dgaproto_dep.found()
|
build_dga = true
|
endif
|
elif get_option('dga') == 'true'
|
xf86dgaproto_dep = dependency('xf86dgaproto', version: '>= 2.0.99.1', 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
|
|
# XXX: Allow configuration of these.
|
build_xselinux = 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')
|
|
top_srcdir_inc = include_directories('.')
|
|
serverconfigdir = join_paths(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)
|
|
# 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')
|
subdir('test')
|
|
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', '')
|
|
configure_file(
|
input: 'xorg-server.pc.in',
|
output: 'xorg-server.pc',
|
configuration: sdkconfig,
|
install_dir: join_paths(get_option('prefix'),
|
get_option('libdir'),
|
'pkgconfig'),
|
)
|
endif
|
|
install_data('xorg-server.m4',
|
install_dir: join_paths(get_option('datadir'), 'aclocal'))
|