11b5d61b8Smrgproject('xserver', 'c',
21b5d61b8Smrg        default_options: [
31b5d61b8Smrg            'buildtype=debugoptimized',
41b5d61b8Smrg            'c_std=gnu99',
51b5d61b8Smrg        ],
654b5899cSmrg        version: '21.1.18',
7ed6184dfSmrg        meson_version: '>= 0.47.0',
81b5d61b8Smrg)
954b5899cSmrgrelease_date = '2025-06-18'
10ed6184dfSmrg
11ed6184dfSmrgadd_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc'])
121b5d61b8Smrgcc = meson.get_compiler('c')
131b5d61b8Smrg
141b5d61b8Smrgadd_global_arguments('-fno-strict-aliasing', language : 'c')
151b5d61b8Smrgadd_global_arguments('-fvisibility=hidden', language : 'c')
161b5d61b8Smrg
171b5d61b8Smrgadd_global_link_arguments('-fvisibility=hidden', language : 'c')
181b5d61b8Smrg
191b5d61b8Smrgif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
201b5d61b8Smrg    test_wflags = [
211b5d61b8Smrg        '-Wall',
221b5d61b8Smrg        '-Wpointer-arith',
231b5d61b8Smrg        '-Wmissing-declarations',
241b5d61b8Smrg        '-Wformat=2',
251b5d61b8Smrg        '-Wstrict-prototypes',
261b5d61b8Smrg        '-Wmissing-prototypes',
271b5d61b8Smrg        '-Wnested-externs',
281b5d61b8Smrg        '-Wbad-function-cast',
291b5d61b8Smrg        '-Wold-style-definition',
301b5d61b8Smrg        '-Wunused',
311b5d61b8Smrg        '-Wuninitialized',
321b5d61b8Smrg        '-Wshadow',
331b5d61b8Smrg        '-Wmissing-noreturn',
341b5d61b8Smrg        '-Wmissing-format-attribute',
351b5d61b8Smrg        '-Wredundant-decls',
361b5d61b8Smrg        '-Werror=implicit',
371b5d61b8Smrg        '-Werror=nonnull',
381b5d61b8Smrg        '-Werror=init-self',
391b5d61b8Smrg        '-Werror=main',
401b5d61b8Smrg        '-Werror=missing-braces',
411b5d61b8Smrg        '-Werror=sequence-point',
421b5d61b8Smrg        '-Werror=return-type',
431b5d61b8Smrg        '-Werror=trigraphs',
441b5d61b8Smrg        '-Werror=array-bounds',
451b5d61b8Smrg        '-Werror=write-strings',
461b5d61b8Smrg        '-Werror=address',
471b5d61b8Smrg        '-Werror=int-to-pointer-cast',
481b5d61b8Smrg        '-Werror=pointer-to-int-cast',
491b5d61b8Smrg    ]
501b5d61b8Smrgelse
511b5d61b8Smrg    test_wflags = []
521b5d61b8Smrgendif
531b5d61b8Smrg
541b5d61b8Smrgcommon_wflags = []
551b5d61b8Smrgforeach wflag: test_wflags
561b5d61b8Smrg    if cc.has_argument(wflag)
571b5d61b8Smrg        common_wflags += [ wflag ]
581b5d61b8Smrg    endif
591b5d61b8Smrgendforeach
601b5d61b8Smrg
61ed6184dfSmrgadd_global_arguments(common_wflags, language : ['c', 'objc'])
62ed6184dfSmrg
63ed6184dfSmrglibdrm_req = '>= 2.4.89'
64ed6184dfSmrglibselinux_req = '>= 2.0.86'
65ed6184dfSmrgxext_req = '>= 1.0.99.4'
66ed6184dfSmrgwayland_req = '>= 1.5.0'
67ed6184dfSmrgwayland_protocols_req = '>= 1.18'
68ed6184dfSmrggbm_req = '>= 10.2'
69ed6184dfSmrgxf86dgaproto_req = '>= 2.0.99.1'
70ed6184dfSmrg
71ed6184dfSmrgxproto_dep = dependency('xproto', version: '>= 7.0.31', fallback: ['xorgproto', 'ext_xorgproto'])
72ed6184dfSmrgrandrproto_dep = dependency('randrproto', version: '>= 1.6.0', fallback: ['xorgproto', 'ext_xorgproto'])
73ed6184dfSmrgrenderproto_dep = dependency('renderproto', version: '>= 0.11', fallback: ['xorgproto', 'ext_xorgproto'])
74ed6184dfSmrgxextproto_dep = dependency('xextproto', version: '>= 7.2.99.901', fallback: ['xorgproto', 'ext_xorgproto'])
75ed6184dfSmrginputproto_dep = dependency('inputproto', version: '>= 2.3.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
76ed6184dfSmrgkbproto_dep = dependency('kbproto', version: '>= 1.0.3', fallback: ['xorgproto', 'ext_xorgproto'])
77ed6184dfSmrgfontsproto_dep = dependency('fontsproto', version: '>= 2.1.3', fallback: ['xorgproto', 'ext_xorgproto'])
78ed6184dfSmrgfixesproto_dep = dependency('fixesproto', version: '>= 6.0', fallback: ['xorgproto', 'ext_xorgproto'])
79ed6184dfSmrgdamageproto_dep = dependency('damageproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto'])
80ed6184dfSmrgxcmiscproto_dep = dependency('xcmiscproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'])
81ed6184dfSmrgbigreqsproto_dep = dependency('bigreqsproto', version: '>= 1.1.0', fallback: ['xorgproto', 'ext_xorgproto'])
821b5d61b8Smrgxtrans_dep = dependency('xtrans', version: '>= 1.3.5')
831b5d61b8Smrg
84ed6184dfSmrgvideoproto_dep = dependency('videoproto', fallback: ['xorgproto', 'ext_xorgproto'])
85ed6184dfSmrgcompositeproto_dep = dependency('compositeproto', version: '>= 0.4', fallback: ['xorgproto', 'ext_xorgproto'])
86ed6184dfSmrgrecordproto_dep = dependency('recordproto', version: '>= 1.13.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
87ed6184dfSmrgscrnsaverproto_dep = dependency('scrnsaverproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto'])
88ed6184dfSmrgresourceproto_dep = dependency('resourceproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'])
89ed6184dfSmrgxf86driproto_dep = dependency('xf86driproto', version: '>= 2.1.0', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri1') == 'true')
90ed6184dfSmrgdri2proto_dep = dependency('dri2proto', version: '>= 2.8', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri2') == 'true')
91ed6184dfSmrgdri3proto_dep = dependency('dri3proto', version: '>= 1.2', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri3') == 'true')
92ed6184dfSmrgxineramaproto_dep = dependency('xineramaproto', fallback: ['xorgproto', 'ext_xorgproto'])
93ed6184dfSmrgxf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('xf86bigfont'))
94ed6184dfSmrgxf86vidmodeproto_dep = dependency('xf86vidmodeproto', version: '>= 2.2.99.1', fallback: ['xorgproto', 'ext_xorgproto'])
95ed6184dfSmrgapplewmproto_dep = dependency('applewmproto', version: '>= 1.4', fallback: ['xorgproto', 'ext_xorgproto'], required: false)
961b5d61b8Smrgxshmfence_dep = dependency('xshmfence', version: '>= 1.1', required: false)
971b5d61b8Smrg
981b5d61b8Smrgpixman_dep = dependency('pixman-1')
99eee80088Smrglibbsd_dep = dependency('libbsd-overlay', required: false)
1001b5d61b8Smrgxkbcomp_dep = dependency('xkbcomp', required: false)
1011b5d61b8Smrgxkbfile_dep = dependency('xkbfile')
1021b5d61b8Smrgxfont2_dep = dependency('xfont2', version: '>= 2.0')
1031b5d61b8Smrg
1041b5d61b8Smrgdbus_required = get_option('systemd_logind') == 'true'
1051b5d61b8Smrgdbus_dep = dependency('dbus-1', version: '>= 1.0', required: dbus_required)
1061b5d61b8Smrg
107ed6184dfSmrg# libsystemd-daemon was moved into libsystemd in version 209
108ed6184dfSmrglibsystemd_daemon_dep = dependency('libsystemd', version: '>= 209', required: false)
109ed6184dfSmrgif not libsystemd_daemon_dep.found()
110ed6184dfSmrg    libsystemd_daemon_dep = dependency('libsystemd-daemon', required: false)
111ed6184dfSmrgendif
112ed6184dfSmrg
1131b5d61b8Smrgbuild_hashtable = false
1141b5d61b8Smrg
1151b5d61b8Smrg# Resolve default values of some options
1161b5d61b8Smrgxkb_dir = get_option('xkb_dir')
1171b5d61b8Smrgif xkb_dir == ''
118ed6184dfSmrg    if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig'
119ed6184dfSmrg        xkb_dir = xkbcomp_dep.get_pkgconfig_variable('xkbconfigdir')
120ed6184dfSmrg    endif
1211b5d61b8Smrg    if xkb_dir == ''
1221b5d61b8Smrg        xkb_dir = join_paths(get_option('prefix'), 'share/X11/xkb')
1231b5d61b8Smrg    endif
1241b5d61b8Smrgendif
1251b5d61b8Smrg
1261b5d61b8Smrgxkb_output_dir = get_option('xkb_output_dir')
1271b5d61b8Smrgif xkb_output_dir == ''
1281b5d61b8Smrg    xkb_output_dir = join_paths(xkb_dir, 'compiled')
1291b5d61b8Smrgendif
1301b5d61b8Smrg
1311b5d61b8Smrgxkb_bin_dir = get_option('xkb_bin_dir')
1321b5d61b8Smrgif xkb_bin_dir == ''
133ed6184dfSmrg    if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig'
134ed6184dfSmrg        xkb_bin_dir = xkbcomp_dep.get_pkgconfig_variable('bindir')
135ed6184dfSmrg    endif
1361b5d61b8Smrg    if xkb_bin_dir == ''
1371b5d61b8Smrg        xkb_bin_dir = join_paths(get_option('prefix'), get_option('bindir'))
1381b5d61b8Smrg    endif
1391b5d61b8Smrgendif
1401b5d61b8Smrg
1411b5d61b8Smrgdfp = get_option('default_font_path')
1421b5d61b8Smrgif dfp == ''
1431b5d61b8Smrg    fontutil_dep = dependency('fontutil')
1441b5d61b8Smrg    fontrootdir = fontutil_dep.get_pkgconfig_variable('fontrootdir')
145ed6184dfSmrg    dfp_elements = [
1461b5d61b8Smrg        join_paths(fontrootdir, 'misc'),
1471b5d61b8Smrg        join_paths(fontrootdir, 'TTF'),
1481b5d61b8Smrg        join_paths(fontrootdir, 'OTF'),
1491b5d61b8Smrg        join_paths(fontrootdir, 'Type1'),
1501b5d61b8Smrg        join_paths(fontrootdir, '100dpi'),
1511b5d61b8Smrg        join_paths(fontrootdir, '75dpi'),
152ed6184dfSmrg    ]
153ed6184dfSmrg    if host_machine.system() == 'darwin'
154ed6184dfSmrg       dfp_elements += [
155ed6184dfSmrg       '/Library/Fonts',
156ed6184dfSmrg       '/System/Library/Fonts',
157ed6184dfSmrg    ]
158ed6184dfSmrg    endif
159ed6184dfSmrg    default_font_path = ','.join(dfp_elements)
1601b5d61b8Smrgelse
1611b5d61b8Smrg    default_font_path = dfp
1621b5d61b8Smrgendif
1631b5d61b8Smrg
1641b5d61b8Smrghal_option = get_option('hal')
1651b5d61b8Smrgglamor_option = get_option('glamor')
1661b5d61b8Smrg
1671b5d61b8Smrgbuild_udev = get_option('udev')
168ed6184dfSmrgbuild_udev_kms = get_option('udev_kms')
169ed6184dfSmrgif ['windows',  'darwin', 'cygwin'].contains(host_machine.system())
1701b5d61b8Smrg    build_udev = false
171ed6184dfSmrg    build_udev_kms = false
1721b5d61b8Smrg    hal_option = 'false'
1731b5d61b8Smrgendif
1741b5d61b8Smrg
1751b5d61b8Smrgif get_option('systemd_logind') == 'auto'
176ed6184dfSmrg    build_systemd_logind = build_udev_kms and dbus_dep.found()
1771b5d61b8Smrgelse
1781b5d61b8Smrg    build_systemd_logind = get_option('systemd_logind') == 'true'
1791b5d61b8Smrgendif
1801b5d61b8Smrg
181ed6184dfSmrgwith_dtrace = get_option('dtrace')
182ed6184dfSmrgif with_dtrace
183ed6184dfSmrg    dtrace = find_program('dtrace', required: true)
184ed6184dfSmrgendif
185ed6184dfSmrg
1861b5d61b8Smrgbuild_xorg = false
187dc61d50dSmrgif (host_machine.system() != 'windows')
1881b5d61b8Smrg    if get_option('xorg') == 'auto'
1891b5d61b8Smrg        build_xorg = (host_machine.system() != 'darwin' and
1901b5d61b8Smrg                      host_machine.system() != 'windows')
1911b5d61b8Smrg    else
1921b5d61b8Smrg        build_xorg = get_option('xorg') == 'true'
1931b5d61b8Smrg    endif
1941b5d61b8Smrgendif
1951b5d61b8Smrgxorgsdkdir = join_paths(get_option('prefix'), get_option('includedir'), 'xorg')
196ed6184dfSmrglibxcvt_dep = dependency('libxcvt', required: build_xorg)
1971b5d61b8Smrg
1981b5d61b8Smrgbuild_xnest = false
199dc61d50dSmrgif (host_machine.system() != 'windows')
2001b5d61b8Smrg    if get_option('xnest') != 'false'
2011b5d61b8Smrg        xnest_required = get_option('xnest') == 'true'
2021b5d61b8Smrg
2031b5d61b8Smrg        xnest_dep = [
204ed6184dfSmrg            dependency('xext', version: xext_req, required: xnest_required),
2051b5d61b8Smrg            dependency('x11', required: xnest_required),
2061b5d61b8Smrg            dependency('xau', required: xnest_required),
2071b5d61b8Smrg        ]
2081b5d61b8Smrg
2091b5d61b8Smrg        build_xnest = true
2101b5d61b8Smrg        # check for all the deps being found, to handle 'auto' mode.
2111b5d61b8Smrg        foreach d: xnest_dep
2121b5d61b8Smrg            if not d.found()
2131b5d61b8Smrg                build_xnest = false
2141b5d61b8Smrg            endif
2151b5d61b8Smrg        endforeach
2161b5d61b8Smrg    endif
2171b5d61b8Smrgendif
2181b5d61b8Smrg
2191b5d61b8Smrgbuild_xwin = false
2201b5d61b8Smrgif get_option('xwin') == 'auto'
2211b5d61b8Smrg    if (host_machine.system() == 'cygwin' or
2221b5d61b8Smrg        host_machine.system() == 'windows')
2231b5d61b8Smrg            build_xwin = true
2241b5d61b8Smrg    endif
2251b5d61b8Smrgelse
2261b5d61b8Smrg    build_xwin = get_option('xwin') == 'true'
2271b5d61b8Smrgendif
2281b5d61b8Smrg
2291b5d61b8Smrgbuild_xquartz = false
230ed6184dfSmrgif get_option('xquartz') == 'auto'
231ed6184dfSmrg    if host_machine.system() == 'darwin'
232ed6184dfSmrg            build_xquartz = true
233ed6184dfSmrg    endif
234ed6184dfSmrgelse
235ed6184dfSmrg    build_xquartz = get_option('xquartz') == 'true'
236ed6184dfSmrgendif
237ed6184dfSmrg
238ed6184dfSmrgbuild_rootless = false
239ed6184dfSmrgif build_xquartz
240ed6184dfSmrg    build_rootless = true
241ed6184dfSmrgendif
2421b5d61b8Smrg
2431b5d61b8Smrgif get_option('ipv6') == 'auto'
2441b5d61b8Smrg    build_ipv6 = cc.has_function('getaddrinfo')
2451b5d61b8Smrgelse
2461b5d61b8Smrg    build_ipv6 = get_option('ipv6') == 'true'
2471b5d61b8Smrgendif
2481b5d61b8Smrg
2491b5d61b8Smrgint10 = get_option('int10')
2501b5d61b8Smrgif int10 == 'auto'
2511b5d61b8Smrg    int10 = 'x86emu'
2521b5d61b8Smrg    if host_machine.cpu() == 'powerpc' and host_machine.system() == 'freebsd'
2531b5d61b8Smrg        int10 = 'stub'
2541b5d61b8Smrg    endif
2551b5d61b8Smrg    if host_machine.cpu() == 'arm'
2561b5d61b8Smrg        int10 = 'stub'
2571b5d61b8Smrg    endif
2581b5d61b8Smrgendif
2591b5d61b8Smrg
2601b5d61b8Smrghal_dep = []
2611b5d61b8Smrgif hal_option == 'auto'
2621b5d61b8Smrg    if not build_udev
2631b5d61b8Smrg        hal_dep = dependency('hal', required: false)
2641b5d61b8Smrg        build_hal = hal_dep.found()
2651b5d61b8Smrg    else
2661b5d61b8Smrg        build_hal = false
2671b5d61b8Smrg    endif
2681b5d61b8Smrgelse
2691b5d61b8Smrg    build_hal = hal_option == 'true'
2701b5d61b8Smrg    if build_hal
2711b5d61b8Smrg        hal_dep = dependency('hal')
2721b5d61b8Smrg    endif
2731b5d61b8Smrgendif
2741b5d61b8Smrg
2751b5d61b8Smrgif build_udev and build_hal
2761b5d61b8Smrg    error('Hotplugging through both libudev and hal not allowed')
2771b5d61b8Smrgendif
2781b5d61b8Smrg
2791b5d61b8Smrgbuild_dbus = build_hal or build_systemd_logind
2801b5d61b8Smrg
2811b5d61b8Smrgudev_dep = dependency('', required:false)
282ed6184dfSmrgif build_udev or build_udev_kms
2831b5d61b8Smrg    udev_dep = dependency('libudev', version: '>= 143')
2841b5d61b8Smrgendif
2851b5d61b8Smrg
2861b5d61b8Smrglog_dir = get_option('log_dir')
2871b5d61b8Smrgif log_dir == ''
2881b5d61b8Smrg    log_dir = join_paths(get_option('prefix'), get_option('localstatedir'), 'log')
2891b5d61b8Smrgendif
2901b5d61b8Smrg
2911b5d61b8Smrgmodule_dir = join_paths(get_option('libdir'), get_option('module_dir'))
2921b5d61b8Smrg
2931b5d61b8Smrgif glamor_option == 'auto'
294ed6184dfSmrg    build_glamor = build_xorg
2951b5d61b8Smrgelse
296ed6184dfSmrg    build_glamor = glamor_option == 'true'
2971b5d61b8Smrgendif
2981b5d61b8Smrg
2991b5d61b8Smrggbm_dep = dependency('', required: false)
3001b5d61b8Smrgepoxy_dep = dependency('', required: false)
3011b5d61b8Smrgif build_glamor
302ed6184dfSmrg    gbm_dep = dependency('gbm', version: gbm_req, required: false)
3031b5d61b8Smrg    epoxy_dep = dependency('epoxy', required: false)
3041b5d61b8Smrgendif
3051b5d61b8Smrg
306ed6184dfSmrg# Lots of sha1 options, because Linux is about choice :)
307ed6184dfSmrg
308ed6184dfSmrg# The idea behind the ordering here is that we should first prefer system
309ed6184dfSmrg# builtin providers, and then smaller implementations of over larger ones.
310ed6184dfSmrgtest_sha1 = [
311ed6184dfSmrg    'libc',          # libmd API is in libc on some BSDs
312ed6184dfSmrg    'CommonCrypto',  # darwin API
313ed6184dfSmrg    'CryptoAPI',     # windows API
314ed6184dfSmrg    'libmd',         # other BSDs & Solaris
315ed6184dfSmrg    '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"
316ed6184dfSmrg    'libnettle',
317ed6184dfSmrg    'libgcrypt',     # in debian base system
318ed6184dfSmrg    'libcrypto',
319ed6184dfSmrg]
320ed6184dfSmrg
321ed6184dfSmrgif get_option('sha1') != 'auto'
322ed6184dfSmrg    test_sha1 = [get_option('sha1')]
323ed6184dfSmrgendif
324ed6184dfSmrg
325ed6184dfSmrgsha1_found = false
326ed6184dfSmrgforeach t : test_sha1
327ed6184dfSmrg    if t == 'libc'
328ed6184dfSmrg        if cc.has_function('SHA1Init')
329ed6184dfSmrg            sha1_found = true
330ed6184dfSmrg            sha1_dep = dependency('', required: false)
331ed6184dfSmrg        endif
332ed6184dfSmrg    elif t == 'CommonCrypto'
333ed6184dfSmrg        if cc.has_function('CC_SHA1_Init')
334ed6184dfSmrg            sha1_found = true
335ed6184dfSmrg            sha1_dep = dependency('', required: false)
336ed6184dfSmrg        endif
337ed6184dfSmrg    elif t == 'CryptoAPI'
338ed6184dfSmrg        if cc.has_header('wincrypt.h')
339ed6184dfSmrg            sha1_found = true
340ed6184dfSmrg            sha1_dep = dependency('', required: false)
341ed6184dfSmrg        endif
342ed6184dfSmrg    elif t == 'libmd'
343ed6184dfSmrg        md_dep = cc.find_library('md', required: false)
344ed6184dfSmrg        if md_dep.found()
345ed6184dfSmrg            sha1_found = true
346ed6184dfSmrg            sha1_dep = md_dep
347ed6184dfSmrg        endif
348ed6184dfSmrg    elif t == 'libsha1'
349ed6184dfSmrg        libsha1_dep = dependency('libsha1', required: false)
350ed6184dfSmrg        if libsha1_dep.found()
351ed6184dfSmrg            sha1_found = true
352ed6184dfSmrg            sha1_dep = libsha1_dep
353ed6184dfSmrg        endif
354ed6184dfSmrg    elif t == 'libnettle'
355ed6184dfSmrg        nettle_dep = dependency('nettle', required: false)
356ed6184dfSmrg        if nettle_dep.found()
357ed6184dfSmrg            sha1_found = true
358ed6184dfSmrg            sha1_dep = nettle_dep
359ed6184dfSmrg        endif
360ed6184dfSmrg    elif t == 'libgcrypt'
361ed6184dfSmrg        gcrypt_dep = dependency('libgcrypt', required: false)
362ed6184dfSmrg        if gcrypt_dep.found()
363ed6184dfSmrg            sha1_found = true
364ed6184dfSmrg            sha1_dep = gcrypt_dep
365ed6184dfSmrg        endif
366ed6184dfSmrg    elif t == 'libcrypto'
367ed6184dfSmrg        # we don't need all of OpenSSL, just libcrypto
368ed6184dfSmrg        libcrypto_dep = cc.find_library('crypto', required: false)
369ed6184dfSmrg        openssl_dep = dependency('openssl', required: false)
370ed6184dfSmrg        if libcrypto_dep.found() or openssl_dep.found()
371ed6184dfSmrg            sha1_found = true
372ed6184dfSmrg            if libcrypto_dep.found()
373ed6184dfSmrg               sha1_dep = libcrypto_dep
374ed6184dfSmrg            else
375ed6184dfSmrg               sha1_dep = openssl_dep
376ed6184dfSmrg            endif
3771b5d61b8Smrg        endif
3781b5d61b8Smrg    endif
379ed6184dfSmrg
380ed6184dfSmrg    if sha1_found
381ed6184dfSmrg        sha1 = t
382ed6184dfSmrg        break
383ed6184dfSmrg    endif
384ed6184dfSmrgendforeach
385ed6184dfSmrg
386ed6184dfSmrgif sha1_found
387ed6184dfSmrg    message('Using @0@ SHA1 functions'.format(sha1))
3881b5d61b8Smrgelse
389ed6184dfSmrg    if get_option('sha1') != 'auto'
390ed6184dfSmrg        error('@0@ SHA1 requested, but not found'.format(get_option('sha1')))
391ed6184dfSmrg    else
392ed6184dfSmrg        error('No suitable SHA1 implementation found')
393ed6184dfSmrg    endif
3941b5d61b8Smrgendif
3951b5d61b8Smrg
3961b5d61b8Smrgxdmcp_dep = dependency('', required : false)
3971b5d61b8Smrgif get_option('xdmcp')
3981b5d61b8Smrg    xdmcp_dep = dependency('xdmcp')
3991b5d61b8Smrgendif
4001b5d61b8Smrg
4011b5d61b8Smrghas_xdm_auth = get_option('xdm-auth-1')
4021b5d61b8Smrg
4031b5d61b8Smrgif not xdmcp_dep.found()
4041b5d61b8Smrg  has_xdm_auth = false
4051b5d61b8Smrgendif
4061b5d61b8Smrg
4071b5d61b8Smrgbuild_glx = get_option('glx')
4081b5d61b8Smrgif build_glx
4091b5d61b8Smrg    build_hashtable = true
4101b5d61b8Smrgendif
4111b5d61b8Smrg
412ed6184dfSmrglibdrm_dep = dependency('libdrm', version: libdrm_req, required: false)
4131b5d61b8Smrg
4141b5d61b8Smrgif get_option('dri1') == 'auto'
4151b5d61b8Smrg    build_dri1 = xf86driproto_dep.found() and libdrm_dep.found()
4161b5d61b8Smrgelse
4171b5d61b8Smrg    build_dri1 = get_option('dri1') == 'true'
4181b5d61b8Smrgendif
4191b5d61b8Smrg
4201b5d61b8Smrgif get_option('dri2') == 'auto'
4211b5d61b8Smrg    build_dri2 = dri2proto_dep.found() and libdrm_dep.found()
4221b5d61b8Smrgelse
4231b5d61b8Smrg    build_dri2 = get_option('dri2') == 'true'
4241b5d61b8Smrgendif
4251b5d61b8Smrg
4261b5d61b8Smrgif get_option('dri3') == 'auto'
4271b5d61b8Smrg    build_dri3 = dri3proto_dep.found() and xshmfence_dep.found() and libdrm_dep.found()
4281b5d61b8Smrgelse
4291b5d61b8Smrg    build_dri3 = get_option('dri3') == 'true'
4301b5d61b8Smrg    if build_dri3
4311b5d61b8Smrg       if not xshmfence_dep.found()
4321b5d61b8Smrg           error('DRI3 requested, but xshmfence not found')
4331b5d61b8Smrg       endif
4341b5d61b8Smrg    endif
4351b5d61b8Smrgendif
4361b5d61b8Smrg
437ed6184dfSmrglibdrm_required = (build_dri1 or build_dri2 or build_dri3) and get_option('drm') == true
4381b5d61b8Smrgif not libdrm_dep.found() and libdrm_required
4391b5d61b8Smrg    error('DRI requested, but LIBDRM not found')
4401b5d61b8Smrgendif
4411b5d61b8Smrg
442c8548ba8Smrgbuild_modesetting = libdrm_dep.found() and dri2proto_dep.found()
4431b5d61b8Smrg
4441b5d61b8Smrgbuild_vgahw = false
4451b5d61b8Smrgif get_option('vgahw') == 'auto'
4461b5d61b8Smrg    if (host_machine.system() != 'darwin' and
4471b5d61b8Smrg        host_machine.system() != 'windows' and
4481b5d61b8Smrg        host_machine.system() != 'cygwin')
4491b5d61b8Smrg        build_vgahw = true
4501b5d61b8Smrg    endif
4511b5d61b8Smrgelse
4521b5d61b8Smrg    build_vgahw = get_option('vgahw') == 'true'
4531b5d61b8Smrgendif
4541b5d61b8Smrg
4551b5d61b8Smrgbuild_dpms = get_option('dpms')
4561b5d61b8Smrgif build_xquartz
4571b5d61b8Smrg    build_dpms = false
4581b5d61b8Smrgendif
4591b5d61b8Smrg
4601b5d61b8Smrgbuild_xf86bigfont = get_option('xf86bigfont')
4611b5d61b8Smrgbuild_screensaver = get_option('screensaver')
4621b5d61b8Smrgbuild_res = get_option('xres')
4631b5d61b8Smrgif build_res
4641b5d61b8Smrg    build_hashtable = true
4651b5d61b8Smrgendif
4661b5d61b8Smrg
4671b5d61b8Smrgbuild_xace = get_option('xace')
4681b5d61b8Smrgbuild_xinerama = get_option('xinerama')
4691b5d61b8Smrg
4701b5d61b8Smrgbuild_xsecurity = get_option('xcsecurity')
4711b5d61b8Smrgif build_xsecurity
4721b5d61b8Smrg    if not build_xace
4731b5d61b8Smrg        error('cannot build Security extension without X-ACE')
4741b5d61b8Smrg    endif
4751b5d61b8Smrgendif
4761b5d61b8Smrg
4771b5d61b8Smrgbuild_xv = get_option('xv')
4781b5d61b8Smrgbuild_xvmc = get_option('xvmc')
4791b5d61b8Smrgif not build_xv
4801b5d61b8Smrg    build_xvmc = false
4811b5d61b8Smrgendif
4821b5d61b8Smrg
4831b5d61b8Smrgbuild_dga = false
484ed6184dfSmrgxf86dgaproto_dep = dependency('', required: false)
4851b5d61b8Smrgif get_option('dga') == 'auto'
486ed6184dfSmrg    xf86dgaproto_dep = dependency('xf86dgaproto', version: xf86dgaproto_req, required: false)
4871b5d61b8Smrg    if xf86dgaproto_dep.found()
4881b5d61b8Smrg        build_dga = true
4891b5d61b8Smrg    endif
4901b5d61b8Smrgelif get_option('dga') == 'true'
491ed6184dfSmrg    xf86dgaproto_dep = dependency('xf86dgaproto', version: xf86dgaproto_req, required: true)
4921b5d61b8Smrg    build_dga = true
4931b5d61b8Smrgendif
4941b5d61b8Smrg
4951b5d61b8Smrgbuild_apm = false
4961b5d61b8Smrgif (get_option('linux_apm') == true and
4971b5d61b8Smrg   host_machine.system() == 'linux')
4981b5d61b8Smrg    if cc.has_header('linux/apm_bios.h')
4991b5d61b8Smrg        build_apm = true
5001b5d61b8Smrg    endif
5011b5d61b8Smrgendif
5021b5d61b8Smrg
5031b5d61b8Smrgbuild_acpi = false
5041b5d61b8Smrgif (get_option('linux_acpi') == true and
5051b5d61b8Smrg   host_machine.system() == 'linux')
5061b5d61b8Smrg    if (host_machine.cpu() == 'x86' or
5071b5d61b8Smrg       host_machine.cpu() == 'x86_64' or
5081b5d61b8Smrg       host_machine.cpu() == 'ia64')
5091b5d61b8Smrg        build_acpi = true
5101b5d61b8Smrg    endif
5111b5d61b8Smrgendif
5121b5d61b8Smrg
5131b5d61b8Smrgbuild_mitshm = false
5141b5d61b8Smrgif get_option('mitshm') == 'auto'
5151b5d61b8Smrg    build_mitshm = cc.has_header('sys/shm.h')
5161b5d61b8Smrgelif get_option('mitshm') == 'true'
5171b5d61b8Smrg    build_mitshm = true
5181b5d61b8Smrgendif
5191b5d61b8Smrg
5201b5d61b8Smrgm_dep = cc.find_library('m', required : false)
5211b5d61b8Smrgdl_dep = cc.find_library('dl', required : false)
5221b5d61b8Smrg
5231b5d61b8Smrgcommon_dep = [
5241b5d61b8Smrg    xproto_dep,
5251b5d61b8Smrg    randrproto_dep,
5261b5d61b8Smrg    renderproto_dep,
5271b5d61b8Smrg    xextproto_dep,
5281b5d61b8Smrg    inputproto_dep,
5291b5d61b8Smrg    kbproto_dep,
5301b5d61b8Smrg    fontsproto_dep,
5311b5d61b8Smrg    fixesproto_dep,
5321b5d61b8Smrg    damageproto_dep,
5331b5d61b8Smrg    xcmiscproto_dep,
5341b5d61b8Smrg    bigreqsproto_dep,
5351b5d61b8Smrg    xtrans_dep,
536ed6184dfSmrg    libsystemd_daemon_dep,
5371b5d61b8Smrg
5381b5d61b8Smrg    videoproto_dep,
5391b5d61b8Smrg    compositeproto_dep,
5401b5d61b8Smrg    recordproto_dep,
5411b5d61b8Smrg    scrnsaverproto_dep,
5421b5d61b8Smrg    resourceproto_dep,
5431b5d61b8Smrg    xf86driproto_dep,
5441b5d61b8Smrg    dri2proto_dep,
5451b5d61b8Smrg    dri3proto_dep,
5461b5d61b8Smrg    xineramaproto_dep,
5471b5d61b8Smrg    xf86bigfontproto_dep,
5481b5d61b8Smrg    xf86dgaproto_dep,
5491b5d61b8Smrg    xf86vidmodeproto_dep,
5501b5d61b8Smrg    applewmproto_dep,
5511b5d61b8Smrg
5521b5d61b8Smrg    pixman_dep,
5531b5d61b8Smrg    libbsd_dep,
5541b5d61b8Smrg    xkbfile_dep,
5551b5d61b8Smrg    xfont2_dep,
5561b5d61b8Smrg    xdmcp_dep,
5571b5d61b8Smrg]
5581b5d61b8Smrg
5591b5d61b8Smrginc = include_directories(
5601b5d61b8Smrg    'Xext',
5611b5d61b8Smrg    'Xi',
5621b5d61b8Smrg    'composite',
5631b5d61b8Smrg    'damageext',
5641b5d61b8Smrg    'exa',
5651b5d61b8Smrg    'fb',
5661b5d61b8Smrg    'glamor',
5671b5d61b8Smrg    'mi',
5681b5d61b8Smrg    'miext/damage',
5691b5d61b8Smrg    'miext/shadow',
5701b5d61b8Smrg    'miext/sync',
5711b5d61b8Smrg    'dbe',
5721b5d61b8Smrg    'dri3',
5731b5d61b8Smrg    'include',
5741b5d61b8Smrg    'present',
5751b5d61b8Smrg    'randr',
5761b5d61b8Smrg    'render',
5771b5d61b8Smrg    'xfixes',
5781b5d61b8Smrg)
5791b5d61b8Smrg
580ed6184dfSmrgbuild_xselinux = false
581ed6184dfSmrgif get_option('xselinux') != 'false'
582ed6184dfSmrg    dep_selinux = dependency('libselinux', version: libselinux_req,
583ed6184dfSmrg			     required: get_option('xselinux') == 'true')
584ed6184dfSmrg    dep_audit = dependency('audit', required: get_option('xselinux') == 'true')
585ed6184dfSmrg    if get_option('xselinux') == 'true'
586ed6184dfSmrg        build_xselinux = true
587ed6184dfSmrg    else
588ed6184dfSmrg        build_xselinux = dep_selinux.found() and dep_audit.found()
589ed6184dfSmrg    endif
590ed6184dfSmrg
591ed6184dfSmrg    if build_xselinux
592ed6184dfSmrg        common_dep += dep_selinux
593ed6184dfSmrg        common_dep += dep_audit
594ed6184dfSmrg    endif
595ed6184dfSmrgendif
596ed6184dfSmrg
597ed6184dfSmrgsocket_dep = []
598ed6184dfSmrgif host_machine.system() == 'windows'
599ed6184dfSmrg    socket_dep = meson.get_compiler('c').find_library('ws2_32')
600ed6184dfSmrg    common_dep += socket_dep
601ed6184dfSmrgendif
602ed6184dfSmrg
603ed6184dfSmrgif get_option('libunwind')
604ed6184dfSmrg    common_dep += dependency('libunwind', required: true)
605ed6184dfSmrgendif
606ed6184dfSmrg
6071b5d61b8Smrgglx_inc = include_directories('glx')
6081b5d61b8Smrg
609ed6184dfSmrgtop_dir_inc = include_directories('.')
6101b5d61b8Smrg
611ed6184dfSmrgserverconfigdir = join_paths(get_option('prefix'), get_option('libdir'), 'xorg')
6121b5d61b8Smrg
6131b5d61b8Smrgmanpage_config = configuration_data()
6141b5d61b8Smrgmanpage_config.set('vendorversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
6151b5d61b8Smrgmanpage_config.set('xorgversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
6161b5d61b8Smrgmanpage_config.set('xservername', 'Xorg')
6171b5d61b8Smrgmanpage_config.set('xconfigfile', 'xorg.conf')
6181b5d61b8Smrgmanpage_config.set('projectroot', get_option('prefix'))
6191b5d61b8Smrgmanpage_config.set('apploaddir', '$(appdefaultdir)')
6201b5d61b8Smrgmanpage_config.set('appmansuffix', '1')
6211b5d61b8Smrgmanpage_config.set('drivermansuffix', '4')
6221b5d61b8Smrgmanpage_config.set('adminmansuffix', '8')
6231b5d61b8Smrgmanpage_config.set('libmansuffix', '3')
6241b5d61b8Smrgmanpage_config.set('miscmansuffix', '7')
6251b5d61b8Smrgmanpage_config.set('filemansuffix', '5')
6261b5d61b8Smrgmanpage_config.set('logdir', log_dir)
6271b5d61b8Smrgmanpage_config.set('datadir', join_paths(get_option('prefix'), get_option('datadir')))
6281b5d61b8Smrgmanpage_config.set('mandir', join_paths(get_option('prefix'), get_option('mandir')))
6291b5d61b8Smrgmanpage_config.set('sysconfdir', join_paths(get_option('prefix'), get_option('sysconfdir')))
6301b5d61b8Smrgmanpage_config.set('xconfigdir', 'xorg.conf.d')
6311b5d61b8Smrgmanpage_config.set('xkbdir', xkb_dir)
6321b5d61b8Smrgmanpage_config.set('XKB_DFLT_RULES', get_option('xkb_default_rules'))
6331b5d61b8Smrgmanpage_config.set('XKB_DFLT_MODEL', get_option('xkb_default_model'))
6341b5d61b8Smrgmanpage_config.set('XKB_DFLT_LAYOUT', get_option('xkb_default_layout'))
6351b5d61b8Smrgmanpage_config.set('XKB_DFLT_VARIANT', get_option('xkb_default_variant'))
6361b5d61b8Smrgmanpage_config.set('XKB_DFLT_OPTIONS', get_option('xkb_default_options'))
6371b5d61b8Smrgmanpage_config.set('bundle_id_prefix', '...')
6381b5d61b8Smrgmanpage_config.set('modulepath', module_dir)
6391b5d61b8Smrg# wtf doesn't this work
6401b5d61b8Smrg# manpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), libexecdir))
6411b5d61b8Smrgmanpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), 'libexec'))
6421b5d61b8Smrgmanpage_config.set('default_font_path', default_font_path)
6431b5d61b8Smrg
644ed6184dfSmrgrequire_docs = get_option('docs') == 'true'
645ed6184dfSmrgrequire_devel_docs = get_option('devel-docs') == 'true'
646ed6184dfSmrgrequire_docs_pdf = (require_docs or require_devel_docs) and get_option('docs-pdf') == 'true'
647ed6184dfSmrg
648ed6184dfSmrgsgml_doctools_dep = dependency('xorg-sgml-doctools',
649ed6184dfSmrg                               required: require_docs or require_devel_docs)
650ed6184dfSmrgxmlto = find_program('xmlto', required: require_docs or require_devel_docs)
651ed6184dfSmrgxsltproc = find_program('xsltproc', required: require_docs or require_devel_docs)
652ed6184dfSmrgfop = find_program('fop', required: require_docs_pdf)
653ed6184dfSmrg
654ed6184dfSmrgbuild_docs = (get_option('docs') != 'false' and
655ed6184dfSmrg    sgml_doctools_dep.found() and
656ed6184dfSmrg    xmlto.found())
657ed6184dfSmrg
658ed6184dfSmrgbuild_docs_devel = (get_option('devel-docs') != 'false' and
659ed6184dfSmrg    sgml_doctools_dep.found() and
660ed6184dfSmrg    xmlto.found())
661ed6184dfSmrg
662ed6184dfSmrgbuild_docs_pdf = (get_option('docs-pdf') != 'false' and
663ed6184dfSmrg    (build_docs or build_docs_devel) and
664ed6184dfSmrg    fop.found())
665ed6184dfSmrg
666ed6184dfSmrgif build_docs or build_docs_devel
667ed6184dfSmrg    doc_sgml_path = sgml_doctools_dep.get_pkgconfig_variable('sgmlrootdir')
668ed6184dfSmrg    doc_stylesheet_srcdir = join_paths(doc_sgml_path, 'X11')
669ed6184dfSmrg
670ed6184dfSmrg    # once we bump meson dependency to 0.56.0 we can use
671ed6184dfSmrg    # meson.project_build_root() instead of meson.build_root()
672ed6184dfSmrg
673ed6184dfSmrg    # Meson does not and will not support functions so we are copy-pasting
674ed6184dfSmrg    # documentation build code around which is unfortunate
675ed6184dfSmrg    # See https://mesonbuild.com/FAQ.html#why-doesnt-meson-have-user-defined-functionsmacros
676ed6184dfSmrg
677ed6184dfSmrg    docs_xmlto_search_flags = [
678ed6184dfSmrg        '--searchpath', doc_stylesheet_srcdir,
679ed6184dfSmrg        '--searchpath', meson.build_root(),
680ed6184dfSmrg    ]
681ed6184dfSmrg
682ed6184dfSmrg    docs_xslt_search_flags = [
683ed6184dfSmrg        '--path', doc_stylesheet_srcdir,
684ed6184dfSmrg        '--path', meson.build_root(),
685ed6184dfSmrg    ]
686ed6184dfSmrgendif
687ed6184dfSmrg
6881b5d61b8Smrg# Include must come first, as it sets up dix-config.h
6891b5d61b8Smrgsubdir('include')
6901b5d61b8Smrg
6911b5d61b8Smrg# X server core
6921b5d61b8Smrgsubdir('config')
6931b5d61b8Smrgsubdir('dix')
6941b5d61b8Smrgsubdir('dri3')
6951b5d61b8Smrgsubdir('glx')
6961b5d61b8Smrgsubdir('fb')
6971b5d61b8Smrgsubdir('mi')
6981b5d61b8Smrgsubdir('os')
6991b5d61b8Smrg# X extensions
700a1e1cf94Smrgsubdir('composite')
7011b5d61b8Smrgsubdir('damageext')
7021b5d61b8Smrgsubdir('dbe')
7031b5d61b8Smrgsubdir('miext/damage')
7041b5d61b8Smrgsubdir('miext/shadow')
7051b5d61b8Smrgsubdir('miext/sync')
706ed6184dfSmrgif build_rootless
707ed6184dfSmrg    subdir('miext/rootless')
708ed6184dfSmrgendif
7091b5d61b8Smrgsubdir('present')
7101b5d61b8Smrgif build_xwin or build_xquartz
7111b5d61b8Smrg    subdir('pseudoramiX')
7121b5d61b8Smrgendif
7131b5d61b8Smrgsubdir('randr')
7141b5d61b8Smrgsubdir('record')
7151b5d61b8Smrgsubdir('render')
7161b5d61b8Smrgsubdir('xfixes')
7171b5d61b8Smrgsubdir('xkb')
7181b5d61b8Smrgsubdir('Xext')
7191b5d61b8Smrgsubdir('Xi')
7201b5d61b8Smrg# other
7211b5d61b8Smrgif build_glamor
7221b5d61b8Smrg    subdir('glamor')
7231b5d61b8Smrgendif
7241b5d61b8Smrgif build_xorg or get_option('xephyr')
7251b5d61b8Smrg    subdir('exa')
7261b5d61b8Smrgendif
727ed6184dfSmrgsubdir('doc')
7281b5d61b8Smrg
7291b5d61b8Smrg# Common static libraries of all X servers
7301b5d61b8Smrglibxserver = [
7311b5d61b8Smrg    libxserver_mi,
7321b5d61b8Smrg    libxserver_dix,
7331b5d61b8Smrg
734a1e1cf94Smrg    libxserver_composite,
7351b5d61b8Smrg    libxserver_damageext,
7361b5d61b8Smrg    libxserver_dbe,
7371b5d61b8Smrg    libxserver_randr,
7381b5d61b8Smrg    libxserver_miext_damage,
7391b5d61b8Smrg    libxserver_render,
7401b5d61b8Smrg    libxserver_present,
7411b5d61b8Smrg    libxserver_xext,
7421b5d61b8Smrg    libxserver_miext_sync,
7431b5d61b8Smrg    libxserver_xfixes,
7441b5d61b8Smrg    libxserver_xi,
7451b5d61b8Smrg    libxserver_xkb,
7461b5d61b8Smrg    libxserver_record,
7471b5d61b8Smrg
7481b5d61b8Smrg    libxserver_os,
7491b5d61b8Smrg]
7501b5d61b8Smrg
7511b5d61b8Smrglibxserver += libxserver_dri3
7521b5d61b8Smrg
7531b5d61b8Smrgsubdir('hw')
754ed6184dfSmrg
755ed6184dfSmrgif host_machine.system() != 'windows'
756ed6184dfSmrg    subdir('test')
757ed6184dfSmrgendif
7581b5d61b8Smrg
7591b5d61b8Smrginstall_man(configure_file(
7601b5d61b8Smrg    input: 'man/Xserver.man',
7611b5d61b8Smrg    output: 'Xserver.1',
7621b5d61b8Smrg    configuration: manpage_config,
7631b5d61b8Smrg))
7641b5d61b8Smrg
7651b5d61b8Smrgif build_xorg
7661b5d61b8Smrg    sdkconfig = configuration_data()
7671b5d61b8Smrg    awk = find_program('awk')
7681b5d61b8Smrg
7691b5d61b8Smrg    sdkconfig.set('prefix', get_option('prefix'))
7701b5d61b8Smrg    sdkconfig.set('exec_prefix', '${prefix}')
7711b5d61b8Smrg    sdkconfig.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
7721b5d61b8Smrg    sdkconfig.set('includedir', join_paths('${prefix}', get_option('includedir')))
7731b5d61b8Smrg    sdkconfig.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
7741b5d61b8Smrg    sdkconfig.set('moduledir', join_paths('${exec_prefix}', module_dir))
7751b5d61b8Smrg    sdkconfig.set('sdkdir', join_paths('${prefix}', get_option('includedir'), 'xorg'))
7761b5d61b8Smrg    sdkconfig.set('sysconfigdir', join_paths('${datarootdir}', 'X11/xorg.conf.d'))
7771b5d61b8Smrg
7781b5d61b8Smrg    sdkconfig.set('abi_ansic',
7791b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
7801b5d61b8Smrg                    '/^#define ABI_ANSIC.*SET/ { printf "%d.%d", $2, $3 }',
7811b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
7821b5d61b8Smrg        ).stdout()
7831b5d61b8Smrg    )
7841b5d61b8Smrg    sdkconfig.set('abi_videodrv',
7851b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
7861b5d61b8Smrg                    '/^#define ABI_VIDEODRV.*SET/ { printf "%d.%d", $2, $3 }',
7871b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
7881b5d61b8Smrg        ).stdout()
7891b5d61b8Smrg    )
7901b5d61b8Smrg    sdkconfig.set('abi_xinput',
7911b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
7921b5d61b8Smrg                    '/^#define ABI_XINPUT.*SET/ { printf "%d.%d", $2, $3 }',
7931b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
7941b5d61b8Smrg        ).stdout()
7951b5d61b8Smrg    )
7961b5d61b8Smrg    sdkconfig.set('abi_extension',
7971b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
7981b5d61b8Smrg                    '/^#define ABI_EXTENSION.*SET/ { printf "%d.%d", $2, $3 }',
7991b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
8001b5d61b8Smrg        ).stdout()
8011b5d61b8Smrg    )
8021b5d61b8Smrg
8031b5d61b8Smrg    sdk_required_modules = [
8041b5d61b8Smrg      'pixman-1 >= 0.27.2',
8051b5d61b8Smrg    ]
8061b5d61b8Smrg
8071b5d61b8Smrg    # XXX this isn't trying very hard, but hard enough.
8081b5d61b8Smrg    sdkconfig.set('PACKAGE_VERSION', meson.project_version())
8091b5d61b8Smrg    sdkconfig.set('SDK_REQUIRED_MODULES', ' '.join(sdk_required_modules))
8101b5d61b8Smrg    sdkconfig.set('symbol_visibility', '-fvisibility=hidden')
8111b5d61b8Smrg    sdkconfig.set('XORG_DRIVER_LIBS', '')
8121b5d61b8Smrg
8131b5d61b8Smrg    configure_file(
8141b5d61b8Smrg        input: 'xorg-server.pc.in',
8151b5d61b8Smrg        output: 'xorg-server.pc',
8161b5d61b8Smrg        configuration: sdkconfig,
8171b5d61b8Smrg        install_dir: join_paths(get_option('prefix'),
8181b5d61b8Smrg                                get_option('libdir'),
8191b5d61b8Smrg                                'pkgconfig'),
8201b5d61b8Smrg    )
821ed6184dfSmrg
822ed6184dfSmrg    install_data('xorg-server.m4',
823ed6184dfSmrg                 install_dir: join_paths(get_option('datadir'), 'aclocal'))
8241b5d61b8Smrgendif
8251b5d61b8Smrg
826ed6184dfSmrgif build_docs or build_docs_devel
827ed6184dfSmrg    docxmlconfig = configuration_data()
828ed6184dfSmrg    docxmlconfig.set('PACKAGE_VERSION', meson.project_version())
829ed6184dfSmrg    docxmlconfig.set('RELEASE_DATE', release_date)
830ed6184dfSmrg    configure_file(
831ed6184dfSmrg        input: 'xserver.ent.in',
832ed6184dfSmrg        output: 'xserver.ent',
833ed6184dfSmrg        configuration: docxmlconfig
834ed6184dfSmrg    )
835ed6184dfSmrgendif
836