meson.build revision ed6184df
11b5d61b8Smrgproject('xserver', 'c',
21b5d61b8Smrg        default_options: [
31b5d61b8Smrg            'buildtype=debugoptimized',
41b5d61b8Smrg            'c_std=gnu99',
51b5d61b8Smrg        ],
6ed6184dfSmrg        version: '21.1.3',
7ed6184dfSmrg        meson_version: '>= 0.47.0',
81b5d61b8Smrg)
9ed6184dfSmrgrelease_date = '2022-01-02'
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')
991b5d61b8Smrglibbsd_dep = dependency('libbsd', 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
1871b5d61b8Smrgif (host_machine.system() != 'darwin' and
1881b5d61b8Smrg    host_machine.system() != 'windows')
1891b5d61b8Smrg    if get_option('xorg') == 'auto'
1901b5d61b8Smrg        build_xorg = (host_machine.system() != 'darwin' and
1911b5d61b8Smrg                      host_machine.system() != 'windows')
1921b5d61b8Smrg    else
1931b5d61b8Smrg        build_xorg = get_option('xorg') == 'true'
1941b5d61b8Smrg    endif
1951b5d61b8Smrgendif
1961b5d61b8Smrgxorgsdkdir = join_paths(get_option('prefix'), get_option('includedir'), 'xorg')
197ed6184dfSmrglibxcvt_dep = dependency('libxcvt', required: build_xorg)
1981b5d61b8Smrg
1991b5d61b8Smrgbuild_xnest = false
2001b5d61b8Smrgif (host_machine.system() != 'darwin' and
2011b5d61b8Smrg    host_machine.system() != 'windows')
2021b5d61b8Smrg    if get_option('xnest') != 'false'
2031b5d61b8Smrg        xnest_required = get_option('xnest') == 'true'
2041b5d61b8Smrg
2051b5d61b8Smrg        xnest_dep = [
206ed6184dfSmrg            dependency('xext', version: xext_req, required: xnest_required),
2071b5d61b8Smrg            dependency('x11', required: xnest_required),
2081b5d61b8Smrg            dependency('xau', required: xnest_required),
2091b5d61b8Smrg        ]
2101b5d61b8Smrg
2111b5d61b8Smrg        build_xnest = true
2121b5d61b8Smrg        # check for all the deps being found, to handle 'auto' mode.
2131b5d61b8Smrg        foreach d: xnest_dep
2141b5d61b8Smrg            if not d.found()
2151b5d61b8Smrg                build_xnest = false
2161b5d61b8Smrg            endif
2171b5d61b8Smrg        endforeach
2181b5d61b8Smrg    endif
2191b5d61b8Smrgendif
2201b5d61b8Smrg
2211b5d61b8Smrgbuild_xwin = false
2221b5d61b8Smrgif get_option('xwin') == 'auto'
2231b5d61b8Smrg    if (host_machine.system() == 'cygwin' or
2241b5d61b8Smrg        host_machine.system() == 'windows')
2251b5d61b8Smrg            build_xwin = true
2261b5d61b8Smrg    endif
2271b5d61b8Smrgelse
2281b5d61b8Smrg    build_xwin = get_option('xwin') == 'true'
2291b5d61b8Smrgendif
2301b5d61b8Smrg
2311b5d61b8Smrgbuild_xquartz = false
232ed6184dfSmrgif get_option('xquartz') == 'auto'
233ed6184dfSmrg    if host_machine.system() == 'darwin'
234ed6184dfSmrg            build_xquartz = true
235ed6184dfSmrg    endif
236ed6184dfSmrgelse
237ed6184dfSmrg    build_xquartz = get_option('xquartz') == 'true'
238ed6184dfSmrgendif
239ed6184dfSmrg
240ed6184dfSmrgbuild_rootless = false
241ed6184dfSmrgif build_xquartz
242ed6184dfSmrg    build_rootless = true
243ed6184dfSmrgendif
2441b5d61b8Smrg
2451b5d61b8Smrgif get_option('ipv6') == 'auto'
2461b5d61b8Smrg    build_ipv6 = cc.has_function('getaddrinfo')
2471b5d61b8Smrgelse
2481b5d61b8Smrg    build_ipv6 = get_option('ipv6') == 'true'
2491b5d61b8Smrgendif
2501b5d61b8Smrg
2511b5d61b8Smrgint10 = get_option('int10')
2521b5d61b8Smrgif int10 == 'auto'
2531b5d61b8Smrg    int10 = 'x86emu'
2541b5d61b8Smrg    if host_machine.cpu() == 'powerpc' and host_machine.system() == 'freebsd'
2551b5d61b8Smrg        int10 = 'stub'
2561b5d61b8Smrg    endif
2571b5d61b8Smrg    if host_machine.cpu() == 'arm'
2581b5d61b8Smrg        int10 = 'stub'
2591b5d61b8Smrg    endif
2601b5d61b8Smrgendif
2611b5d61b8Smrg
2621b5d61b8Smrghal_dep = []
2631b5d61b8Smrgif hal_option == 'auto'
2641b5d61b8Smrg    if not build_udev
2651b5d61b8Smrg        hal_dep = dependency('hal', required: false)
2661b5d61b8Smrg        build_hal = hal_dep.found()
2671b5d61b8Smrg    else
2681b5d61b8Smrg        build_hal = false
2691b5d61b8Smrg    endif
2701b5d61b8Smrgelse
2711b5d61b8Smrg    build_hal = hal_option == 'true'
2721b5d61b8Smrg    if build_hal
2731b5d61b8Smrg        hal_dep = dependency('hal')
2741b5d61b8Smrg    endif
2751b5d61b8Smrgendif
2761b5d61b8Smrg
2771b5d61b8Smrgif build_udev and build_hal
2781b5d61b8Smrg    error('Hotplugging through both libudev and hal not allowed')
2791b5d61b8Smrgendif
2801b5d61b8Smrg
2811b5d61b8Smrgbuild_dbus = build_hal or build_systemd_logind
2821b5d61b8Smrg
2831b5d61b8Smrgudev_dep = dependency('', required:false)
284ed6184dfSmrgif build_udev or build_udev_kms
2851b5d61b8Smrg    udev_dep = dependency('libudev', version: '>= 143')
2861b5d61b8Smrgendif
2871b5d61b8Smrg
2881b5d61b8Smrglog_dir = get_option('log_dir')
2891b5d61b8Smrgif log_dir == ''
2901b5d61b8Smrg    log_dir = join_paths(get_option('prefix'), get_option('localstatedir'), 'log')
2911b5d61b8Smrgendif
2921b5d61b8Smrg
2931b5d61b8Smrgmodule_dir = join_paths(get_option('libdir'), get_option('module_dir'))
2941b5d61b8Smrg
2951b5d61b8Smrgif glamor_option == 'auto'
296ed6184dfSmrg    build_glamor = build_xorg
2971b5d61b8Smrgelse
298ed6184dfSmrg    build_glamor = glamor_option == 'true'
2991b5d61b8Smrgendif
3001b5d61b8Smrg
3011b5d61b8Smrggbm_dep = dependency('', required: false)
3021b5d61b8Smrgepoxy_dep = dependency('', required: false)
3031b5d61b8Smrgif build_glamor
304ed6184dfSmrg    gbm_dep = dependency('gbm', version: gbm_req, required: false)
3051b5d61b8Smrg    epoxy_dep = dependency('epoxy', required: false)
3061b5d61b8Smrgendif
3071b5d61b8Smrg
308ed6184dfSmrg# Lots of sha1 options, because Linux is about choice :)
309ed6184dfSmrg
310ed6184dfSmrg# The idea behind the ordering here is that we should first prefer system
311ed6184dfSmrg# builtin providers, and then smaller implementations of over larger ones.
312ed6184dfSmrgtest_sha1 = [
313ed6184dfSmrg    'libc',          # libmd API is in libc on some BSDs
314ed6184dfSmrg    'CommonCrypto',  # darwin API
315ed6184dfSmrg    'CryptoAPI',     # windows API
316ed6184dfSmrg    'libmd',         # other BSDs & Solaris
317ed6184dfSmrg    '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"
318ed6184dfSmrg    'libnettle',
319ed6184dfSmrg    'libgcrypt',     # in debian base system
320ed6184dfSmrg    'libcrypto',
321ed6184dfSmrg]
322ed6184dfSmrg
323ed6184dfSmrgif get_option('sha1') != 'auto'
324ed6184dfSmrg    test_sha1 = [get_option('sha1')]
325ed6184dfSmrgendif
326ed6184dfSmrg
327ed6184dfSmrgsha1_found = false
328ed6184dfSmrgforeach t : test_sha1
329ed6184dfSmrg    if t == 'libc'
330ed6184dfSmrg        if cc.has_function('SHA1Init')
331ed6184dfSmrg            sha1_found = true
332ed6184dfSmrg            sha1_dep = dependency('', required: false)
333ed6184dfSmrg        endif
334ed6184dfSmrg    elif t == 'CommonCrypto'
335ed6184dfSmrg        if cc.has_function('CC_SHA1_Init')
336ed6184dfSmrg            sha1_found = true
337ed6184dfSmrg            sha1_dep = dependency('', required: false)
338ed6184dfSmrg        endif
339ed6184dfSmrg    elif t == 'CryptoAPI'
340ed6184dfSmrg        if cc.has_header('wincrypt.h')
341ed6184dfSmrg            sha1_found = true
342ed6184dfSmrg            sha1_dep = dependency('', required: false)
343ed6184dfSmrg        endif
344ed6184dfSmrg    elif t == 'libmd'
345ed6184dfSmrg        md_dep = cc.find_library('md', required: false)
346ed6184dfSmrg        if md_dep.found()
347ed6184dfSmrg            sha1_found = true
348ed6184dfSmrg            sha1_dep = md_dep
349ed6184dfSmrg        endif
350ed6184dfSmrg    elif t == 'libsha1'
351ed6184dfSmrg        libsha1_dep = dependency('libsha1', required: false)
352ed6184dfSmrg        if libsha1_dep.found()
353ed6184dfSmrg            sha1_found = true
354ed6184dfSmrg            sha1_dep = libsha1_dep
355ed6184dfSmrg        endif
356ed6184dfSmrg    elif t == 'libnettle'
357ed6184dfSmrg        nettle_dep = dependency('nettle', required: false)
358ed6184dfSmrg        if nettle_dep.found()
359ed6184dfSmrg            sha1_found = true
360ed6184dfSmrg            sha1_dep = nettle_dep
361ed6184dfSmrg        endif
362ed6184dfSmrg    elif t == 'libgcrypt'
363ed6184dfSmrg        gcrypt_dep = dependency('libgcrypt', required: false)
364ed6184dfSmrg        if gcrypt_dep.found()
365ed6184dfSmrg            sha1_found = true
366ed6184dfSmrg            sha1_dep = gcrypt_dep
367ed6184dfSmrg        endif
368ed6184dfSmrg    elif t == 'libcrypto'
369ed6184dfSmrg        # we don't need all of OpenSSL, just libcrypto
370ed6184dfSmrg        libcrypto_dep = cc.find_library('crypto', required: false)
371ed6184dfSmrg        openssl_dep = dependency('openssl', required: false)
372ed6184dfSmrg        if libcrypto_dep.found() or openssl_dep.found()
373ed6184dfSmrg            sha1_found = true
374ed6184dfSmrg            if libcrypto_dep.found()
375ed6184dfSmrg               sha1_dep = libcrypto_dep
376ed6184dfSmrg            else
377ed6184dfSmrg               sha1_dep = openssl_dep
378ed6184dfSmrg            endif
3791b5d61b8Smrg        endif
3801b5d61b8Smrg    endif
381ed6184dfSmrg
382ed6184dfSmrg    if sha1_found
383ed6184dfSmrg        sha1 = t
384ed6184dfSmrg        break
385ed6184dfSmrg    endif
386ed6184dfSmrgendforeach
387ed6184dfSmrg
388ed6184dfSmrgif sha1_found
389ed6184dfSmrg    message('Using @0@ SHA1 functions'.format(sha1))
3901b5d61b8Smrgelse
391ed6184dfSmrg    if get_option('sha1') != 'auto'
392ed6184dfSmrg        error('@0@ SHA1 requested, but not found'.format(get_option('sha1')))
393ed6184dfSmrg    else
394ed6184dfSmrg        error('No suitable SHA1 implementation found')
395ed6184dfSmrg    endif
3961b5d61b8Smrgendif
3971b5d61b8Smrg
3981b5d61b8Smrgxdmcp_dep = dependency('', required : false)
3991b5d61b8Smrgif get_option('xdmcp')
4001b5d61b8Smrg    xdmcp_dep = dependency('xdmcp')
4011b5d61b8Smrgendif
4021b5d61b8Smrg
4031b5d61b8Smrghas_xdm_auth = get_option('xdm-auth-1')
4041b5d61b8Smrg
4051b5d61b8Smrgif not xdmcp_dep.found()
4061b5d61b8Smrg  has_xdm_auth = false
4071b5d61b8Smrgendif
4081b5d61b8Smrg
4091b5d61b8Smrgbuild_glx = get_option('glx')
4101b5d61b8Smrgif build_glx
4111b5d61b8Smrg    build_hashtable = true
4121b5d61b8Smrgendif
4131b5d61b8Smrg
414ed6184dfSmrglibdrm_dep = dependency('libdrm', version: libdrm_req, required: false)
4151b5d61b8Smrg
4161b5d61b8Smrgif get_option('dri1') == 'auto'
4171b5d61b8Smrg    build_dri1 = xf86driproto_dep.found() and libdrm_dep.found()
4181b5d61b8Smrgelse
4191b5d61b8Smrg    build_dri1 = get_option('dri1') == 'true'
4201b5d61b8Smrgendif
4211b5d61b8Smrg
4221b5d61b8Smrgif get_option('dri2') == 'auto'
4231b5d61b8Smrg    build_dri2 = dri2proto_dep.found() and libdrm_dep.found()
4241b5d61b8Smrgelse
4251b5d61b8Smrg    build_dri2 = get_option('dri2') == 'true'
4261b5d61b8Smrgendif
4271b5d61b8Smrg
4281b5d61b8Smrgif get_option('dri3') == 'auto'
4291b5d61b8Smrg    build_dri3 = dri3proto_dep.found() and xshmfence_dep.found() and libdrm_dep.found()
4301b5d61b8Smrgelse
4311b5d61b8Smrg    build_dri3 = get_option('dri3') == 'true'
4321b5d61b8Smrg    if build_dri3
4331b5d61b8Smrg       if not xshmfence_dep.found()
4341b5d61b8Smrg           error('DRI3 requested, but xshmfence not found')
4351b5d61b8Smrg       endif
4361b5d61b8Smrg    endif
4371b5d61b8Smrgendif
4381b5d61b8Smrg
439ed6184dfSmrglibdrm_required = (build_dri1 or build_dri2 or build_dri3) and get_option('drm') == true
4401b5d61b8Smrgif not libdrm_dep.found() and libdrm_required
4411b5d61b8Smrg    error('DRI requested, but LIBDRM not found')
4421b5d61b8Smrgendif
4431b5d61b8Smrg
444c8548ba8Smrgbuild_modesetting = libdrm_dep.found() and dri2proto_dep.found()
4451b5d61b8Smrg
4461b5d61b8Smrgbuild_vgahw = false
4471b5d61b8Smrgif get_option('vgahw') == 'auto'
4481b5d61b8Smrg    if (host_machine.system() != 'darwin' and
4491b5d61b8Smrg        host_machine.system() != 'windows' and
4501b5d61b8Smrg        host_machine.system() != 'cygwin')
4511b5d61b8Smrg        build_vgahw = true
4521b5d61b8Smrg    endif
4531b5d61b8Smrgelse
4541b5d61b8Smrg    build_vgahw = get_option('vgahw') == 'true'
4551b5d61b8Smrgendif
4561b5d61b8Smrg
4571b5d61b8Smrgbuild_dpms = get_option('dpms')
4581b5d61b8Smrgif build_xquartz
4591b5d61b8Smrg    build_dpms = false
4601b5d61b8Smrgendif
4611b5d61b8Smrg
4621b5d61b8Smrgbuild_xf86bigfont = get_option('xf86bigfont')
4631b5d61b8Smrgbuild_screensaver = get_option('screensaver')
4641b5d61b8Smrgbuild_res = get_option('xres')
4651b5d61b8Smrgif build_res
4661b5d61b8Smrg    build_hashtable = true
4671b5d61b8Smrgendif
4681b5d61b8Smrg
4691b5d61b8Smrgbuild_xace = get_option('xace')
4701b5d61b8Smrgbuild_xinerama = get_option('xinerama')
4711b5d61b8Smrg
4721b5d61b8Smrgbuild_xsecurity = get_option('xcsecurity')
4731b5d61b8Smrgif build_xsecurity
4741b5d61b8Smrg    if not build_xace
4751b5d61b8Smrg        error('cannot build Security extension without X-ACE')
4761b5d61b8Smrg    endif
4771b5d61b8Smrgendif
4781b5d61b8Smrg
4791b5d61b8Smrgbuild_xv = get_option('xv')
4801b5d61b8Smrgbuild_xvmc = get_option('xvmc')
4811b5d61b8Smrgif not build_xv
4821b5d61b8Smrg    build_xvmc = false
4831b5d61b8Smrgendif
4841b5d61b8Smrg
4851b5d61b8Smrgbuild_dga = false
486ed6184dfSmrgxf86dgaproto_dep = dependency('', required: false)
4871b5d61b8Smrgif get_option('dga') == 'auto'
488ed6184dfSmrg    xf86dgaproto_dep = dependency('xf86dgaproto', version: xf86dgaproto_req, required: false)
4891b5d61b8Smrg    if xf86dgaproto_dep.found()
4901b5d61b8Smrg        build_dga = true
4911b5d61b8Smrg    endif
4921b5d61b8Smrgelif get_option('dga') == 'true'
493ed6184dfSmrg    xf86dgaproto_dep = dependency('xf86dgaproto', version: xf86dgaproto_req, required: true)
4941b5d61b8Smrg    build_dga = true
4951b5d61b8Smrgendif
4961b5d61b8Smrg
4971b5d61b8Smrgbuild_apm = false
4981b5d61b8Smrgif (get_option('linux_apm') == true and
4991b5d61b8Smrg   host_machine.system() == 'linux')
5001b5d61b8Smrg    if cc.has_header('linux/apm_bios.h')
5011b5d61b8Smrg        build_apm = true
5021b5d61b8Smrg    endif
5031b5d61b8Smrgendif
5041b5d61b8Smrg
5051b5d61b8Smrgbuild_acpi = false
5061b5d61b8Smrgif (get_option('linux_acpi') == true and
5071b5d61b8Smrg   host_machine.system() == 'linux')
5081b5d61b8Smrg    if (host_machine.cpu() == 'x86' or
5091b5d61b8Smrg       host_machine.cpu() == 'x86_64' or
5101b5d61b8Smrg       host_machine.cpu() == 'ia64')
5111b5d61b8Smrg        build_acpi = true
5121b5d61b8Smrg    endif
5131b5d61b8Smrgendif
5141b5d61b8Smrg
5151b5d61b8Smrgbuild_mitshm = false
5161b5d61b8Smrgif get_option('mitshm') == 'auto'
5171b5d61b8Smrg    build_mitshm = cc.has_header('sys/shm.h')
5181b5d61b8Smrgelif get_option('mitshm') == 'true'
5191b5d61b8Smrg    build_mitshm = true
5201b5d61b8Smrgendif
5211b5d61b8Smrg
5221b5d61b8Smrgm_dep = cc.find_library('m', required : false)
5231b5d61b8Smrgdl_dep = cc.find_library('dl', required : false)
5241b5d61b8Smrg
5251b5d61b8Smrgcommon_dep = [
5261b5d61b8Smrg    xproto_dep,
5271b5d61b8Smrg    randrproto_dep,
5281b5d61b8Smrg    renderproto_dep,
5291b5d61b8Smrg    xextproto_dep,
5301b5d61b8Smrg    inputproto_dep,
5311b5d61b8Smrg    kbproto_dep,
5321b5d61b8Smrg    fontsproto_dep,
5331b5d61b8Smrg    fixesproto_dep,
5341b5d61b8Smrg    damageproto_dep,
5351b5d61b8Smrg    xcmiscproto_dep,
5361b5d61b8Smrg    bigreqsproto_dep,
5371b5d61b8Smrg    xtrans_dep,
538ed6184dfSmrg    libsystemd_daemon_dep,
5391b5d61b8Smrg
5401b5d61b8Smrg    videoproto_dep,
5411b5d61b8Smrg    compositeproto_dep,
5421b5d61b8Smrg    recordproto_dep,
5431b5d61b8Smrg    scrnsaverproto_dep,
5441b5d61b8Smrg    resourceproto_dep,
5451b5d61b8Smrg    xf86driproto_dep,
5461b5d61b8Smrg    dri2proto_dep,
5471b5d61b8Smrg    dri3proto_dep,
5481b5d61b8Smrg    xineramaproto_dep,
5491b5d61b8Smrg    xf86bigfontproto_dep,
5501b5d61b8Smrg    xf86dgaproto_dep,
5511b5d61b8Smrg    xf86vidmodeproto_dep,
5521b5d61b8Smrg    applewmproto_dep,
5531b5d61b8Smrg
5541b5d61b8Smrg    pixman_dep,
5551b5d61b8Smrg    libbsd_dep,
5561b5d61b8Smrg    xkbfile_dep,
5571b5d61b8Smrg    xfont2_dep,
5581b5d61b8Smrg    xdmcp_dep,
5591b5d61b8Smrg]
5601b5d61b8Smrg
5611b5d61b8Smrginc = include_directories(
5621b5d61b8Smrg    'Xext',
5631b5d61b8Smrg    'Xi',
5641b5d61b8Smrg    'composite',
5651b5d61b8Smrg    'damageext',
5661b5d61b8Smrg    'exa',
5671b5d61b8Smrg    'fb',
5681b5d61b8Smrg    'glamor',
5691b5d61b8Smrg    'mi',
5701b5d61b8Smrg    'miext/damage',
5711b5d61b8Smrg    'miext/shadow',
5721b5d61b8Smrg    'miext/sync',
5731b5d61b8Smrg    'dbe',
5741b5d61b8Smrg    'dri3',
5751b5d61b8Smrg    'include',
5761b5d61b8Smrg    'present',
5771b5d61b8Smrg    'randr',
5781b5d61b8Smrg    'render',
5791b5d61b8Smrg    'xfixes',
5801b5d61b8Smrg)
5811b5d61b8Smrg
582ed6184dfSmrgbuild_xselinux = false
583ed6184dfSmrgif get_option('xselinux') != 'false'
584ed6184dfSmrg    dep_selinux = dependency('libselinux', version: libselinux_req,
585ed6184dfSmrg			     required: get_option('xselinux') == 'true')
586ed6184dfSmrg    dep_audit = dependency('audit', required: get_option('xselinux') == 'true')
587ed6184dfSmrg    if get_option('xselinux') == 'true'
588ed6184dfSmrg        build_xselinux = true
589ed6184dfSmrg    else
590ed6184dfSmrg        build_xselinux = dep_selinux.found() and dep_audit.found()
591ed6184dfSmrg    endif
592ed6184dfSmrg
593ed6184dfSmrg    if build_xselinux
594ed6184dfSmrg        common_dep += dep_selinux
595ed6184dfSmrg        common_dep += dep_audit
596ed6184dfSmrg    endif
597ed6184dfSmrgendif
598ed6184dfSmrg
599ed6184dfSmrgsocket_dep = []
600ed6184dfSmrgif host_machine.system() == 'windows'
601ed6184dfSmrg    socket_dep = meson.get_compiler('c').find_library('ws2_32')
602ed6184dfSmrg    common_dep += socket_dep
603ed6184dfSmrgendif
604ed6184dfSmrg
605ed6184dfSmrgif get_option('libunwind')
606ed6184dfSmrg    common_dep += dependency('libunwind', required: true)
607ed6184dfSmrgendif
608ed6184dfSmrg
6091b5d61b8Smrgglx_inc = include_directories('glx')
6101b5d61b8Smrg
611ed6184dfSmrgtop_dir_inc = include_directories('.')
6121b5d61b8Smrg
613ed6184dfSmrgserverconfigdir = join_paths(get_option('prefix'), get_option('libdir'), 'xorg')
6141b5d61b8Smrg
6151b5d61b8Smrgmanpage_config = configuration_data()
6161b5d61b8Smrgmanpage_config.set('vendorversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
6171b5d61b8Smrgmanpage_config.set('xorgversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
6181b5d61b8Smrgmanpage_config.set('xservername', 'Xorg')
6191b5d61b8Smrgmanpage_config.set('xconfigfile', 'xorg.conf')
6201b5d61b8Smrgmanpage_config.set('projectroot', get_option('prefix'))
6211b5d61b8Smrgmanpage_config.set('apploaddir', '$(appdefaultdir)')
6221b5d61b8Smrgmanpage_config.set('appmansuffix', '1')
6231b5d61b8Smrgmanpage_config.set('drivermansuffix', '4')
6241b5d61b8Smrgmanpage_config.set('adminmansuffix', '8')
6251b5d61b8Smrgmanpage_config.set('libmansuffix', '3')
6261b5d61b8Smrgmanpage_config.set('miscmansuffix', '7')
6271b5d61b8Smrgmanpage_config.set('filemansuffix', '5')
6281b5d61b8Smrgmanpage_config.set('logdir', log_dir)
6291b5d61b8Smrgmanpage_config.set('datadir', join_paths(get_option('prefix'), get_option('datadir')))
6301b5d61b8Smrgmanpage_config.set('mandir', join_paths(get_option('prefix'), get_option('mandir')))
6311b5d61b8Smrgmanpage_config.set('sysconfdir', join_paths(get_option('prefix'), get_option('sysconfdir')))
6321b5d61b8Smrgmanpage_config.set('xconfigdir', 'xorg.conf.d')
6331b5d61b8Smrgmanpage_config.set('xkbdir', xkb_dir)
6341b5d61b8Smrgmanpage_config.set('XKB_DFLT_RULES', get_option('xkb_default_rules'))
6351b5d61b8Smrgmanpage_config.set('XKB_DFLT_MODEL', get_option('xkb_default_model'))
6361b5d61b8Smrgmanpage_config.set('XKB_DFLT_LAYOUT', get_option('xkb_default_layout'))
6371b5d61b8Smrgmanpage_config.set('XKB_DFLT_VARIANT', get_option('xkb_default_variant'))
6381b5d61b8Smrgmanpage_config.set('XKB_DFLT_OPTIONS', get_option('xkb_default_options'))
6391b5d61b8Smrgmanpage_config.set('bundle_id_prefix', '...')
6401b5d61b8Smrgmanpage_config.set('modulepath', module_dir)
6411b5d61b8Smrg# wtf doesn't this work
6421b5d61b8Smrg# manpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), libexecdir))
6431b5d61b8Smrgmanpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), 'libexec'))
6441b5d61b8Smrgmanpage_config.set('default_font_path', default_font_path)
6451b5d61b8Smrg
646ed6184dfSmrgrequire_docs = get_option('docs') == 'true'
647ed6184dfSmrgrequire_devel_docs = get_option('devel-docs') == 'true'
648ed6184dfSmrgrequire_docs_pdf = (require_docs or require_devel_docs) and get_option('docs-pdf') == 'true'
649ed6184dfSmrg
650ed6184dfSmrgsgml_doctools_dep = dependency('xorg-sgml-doctools',
651ed6184dfSmrg                               required: require_docs or require_devel_docs)
652ed6184dfSmrgxmlto = find_program('xmlto', required: require_docs or require_devel_docs)
653ed6184dfSmrgxsltproc = find_program('xsltproc', required: require_docs or require_devel_docs)
654ed6184dfSmrgfop = find_program('fop', required: require_docs_pdf)
655ed6184dfSmrg
656ed6184dfSmrgbuild_docs = (get_option('docs') != 'false' and
657ed6184dfSmrg    sgml_doctools_dep.found() and
658ed6184dfSmrg    xmlto.found())
659ed6184dfSmrg
660ed6184dfSmrgbuild_docs_devel = (get_option('devel-docs') != 'false' and
661ed6184dfSmrg    sgml_doctools_dep.found() and
662ed6184dfSmrg    xmlto.found())
663ed6184dfSmrg
664ed6184dfSmrgbuild_docs_pdf = (get_option('docs-pdf') != 'false' and
665ed6184dfSmrg    (build_docs or build_docs_devel) and
666ed6184dfSmrg    fop.found())
667ed6184dfSmrg
668ed6184dfSmrgif build_docs or build_docs_devel
669ed6184dfSmrg    doc_sgml_path = sgml_doctools_dep.get_pkgconfig_variable('sgmlrootdir')
670ed6184dfSmrg    doc_stylesheet_srcdir = join_paths(doc_sgml_path, 'X11')
671ed6184dfSmrg
672ed6184dfSmrg    # once we bump meson dependency to 0.56.0 we can use
673ed6184dfSmrg    # meson.project_build_root() instead of meson.build_root()
674ed6184dfSmrg
675ed6184dfSmrg    # Meson does not and will not support functions so we are copy-pasting
676ed6184dfSmrg    # documentation build code around which is unfortunate
677ed6184dfSmrg    # See https://mesonbuild.com/FAQ.html#why-doesnt-meson-have-user-defined-functionsmacros
678ed6184dfSmrg
679ed6184dfSmrg    docs_xmlto_search_flags = [
680ed6184dfSmrg        '--searchpath', doc_stylesheet_srcdir,
681ed6184dfSmrg        '--searchpath', meson.build_root(),
682ed6184dfSmrg    ]
683ed6184dfSmrg
684ed6184dfSmrg    docs_xslt_search_flags = [
685ed6184dfSmrg        '--path', doc_stylesheet_srcdir,
686ed6184dfSmrg        '--path', meson.build_root(),
687ed6184dfSmrg    ]
688ed6184dfSmrgendif
689ed6184dfSmrg
6901b5d61b8Smrg# Include must come first, as it sets up dix-config.h
6911b5d61b8Smrgsubdir('include')
6921b5d61b8Smrg
6931b5d61b8Smrg# X server core
6941b5d61b8Smrgsubdir('config')
6951b5d61b8Smrgsubdir('dix')
6961b5d61b8Smrgsubdir('dri3')
6971b5d61b8Smrgsubdir('glx')
6981b5d61b8Smrgsubdir('fb')
6991b5d61b8Smrgsubdir('mi')
7001b5d61b8Smrgsubdir('os')
7011b5d61b8Smrg# X extensions
7021b5d61b8Smrgsubdir('composite')
7031b5d61b8Smrgsubdir('damageext')
7041b5d61b8Smrgsubdir('dbe')
7051b5d61b8Smrgsubdir('miext/damage')
7061b5d61b8Smrgsubdir('miext/shadow')
7071b5d61b8Smrgsubdir('miext/sync')
708ed6184dfSmrgif build_rootless
709ed6184dfSmrg    subdir('miext/rootless')
710ed6184dfSmrgendif
7111b5d61b8Smrgsubdir('present')
7121b5d61b8Smrgif build_xwin or build_xquartz
7131b5d61b8Smrg    subdir('pseudoramiX')
7141b5d61b8Smrgendif
7151b5d61b8Smrgsubdir('randr')
7161b5d61b8Smrgsubdir('record')
7171b5d61b8Smrgsubdir('render')
7181b5d61b8Smrgsubdir('xfixes')
7191b5d61b8Smrgsubdir('xkb')
7201b5d61b8Smrgsubdir('Xext')
7211b5d61b8Smrgsubdir('Xi')
7221b5d61b8Smrg# other
7231b5d61b8Smrgif build_glamor
7241b5d61b8Smrg    subdir('glamor')
7251b5d61b8Smrgendif
7261b5d61b8Smrgif build_xorg or get_option('xephyr')
7271b5d61b8Smrg    subdir('exa')
7281b5d61b8Smrgendif
729ed6184dfSmrgsubdir('doc')
7301b5d61b8Smrg
7311b5d61b8Smrg# Common static libraries of all X servers
7321b5d61b8Smrglibxserver = [
7331b5d61b8Smrg    libxserver_mi,
7341b5d61b8Smrg    libxserver_dix,
7351b5d61b8Smrg
7361b5d61b8Smrg    libxserver_composite,
7371b5d61b8Smrg    libxserver_damageext,
7381b5d61b8Smrg    libxserver_dbe,
7391b5d61b8Smrg    libxserver_randr,
7401b5d61b8Smrg    libxserver_miext_damage,
7411b5d61b8Smrg    libxserver_render,
7421b5d61b8Smrg    libxserver_present,
7431b5d61b8Smrg    libxserver_xext,
7441b5d61b8Smrg    libxserver_miext_sync,
7451b5d61b8Smrg    libxserver_xfixes,
7461b5d61b8Smrg    libxserver_xi,
7471b5d61b8Smrg    libxserver_xkb,
7481b5d61b8Smrg    libxserver_record,
7491b5d61b8Smrg
7501b5d61b8Smrg    libxserver_os,
7511b5d61b8Smrg]
7521b5d61b8Smrg
7531b5d61b8Smrglibxserver += libxserver_dri3
7541b5d61b8Smrg
7551b5d61b8Smrgsubdir('hw')
756ed6184dfSmrg
757ed6184dfSmrgif host_machine.system() != 'windows'
758ed6184dfSmrg    subdir('test')
759ed6184dfSmrgendif
7601b5d61b8Smrg
7611b5d61b8Smrginstall_man(configure_file(
7621b5d61b8Smrg    input: 'man/Xserver.man',
7631b5d61b8Smrg    output: 'Xserver.1',
7641b5d61b8Smrg    configuration: manpage_config,
7651b5d61b8Smrg))
7661b5d61b8Smrg
7671b5d61b8Smrgif build_xorg
7681b5d61b8Smrg    sdkconfig = configuration_data()
7691b5d61b8Smrg    awk = find_program('awk')
7701b5d61b8Smrg
7711b5d61b8Smrg    sdkconfig.set('prefix', get_option('prefix'))
7721b5d61b8Smrg    sdkconfig.set('exec_prefix', '${prefix}')
7731b5d61b8Smrg    sdkconfig.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
7741b5d61b8Smrg    sdkconfig.set('includedir', join_paths('${prefix}', get_option('includedir')))
7751b5d61b8Smrg    sdkconfig.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
7761b5d61b8Smrg    sdkconfig.set('moduledir', join_paths('${exec_prefix}', module_dir))
7771b5d61b8Smrg    sdkconfig.set('sdkdir', join_paths('${prefix}', get_option('includedir'), 'xorg'))
7781b5d61b8Smrg    sdkconfig.set('sysconfigdir', join_paths('${datarootdir}', 'X11/xorg.conf.d'))
7791b5d61b8Smrg
7801b5d61b8Smrg    sdkconfig.set('abi_ansic',
7811b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
7821b5d61b8Smrg                    '/^#define ABI_ANSIC.*SET/ { printf "%d.%d", $2, $3 }',
7831b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
7841b5d61b8Smrg        ).stdout()
7851b5d61b8Smrg    )
7861b5d61b8Smrg    sdkconfig.set('abi_videodrv',
7871b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
7881b5d61b8Smrg                    '/^#define ABI_VIDEODRV.*SET/ { printf "%d.%d", $2, $3 }',
7891b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
7901b5d61b8Smrg        ).stdout()
7911b5d61b8Smrg    )
7921b5d61b8Smrg    sdkconfig.set('abi_xinput',
7931b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
7941b5d61b8Smrg                    '/^#define ABI_XINPUT.*SET/ { printf "%d.%d", $2, $3 }',
7951b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
7961b5d61b8Smrg        ).stdout()
7971b5d61b8Smrg    )
7981b5d61b8Smrg    sdkconfig.set('abi_extension',
7991b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
8001b5d61b8Smrg                    '/^#define ABI_EXTENSION.*SET/ { printf "%d.%d", $2, $3 }',
8011b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
8021b5d61b8Smrg        ).stdout()
8031b5d61b8Smrg    )
8041b5d61b8Smrg
8051b5d61b8Smrg    sdk_required_modules = [
8061b5d61b8Smrg      'pixman-1 >= 0.27.2',
8071b5d61b8Smrg    ]
8081b5d61b8Smrg
8091b5d61b8Smrg    # XXX this isn't trying very hard, but hard enough.
8101b5d61b8Smrg    sdkconfig.set('PACKAGE_VERSION', meson.project_version())
8111b5d61b8Smrg    sdkconfig.set('SDK_REQUIRED_MODULES', ' '.join(sdk_required_modules))
8121b5d61b8Smrg    sdkconfig.set('symbol_visibility', '-fvisibility=hidden')
8131b5d61b8Smrg    sdkconfig.set('XORG_DRIVER_LIBS', '')
8141b5d61b8Smrg
8151b5d61b8Smrg    configure_file(
8161b5d61b8Smrg        input: 'xorg-server.pc.in',
8171b5d61b8Smrg        output: 'xorg-server.pc',
8181b5d61b8Smrg        configuration: sdkconfig,
8191b5d61b8Smrg        install_dir: join_paths(get_option('prefix'),
8201b5d61b8Smrg                                get_option('libdir'),
8211b5d61b8Smrg                                'pkgconfig'),
8221b5d61b8Smrg    )
823ed6184dfSmrg
824ed6184dfSmrg    install_data('xorg-server.m4',
825ed6184dfSmrg                 install_dir: join_paths(get_option('datadir'), 'aclocal'))
8261b5d61b8Smrgendif
8271b5d61b8Smrg
828ed6184dfSmrgif build_docs or build_docs_devel
829ed6184dfSmrg    docxmlconfig = configuration_data()
830ed6184dfSmrg    docxmlconfig.set('PACKAGE_VERSION', meson.project_version())
831ed6184dfSmrg    docxmlconfig.set('RELEASE_DATE', release_date)
832ed6184dfSmrg    configure_file(
833ed6184dfSmrg        input: 'xserver.ent.in',
834ed6184dfSmrg        output: 'xserver.ent',
835ed6184dfSmrg        configuration: docxmlconfig
836ed6184dfSmrg    )
837ed6184dfSmrgendif
838