meson.build revision 1b5d61b8
11b5d61b8Smrgproject('xserver', 'c',
21b5d61b8Smrg        default_options: [
31b5d61b8Smrg            'buildtype=debugoptimized',
41b5d61b8Smrg            'c_std=gnu99',
51b5d61b8Smrg        ],
61b5d61b8Smrg        version: '1.20.3',
71b5d61b8Smrg        meson_version: '>= 0.42.0',
81b5d61b8Smrg)
91b5d61b8Smrgadd_project_arguments('-DHAVE_DIX_CONFIG_H', language: 'c')
101b5d61b8Smrgcc = meson.get_compiler('c')
111b5d61b8Smrg
121b5d61b8Smrgadd_global_arguments('-fno-strict-aliasing', language : 'c')
131b5d61b8Smrgadd_global_arguments('-fvisibility=hidden', language : 'c')
141b5d61b8Smrg
151b5d61b8Smrgadd_global_link_arguments('-fvisibility=hidden', language : 'c')
161b5d61b8Smrg
171b5d61b8Smrgif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
181b5d61b8Smrg    test_wflags = [
191b5d61b8Smrg        '-Wall',
201b5d61b8Smrg        '-Wpointer-arith',
211b5d61b8Smrg        '-Wmissing-declarations',
221b5d61b8Smrg        '-Wformat=2',
231b5d61b8Smrg        '-Wstrict-prototypes',
241b5d61b8Smrg        '-Wmissing-prototypes',
251b5d61b8Smrg        '-Wnested-externs',
261b5d61b8Smrg        '-Wbad-function-cast',
271b5d61b8Smrg        '-Wold-style-definition',
281b5d61b8Smrg        '-Wunused',
291b5d61b8Smrg        '-Wuninitialized',
301b5d61b8Smrg        '-Wshadow',
311b5d61b8Smrg        '-Wmissing-noreturn',
321b5d61b8Smrg        '-Wmissing-format-attribute',
331b5d61b8Smrg        '-Wredundant-decls',
341b5d61b8Smrg        '-Werror=implicit',
351b5d61b8Smrg        '-Werror=nonnull',
361b5d61b8Smrg        '-Werror=init-self',
371b5d61b8Smrg        '-Werror=main',
381b5d61b8Smrg        '-Werror=missing-braces',
391b5d61b8Smrg        '-Werror=sequence-point',
401b5d61b8Smrg        '-Werror=return-type',
411b5d61b8Smrg        '-Werror=trigraphs',
421b5d61b8Smrg        '-Werror=array-bounds',
431b5d61b8Smrg        '-Werror=write-strings',
441b5d61b8Smrg        '-Werror=address',
451b5d61b8Smrg        '-Werror=int-to-pointer-cast',
461b5d61b8Smrg        '-Werror=pointer-to-int-cast',
471b5d61b8Smrg    ]
481b5d61b8Smrgelse
491b5d61b8Smrg    test_wflags = []
501b5d61b8Smrgendif
511b5d61b8Smrg
521b5d61b8Smrgcommon_wflags = []
531b5d61b8Smrgforeach wflag: test_wflags
541b5d61b8Smrg    if cc.has_argument(wflag)
551b5d61b8Smrg        common_wflags += [ wflag ]
561b5d61b8Smrg    endif
571b5d61b8Smrgendforeach
581b5d61b8Smrg
591b5d61b8Smrgadd_global_arguments(common_wflags, language : 'c')
601b5d61b8Smrg
611b5d61b8Smrgxproto_dep = dependency('xproto', version: '>= 7.0.31')
621b5d61b8Smrgrandrproto_dep = dependency('randrproto', version: '>= 1.6.0')
631b5d61b8Smrgrenderproto_dep = dependency('renderproto', version: '>= 0.11')
641b5d61b8Smrgxextproto_dep = dependency('xextproto', version: '>= 7.2.99.901')
651b5d61b8Smrginputproto_dep = dependency('inputproto', version: '>= 2.3')
661b5d61b8Smrgkbproto_dep = dependency('kbproto', version: '>= 1.0.3')
671b5d61b8Smrgfontsproto_dep = dependency('fontsproto', version: '>= 2.1.3')
681b5d61b8Smrgfixesproto_dep = dependency('fixesproto', version: '>= 5.0')
691b5d61b8Smrgdamageproto_dep = dependency('damageproto', version: '>= 1.1')
701b5d61b8Smrgxcmiscproto_dep = dependency('xcmiscproto', version: '>= 1.2.0')
711b5d61b8Smrgbigreqsproto_dep = dependency('bigreqsproto', version: '>= 1.1.0')
721b5d61b8Smrgxtrans_dep = dependency('xtrans', version: '>= 1.3.5')
731b5d61b8Smrg
741b5d61b8Smrgvideoproto_dep = dependency('videoproto')
751b5d61b8Smrgcompositeproto_dep = dependency('compositeproto', version: '>= 0.4')
761b5d61b8Smrgrecordproto_dep = dependency('recordproto', version: '>= 1.13.99.1')
771b5d61b8Smrgscrnsaverproto_dep = dependency('scrnsaverproto', version: '>= 1.1')
781b5d61b8Smrgresourceproto_dep = dependency('resourceproto', version: '>= 1.2.0')
791b5d61b8Smrgxf86driproto_dep = dependency('xf86driproto', version: '>= 2.1.0', required: get_option('dri1') == 'true')
801b5d61b8Smrgdri2proto_dep = dependency('dri2proto', version: '>= 2.8', required: get_option('dri2') == 'true')
811b5d61b8Smrgdri3proto_dep = dependency('dri3proto', version: '>= 1.2', required: get_option('dri3') == 'true')
821b5d61b8Smrgxineramaproto_dep = dependency('xineramaproto')
831b5d61b8Smrgxf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0')
841b5d61b8Smrgxf86vidmodeproto_dep = dependency('xf86vidmodeproto', version: '>= 2.2.99.1', required: false)
851b5d61b8Smrgwindowswmproto_dep = dependency('windowswmproto', required: false)
861b5d61b8Smrgapplewmproto_dep = dependency('applewmproto', version: '>= 1.4', required: false)
871b5d61b8Smrgxshmfence_dep = dependency('xshmfence', version: '>= 1.1', required: false)
881b5d61b8Smrg
891b5d61b8Smrgpixman_dep = dependency('pixman-1')
901b5d61b8Smrglibbsd_dep = dependency('libbsd', required: false)
911b5d61b8Smrgxkbcomp_dep = dependency('xkbcomp', required: false)
921b5d61b8Smrgxkbfile_dep = dependency('xkbfile')
931b5d61b8Smrgxfont2_dep = dependency('xfont2', version: '>= 2.0')
941b5d61b8Smrgnettle_dep = dependency('nettle')
951b5d61b8Smrg
961b5d61b8Smrgdbus_required = get_option('systemd_logind') == 'true'
971b5d61b8Smrgdbus_dep = dependency('dbus-1', version: '>= 1.0', required: dbus_required)
981b5d61b8Smrg
991b5d61b8Smrgbuild_hashtable = false
1001b5d61b8Smrg
1011b5d61b8Smrg# Resolve default values of some options
1021b5d61b8Smrgxkb_dir = get_option('xkb_dir')
1031b5d61b8Smrgif xkb_dir == ''
1041b5d61b8Smrg    xkb_dir = xkbcomp_dep.get_pkgconfig_variable('xkbconfigdir')
1051b5d61b8Smrg    if xkb_dir == ''
1061b5d61b8Smrg        xkb_dir = join_paths(get_option('prefix'), 'share/X11/xkb')
1071b5d61b8Smrg    endif
1081b5d61b8Smrgendif
1091b5d61b8Smrg
1101b5d61b8Smrgxkb_output_dir = get_option('xkb_output_dir')
1111b5d61b8Smrgif xkb_output_dir == ''
1121b5d61b8Smrg    xkb_output_dir = join_paths(xkb_dir, 'compiled')
1131b5d61b8Smrgendif
1141b5d61b8Smrg
1151b5d61b8Smrgxkb_bin_dir = get_option('xkb_bin_dir')
1161b5d61b8Smrgif xkb_bin_dir == ''
1171b5d61b8Smrg    xkb_bin_dir = xkbcomp_dep.get_pkgconfig_variable('bindir')
1181b5d61b8Smrg    if xkb_bin_dir == ''
1191b5d61b8Smrg        xkb_bin_dir = join_paths(get_option('prefix'), get_option('bindir'))
1201b5d61b8Smrg    endif
1211b5d61b8Smrgendif
1221b5d61b8Smrg
1231b5d61b8Smrgdfp = get_option('default_font_path')
1241b5d61b8Smrgif dfp == ''
1251b5d61b8Smrg    fontutil_dep = dependency('fontutil')
1261b5d61b8Smrg    fontrootdir = fontutil_dep.get_pkgconfig_variable('fontrootdir')
1271b5d61b8Smrg    default_font_path = ','.join([
1281b5d61b8Smrg        join_paths(fontrootdir, 'misc'),
1291b5d61b8Smrg        join_paths(fontrootdir, 'TTF'),
1301b5d61b8Smrg        join_paths(fontrootdir, 'OTF'),
1311b5d61b8Smrg        join_paths(fontrootdir, 'Type1'),
1321b5d61b8Smrg        join_paths(fontrootdir, '100dpi'),
1331b5d61b8Smrg        join_paths(fontrootdir, '75dpi'),
1341b5d61b8Smrg    ])
1351b5d61b8Smrgelse
1361b5d61b8Smrg    default_font_path = dfp
1371b5d61b8Smrgendif
1381b5d61b8Smrg
1391b5d61b8Smrghal_option = get_option('hal')
1401b5d61b8Smrgglamor_option = get_option('glamor')
1411b5d61b8Smrg
1421b5d61b8Smrgbuild_udev = get_option('udev')
1431b5d61b8Smrgif host_machine.system() == 'windows'
1441b5d61b8Smrg    build_udev = false
1451b5d61b8Smrg    hal_option = 'false'
1461b5d61b8Smrgendif
1471b5d61b8Smrg
1481b5d61b8Smrgif get_option('systemd_logind') == 'auto'
1491b5d61b8Smrg    build_systemd_logind = build_udev and dbus_dep.found()
1501b5d61b8Smrgelse
1511b5d61b8Smrg    build_systemd_logind = get_option('systemd_logind') == 'true'
1521b5d61b8Smrgendif
1531b5d61b8Smrg
1541b5d61b8Smrgbuild_xorg = false
1551b5d61b8Smrgif (host_machine.system() != 'darwin' and
1561b5d61b8Smrg    host_machine.system() != 'windows')
1571b5d61b8Smrg    if get_option('xorg') == 'auto'
1581b5d61b8Smrg        build_xorg = (host_machine.system() != 'darwin' and
1591b5d61b8Smrg                      host_machine.system() != 'windows')
1601b5d61b8Smrg    else
1611b5d61b8Smrg        build_xorg = get_option('xorg') == 'true'
1621b5d61b8Smrg    endif
1631b5d61b8Smrgendif
1641b5d61b8Smrgxorgsdkdir = join_paths(get_option('prefix'), get_option('includedir'), 'xorg')
1651b5d61b8Smrg
1661b5d61b8Smrgbuild_xwayland = false
1671b5d61b8Smrgif (host_machine.system() != 'darwin' and
1681b5d61b8Smrg    host_machine.system() != 'windows')
1691b5d61b8Smrg    if get_option('xwayland') != 'false'
1701b5d61b8Smrg        xwayland_required = get_option('xwayland') == 'true'
1711b5d61b8Smrg
1721b5d61b8Smrg        xwayland_dep = [
1731b5d61b8Smrg            dependency('wayland-client', version: '>= 1.3.0', required: xwayland_required),
1741b5d61b8Smrg            dependency('wayland-protocols', version: '>= 1.10', required: xwayland_required),
1751b5d61b8Smrg            dependency('libdrm', version: '>= 2.4.89', required: xwayland_required),
1761b5d61b8Smrg            dependency('epoxy', required: xwayland_required),
1771b5d61b8Smrg        ]
1781b5d61b8Smrg
1791b5d61b8Smrg        build_xwayland = true
1801b5d61b8Smrg        # check for all the deps being found, to handle 'auto' mode.
1811b5d61b8Smrg        foreach d: xwayland_dep
1821b5d61b8Smrg            if not d.found()
1831b5d61b8Smrg                build_xwayland = false
1841b5d61b8Smrg            endif
1851b5d61b8Smrg        endforeach
1861b5d61b8Smrg    endif
1871b5d61b8Smrgendif
1881b5d61b8Smrg
1891b5d61b8Smrgbuild_xnest = false
1901b5d61b8Smrgif (host_machine.system() != 'darwin' and
1911b5d61b8Smrg    host_machine.system() != 'windows')
1921b5d61b8Smrg    if get_option('xnest') != 'false'
1931b5d61b8Smrg        xnest_required = get_option('xnest') == 'true'
1941b5d61b8Smrg
1951b5d61b8Smrg        xnest_dep = [
1961b5d61b8Smrg            dependency('xext', version: '>= 1.0.99.4', required: xnest_required),
1971b5d61b8Smrg            dependency('x11', required: xnest_required),
1981b5d61b8Smrg            dependency('xau', required: xnest_required),
1991b5d61b8Smrg        ]
2001b5d61b8Smrg
2011b5d61b8Smrg        build_xnest = true
2021b5d61b8Smrg        # check for all the deps being found, to handle 'auto' mode.
2031b5d61b8Smrg        foreach d: xnest_dep
2041b5d61b8Smrg            if not d.found()
2051b5d61b8Smrg                build_xnest = false
2061b5d61b8Smrg            endif
2071b5d61b8Smrg        endforeach
2081b5d61b8Smrg    endif
2091b5d61b8Smrgendif
2101b5d61b8Smrg
2111b5d61b8Smrgbuild_xwin = false
2121b5d61b8Smrgif get_option('xwin') == 'auto'
2131b5d61b8Smrg    if (host_machine.system() == 'cygwin' or
2141b5d61b8Smrg        host_machine.system() == 'windows')
2151b5d61b8Smrg            build_xwin = true
2161b5d61b8Smrg    endif
2171b5d61b8Smrgelse
2181b5d61b8Smrg    build_xwin = get_option('xwin') == 'true'
2191b5d61b8Smrgendif
2201b5d61b8Smrg
2211b5d61b8Smrg# XXX: Finish these.
2221b5d61b8Smrgbuild_xquartz = false
2231b5d61b8Smrg
2241b5d61b8Smrgif get_option('ipv6') == 'auto'
2251b5d61b8Smrg    build_ipv6 = cc.has_function('getaddrinfo')
2261b5d61b8Smrgelse
2271b5d61b8Smrg    build_ipv6 = get_option('ipv6') == 'true'
2281b5d61b8Smrgendif
2291b5d61b8Smrg
2301b5d61b8Smrgint10 = get_option('int10')
2311b5d61b8Smrgif int10 == 'auto'
2321b5d61b8Smrg    int10 = 'x86emu'
2331b5d61b8Smrg    if host_machine.cpu() == 'powerpc' and host_machine.system() == 'freebsd'
2341b5d61b8Smrg        int10 = 'stub'
2351b5d61b8Smrg    endif
2361b5d61b8Smrg    if host_machine.cpu() == 'arm'
2371b5d61b8Smrg        int10 = 'stub'
2381b5d61b8Smrg    endif
2391b5d61b8Smrgendif
2401b5d61b8Smrg
2411b5d61b8Smrghal_dep = []
2421b5d61b8Smrgif hal_option == 'auto'
2431b5d61b8Smrg    if not build_udev
2441b5d61b8Smrg        hal_dep = dependency('hal', required: false)
2451b5d61b8Smrg        build_hal = hal_dep.found()
2461b5d61b8Smrg    else
2471b5d61b8Smrg        build_hal = false
2481b5d61b8Smrg    endif
2491b5d61b8Smrgelse
2501b5d61b8Smrg    build_hal = hal_option == 'true'
2511b5d61b8Smrg    if build_hal
2521b5d61b8Smrg        hal_dep = dependency('hal')
2531b5d61b8Smrg    endif
2541b5d61b8Smrgendif
2551b5d61b8Smrg
2561b5d61b8Smrgif build_udev and build_hal
2571b5d61b8Smrg    error('Hotplugging through both libudev and hal not allowed')
2581b5d61b8Smrgendif
2591b5d61b8Smrg
2601b5d61b8Smrgbuild_dbus = build_hal or build_systemd_logind
2611b5d61b8Smrg
2621b5d61b8Smrgudev_dep = dependency('', required:false)
2631b5d61b8Smrgif build_udev
2641b5d61b8Smrg    udev_dep = dependency('libudev', version: '>= 143')
2651b5d61b8Smrgendif
2661b5d61b8Smrg
2671b5d61b8Smrglog_dir = get_option('log_dir')
2681b5d61b8Smrgif log_dir == ''
2691b5d61b8Smrg    log_dir = join_paths(get_option('prefix'), get_option('localstatedir'), 'log')
2701b5d61b8Smrgendif
2711b5d61b8Smrg
2721b5d61b8Smrgmodule_dir = join_paths(get_option('libdir'), get_option('module_dir'))
2731b5d61b8Smrg
2741b5d61b8Smrgif glamor_option == 'auto'
2751b5d61b8Smrg    build_glamor = build_xorg or build_xwayland
2761b5d61b8Smrgelse
2771b5d61b8Smrg    build_glamor = get_option('glamor') == 'true'
2781b5d61b8Smrgendif
2791b5d61b8Smrg
2801b5d61b8Smrggbm_dep = dependency('', required: false)
2811b5d61b8Smrgepoxy_dep = dependency('', required: false)
2821b5d61b8Smrgif build_glamor
2831b5d61b8Smrg    gbm_dep = dependency('gbm', version: '>= 10.2', required: false)
2841b5d61b8Smrg    epoxy_dep = dependency('epoxy', required: false)
2851b5d61b8Smrgendif
2861b5d61b8Smrg
2871b5d61b8Smrgeglstream_option = get_option('xwayland_eglstream')
2881b5d61b8Smrgif build_xwayland and build_glamor
2891b5d61b8Smrg    eglstream_dep = dependency('wayland-eglstream-protocols', required:false)
2901b5d61b8Smrg    if eglstream_option == 'auto'
2911b5d61b8Smrg        build_eglstream = eglstream_dep.found()
2921b5d61b8Smrg    else
2931b5d61b8Smrg        build_eglstream = eglstream_option == 'true'
2941b5d61b8Smrg        if build_eglstream and not eglstream_dep.found()
2951b5d61b8Smrg            error('glamor EGLStream support requested, but wayland-eglstream-protocols not found')
2961b5d61b8Smrg        endif
2971b5d61b8Smrg    endif
2981b5d61b8Smrgelse
2991b5d61b8Smrg    build_eglstream = false
3001b5d61b8Smrgendif
3011b5d61b8Smrg
3021b5d61b8Smrg# XXX: Add more sha1 options, because Linux is about choice
3031b5d61b8Smrgsha1_dep = nettle_dep
3041b5d61b8Smrg
3051b5d61b8Smrgxdmcp_dep = dependency('', required : false)
3061b5d61b8Smrgif get_option('xdmcp')
3071b5d61b8Smrg    xdmcp_dep = dependency('xdmcp')
3081b5d61b8Smrgendif
3091b5d61b8Smrg
3101b5d61b8Smrghas_xdm_auth = get_option('xdm-auth-1')
3111b5d61b8Smrg
3121b5d61b8Smrgif not xdmcp_dep.found()
3131b5d61b8Smrg  has_xdm_auth = false
3141b5d61b8Smrgendif
3151b5d61b8Smrg
3161b5d61b8Smrgbuild_glx = get_option('glx')
3171b5d61b8Smrgif build_glx
3181b5d61b8Smrg    build_hashtable = true
3191b5d61b8Smrgendif
3201b5d61b8Smrg
3211b5d61b8Smrglibdrm_dep = dependency('libdrm', version: '>= 2.4.89', required: false)
3221b5d61b8Smrg
3231b5d61b8Smrgif get_option('dri1') == 'auto'
3241b5d61b8Smrg    build_dri1 = xf86driproto_dep.found() and libdrm_dep.found()
3251b5d61b8Smrgelse
3261b5d61b8Smrg    build_dri1 = get_option('dri1') == 'true'
3271b5d61b8Smrgendif
3281b5d61b8Smrg
3291b5d61b8Smrgif get_option('dri2') == 'auto'
3301b5d61b8Smrg    build_dri2 = dri2proto_dep.found() and libdrm_dep.found()
3311b5d61b8Smrgelse
3321b5d61b8Smrg    build_dri2 = get_option('dri2') == 'true'
3331b5d61b8Smrgendif
3341b5d61b8Smrg
3351b5d61b8Smrgif get_option('dri3') == 'auto'
3361b5d61b8Smrg    build_dri3 = dri3proto_dep.found() and xshmfence_dep.found() and libdrm_dep.found()
3371b5d61b8Smrgelse
3381b5d61b8Smrg    build_dri3 = get_option('dri3') == 'true'
3391b5d61b8Smrg    if build_dri3
3401b5d61b8Smrg       if not xshmfence_dep.found()
3411b5d61b8Smrg           error('DRI3 requested, but xshmfence not found')
3421b5d61b8Smrg       endif
3431b5d61b8Smrg    endif
3441b5d61b8Smrgendif
3451b5d61b8Smrg
3461b5d61b8Smrglibdrm_required = build_dri1 or build_dri2 or build_dri3
3471b5d61b8Smrgif not libdrm_dep.found() and libdrm_required
3481b5d61b8Smrg    error('DRI requested, but LIBDRM not found')
3491b5d61b8Smrgendif
3501b5d61b8Smrg
3511b5d61b8Smrgbuild_modesetting = libdrm_dep.found()
3521b5d61b8Smrg
3531b5d61b8Smrgbuild_vbe = false
3541b5d61b8Smrgif get_option('vbe') == 'auto'
3551b5d61b8Smrg    if (host_machine.system() != 'darwin' and
3561b5d61b8Smrg        host_machine.system() != 'windows' and
3571b5d61b8Smrg        host_machine.system() != 'cygwin')
3581b5d61b8Smrg        build_vbe = true
3591b5d61b8Smrg    endif
3601b5d61b8Smrgelse
3611b5d61b8Smrg    build_vbe = get_option('vbe') == 'true'
3621b5d61b8Smrgendif
3631b5d61b8Smrg
3641b5d61b8Smrgbuild_vgahw = false
3651b5d61b8Smrgif get_option('vgahw') == 'auto'
3661b5d61b8Smrg    if (host_machine.system() != 'darwin' and
3671b5d61b8Smrg        host_machine.system() != 'windows' and
3681b5d61b8Smrg        host_machine.system() != 'cygwin')
3691b5d61b8Smrg        build_vgahw = true
3701b5d61b8Smrg    endif
3711b5d61b8Smrgelse
3721b5d61b8Smrg    build_vgahw = get_option('vgahw') == 'true'
3731b5d61b8Smrgendif
3741b5d61b8Smrg
3751b5d61b8Smrgbuild_dpms = get_option('dpms')
3761b5d61b8Smrgif build_xquartz
3771b5d61b8Smrg    build_dpms = false
3781b5d61b8Smrgendif
3791b5d61b8Smrg
3801b5d61b8Smrgbuild_xf86bigfont = get_option('xf86bigfont')
3811b5d61b8Smrgbuild_screensaver = get_option('screensaver')
3821b5d61b8Smrgbuild_res = get_option('xres')
3831b5d61b8Smrgif build_res
3841b5d61b8Smrg    build_hashtable = true
3851b5d61b8Smrgendif
3861b5d61b8Smrg
3871b5d61b8Smrgbuild_xace = get_option('xace')
3881b5d61b8Smrgbuild_xinerama = get_option('xinerama')
3891b5d61b8Smrg
3901b5d61b8Smrgbuild_xsecurity = get_option('xcsecurity')
3911b5d61b8Smrgif build_xsecurity
3921b5d61b8Smrg    if not build_xace
3931b5d61b8Smrg        error('cannot build Security extension without X-ACE')
3941b5d61b8Smrg    endif
3951b5d61b8Smrgendif
3961b5d61b8Smrg
3971b5d61b8Smrgbuild_xv = get_option('xv')
3981b5d61b8Smrgbuild_xvmc = get_option('xvmc')
3991b5d61b8Smrgif not build_xv
4001b5d61b8Smrg    build_xvmc = false
4011b5d61b8Smrgendif
4021b5d61b8Smrg
4031b5d61b8Smrgbuild_dga = false
4041b5d61b8Smrgif get_option('dga') == 'auto'
4051b5d61b8Smrg    xf86dgaproto_dep = dependency('xf86dgaproto', version: '>= 2.0.99.1', required: false)
4061b5d61b8Smrg    if xf86dgaproto_dep.found()
4071b5d61b8Smrg        build_dga = true
4081b5d61b8Smrg    endif
4091b5d61b8Smrgelif get_option('dga') == 'true'
4101b5d61b8Smrg    xf86dgaproto_dep = dependency('xf86dgaproto', version: '>= 2.0.99.1', required: true)
4111b5d61b8Smrg    build_dga = true
4121b5d61b8Smrgendif
4131b5d61b8Smrg
4141b5d61b8Smrgbuild_apm = false
4151b5d61b8Smrgif (get_option('linux_apm') == true and
4161b5d61b8Smrg   host_machine.system() == 'linux')
4171b5d61b8Smrg    if cc.has_header('linux/apm_bios.h')
4181b5d61b8Smrg        build_apm = true
4191b5d61b8Smrg    endif
4201b5d61b8Smrgendif
4211b5d61b8Smrg
4221b5d61b8Smrgbuild_acpi = false
4231b5d61b8Smrgif (get_option('linux_acpi') == true and
4241b5d61b8Smrg   host_machine.system() == 'linux')
4251b5d61b8Smrg    if (host_machine.cpu() == 'x86' or
4261b5d61b8Smrg       host_machine.cpu() == 'x86_64' or
4271b5d61b8Smrg       host_machine.cpu() == 'ia64')
4281b5d61b8Smrg        build_acpi = true
4291b5d61b8Smrg    endif
4301b5d61b8Smrgendif
4311b5d61b8Smrg
4321b5d61b8Smrgbuild_mitshm = false
4331b5d61b8Smrgif get_option('mitshm') == 'auto'
4341b5d61b8Smrg    build_mitshm = cc.has_header('sys/shm.h')
4351b5d61b8Smrgelif get_option('mitshm') == 'true'
4361b5d61b8Smrg    build_mitshm = true
4371b5d61b8Smrgendif
4381b5d61b8Smrg
4391b5d61b8Smrg# XXX: Allow configuration of these.
4401b5d61b8Smrgbuild_xselinux = false
4411b5d61b8Smrgbuild_xf86vidmode = xf86vidmodeproto_dep.found()
4421b5d61b8Smrg
4431b5d61b8Smrgm_dep = cc.find_library('m', required : false)
4441b5d61b8Smrgdl_dep = cc.find_library('dl', required : false)
4451b5d61b8Smrg
4461b5d61b8Smrgcommon_dep = [
4471b5d61b8Smrg    xproto_dep,
4481b5d61b8Smrg    randrproto_dep,
4491b5d61b8Smrg    renderproto_dep,
4501b5d61b8Smrg    xextproto_dep,
4511b5d61b8Smrg    inputproto_dep,
4521b5d61b8Smrg    kbproto_dep,
4531b5d61b8Smrg    fontsproto_dep,
4541b5d61b8Smrg    fixesproto_dep,
4551b5d61b8Smrg    damageproto_dep,
4561b5d61b8Smrg    xcmiscproto_dep,
4571b5d61b8Smrg    bigreqsproto_dep,
4581b5d61b8Smrg    xtrans_dep,
4591b5d61b8Smrg
4601b5d61b8Smrg    videoproto_dep,
4611b5d61b8Smrg    compositeproto_dep,
4621b5d61b8Smrg    recordproto_dep,
4631b5d61b8Smrg    scrnsaverproto_dep,
4641b5d61b8Smrg    resourceproto_dep,
4651b5d61b8Smrg    xf86driproto_dep,
4661b5d61b8Smrg    dri2proto_dep,
4671b5d61b8Smrg    dri3proto_dep,
4681b5d61b8Smrg    xineramaproto_dep,
4691b5d61b8Smrg    xf86bigfontproto_dep,
4701b5d61b8Smrg    xf86dgaproto_dep,
4711b5d61b8Smrg    xf86vidmodeproto_dep,
4721b5d61b8Smrg    windowswmproto_dep,
4731b5d61b8Smrg    applewmproto_dep,
4741b5d61b8Smrg
4751b5d61b8Smrg    pixman_dep,
4761b5d61b8Smrg    libbsd_dep,
4771b5d61b8Smrg    xkbfile_dep,
4781b5d61b8Smrg    xfont2_dep,
4791b5d61b8Smrg    xdmcp_dep,
4801b5d61b8Smrg]
4811b5d61b8Smrg
4821b5d61b8Smrginc = include_directories(
4831b5d61b8Smrg    'Xext',
4841b5d61b8Smrg    'Xi',
4851b5d61b8Smrg    'composite',
4861b5d61b8Smrg    'damageext',
4871b5d61b8Smrg    'exa',
4881b5d61b8Smrg    'fb',
4891b5d61b8Smrg    'glamor',
4901b5d61b8Smrg    'mi',
4911b5d61b8Smrg    'miext/damage',
4921b5d61b8Smrg    'miext/shadow',
4931b5d61b8Smrg    'miext/sync',
4941b5d61b8Smrg    'dbe',
4951b5d61b8Smrg    'dri3',
4961b5d61b8Smrg    'include',
4971b5d61b8Smrg    'present',
4981b5d61b8Smrg    'randr',
4991b5d61b8Smrg    'render',
5001b5d61b8Smrg    'xfixes',
5011b5d61b8Smrg)
5021b5d61b8Smrg
5031b5d61b8Smrgglx_inc = include_directories('glx')
5041b5d61b8Smrg
5051b5d61b8Smrgtop_srcdir_inc = include_directories('.')
5061b5d61b8Smrg
5071b5d61b8Smrgserverconfigdir = join_paths(get_option('libdir'), 'xorg')
5081b5d61b8Smrg
5091b5d61b8Smrgmanpage_config = configuration_data()
5101b5d61b8Smrgmanpage_config.set('vendorversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
5111b5d61b8Smrgmanpage_config.set('xorgversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
5121b5d61b8Smrgmanpage_config.set('xservername', 'Xorg')
5131b5d61b8Smrgmanpage_config.set('xconfigfile', 'xorg.conf')
5141b5d61b8Smrgmanpage_config.set('projectroot', get_option('prefix'))
5151b5d61b8Smrgmanpage_config.set('apploaddir', '$(appdefaultdir)')
5161b5d61b8Smrgmanpage_config.set('appmansuffix', '1')
5171b5d61b8Smrgmanpage_config.set('drivermansuffix', '4')
5181b5d61b8Smrgmanpage_config.set('adminmansuffix', '8')
5191b5d61b8Smrgmanpage_config.set('libmansuffix', '3')
5201b5d61b8Smrgmanpage_config.set('miscmansuffix', '7')
5211b5d61b8Smrgmanpage_config.set('filemansuffix', '5')
5221b5d61b8Smrgmanpage_config.set('logdir', log_dir)
5231b5d61b8Smrgmanpage_config.set('datadir', join_paths(get_option('prefix'), get_option('datadir')))
5241b5d61b8Smrgmanpage_config.set('mandir', join_paths(get_option('prefix'), get_option('mandir')))
5251b5d61b8Smrgmanpage_config.set('sysconfdir', join_paths(get_option('prefix'), get_option('sysconfdir')))
5261b5d61b8Smrgmanpage_config.set('xconfigdir', 'xorg.conf.d')
5271b5d61b8Smrgmanpage_config.set('xkbdir', xkb_dir)
5281b5d61b8Smrgmanpage_config.set('XKB_DFLT_RULES', get_option('xkb_default_rules'))
5291b5d61b8Smrgmanpage_config.set('XKB_DFLT_MODEL', get_option('xkb_default_model'))
5301b5d61b8Smrgmanpage_config.set('XKB_DFLT_LAYOUT', get_option('xkb_default_layout'))
5311b5d61b8Smrgmanpage_config.set('XKB_DFLT_VARIANT', get_option('xkb_default_variant'))
5321b5d61b8Smrgmanpage_config.set('XKB_DFLT_OPTIONS', get_option('xkb_default_options'))
5331b5d61b8Smrgmanpage_config.set('bundle_id_prefix', '...')
5341b5d61b8Smrgmanpage_config.set('modulepath', module_dir)
5351b5d61b8Smrg# wtf doesn't this work
5361b5d61b8Smrg# manpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), libexecdir))
5371b5d61b8Smrgmanpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), 'libexec'))
5381b5d61b8Smrgmanpage_config.set('default_font_path', default_font_path)
5391b5d61b8Smrg
5401b5d61b8Smrg# Include must come first, as it sets up dix-config.h
5411b5d61b8Smrgsubdir('include')
5421b5d61b8Smrg
5431b5d61b8Smrg# X server core
5441b5d61b8Smrgsubdir('config')
5451b5d61b8Smrgsubdir('dix')
5461b5d61b8Smrgsubdir('dri3')
5471b5d61b8Smrgsubdir('glx')
5481b5d61b8Smrgsubdir('fb')
5491b5d61b8Smrgsubdir('mi')
5501b5d61b8Smrgsubdir('os')
5511b5d61b8Smrg# X extensions
5521b5d61b8Smrgsubdir('composite')
5531b5d61b8Smrgsubdir('damageext')
5541b5d61b8Smrgsubdir('dbe')
5551b5d61b8Smrgsubdir('miext/damage')
5561b5d61b8Smrgsubdir('miext/shadow')
5571b5d61b8Smrgsubdir('miext/sync')
5581b5d61b8Smrgsubdir('present')
5591b5d61b8Smrgif build_xwin or build_xquartz
5601b5d61b8Smrg    subdir('pseudoramiX')
5611b5d61b8Smrgendif
5621b5d61b8Smrgsubdir('randr')
5631b5d61b8Smrgsubdir('record')
5641b5d61b8Smrgsubdir('render')
5651b5d61b8Smrgsubdir('xfixes')
5661b5d61b8Smrgsubdir('xkb')
5671b5d61b8Smrgsubdir('Xext')
5681b5d61b8Smrgsubdir('Xi')
5691b5d61b8Smrg# other
5701b5d61b8Smrgif build_glamor
5711b5d61b8Smrg    subdir('glamor')
5721b5d61b8Smrgendif
5731b5d61b8Smrgif build_xorg or get_option('xephyr')
5741b5d61b8Smrg    subdir('exa')
5751b5d61b8Smrgendif
5761b5d61b8Smrg
5771b5d61b8Smrg# Common static libraries of all X servers
5781b5d61b8Smrglibxserver = [
5791b5d61b8Smrg    libxserver_mi,
5801b5d61b8Smrg    libxserver_dix,
5811b5d61b8Smrg
5821b5d61b8Smrg    libxserver_composite,
5831b5d61b8Smrg    libxserver_damageext,
5841b5d61b8Smrg    libxserver_dbe,
5851b5d61b8Smrg    libxserver_randr,
5861b5d61b8Smrg    libxserver_miext_damage,
5871b5d61b8Smrg    libxserver_render,
5881b5d61b8Smrg    libxserver_present,
5891b5d61b8Smrg    libxserver_xext,
5901b5d61b8Smrg    libxserver_miext_sync,
5911b5d61b8Smrg    libxserver_xfixes,
5921b5d61b8Smrg    libxserver_xi,
5931b5d61b8Smrg    libxserver_xkb,
5941b5d61b8Smrg    libxserver_record,
5951b5d61b8Smrg
5961b5d61b8Smrg    libxserver_os,
5971b5d61b8Smrg]
5981b5d61b8Smrg
5991b5d61b8Smrglibxserver += libxserver_dri3
6001b5d61b8Smrg
6011b5d61b8Smrgsubdir('hw')
6021b5d61b8Smrgsubdir('test')
6031b5d61b8Smrg
6041b5d61b8Smrginstall_man(configure_file(
6051b5d61b8Smrg    input: 'man/Xserver.man',
6061b5d61b8Smrg    output: 'Xserver.1',
6071b5d61b8Smrg    configuration: manpage_config,
6081b5d61b8Smrg))
6091b5d61b8Smrg
6101b5d61b8Smrgif build_xorg
6111b5d61b8Smrg    sdkconfig = configuration_data()
6121b5d61b8Smrg    awk = find_program('awk')
6131b5d61b8Smrg
6141b5d61b8Smrg    sdkconfig.set('prefix', get_option('prefix'))
6151b5d61b8Smrg    sdkconfig.set('exec_prefix', '${prefix}')
6161b5d61b8Smrg    sdkconfig.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
6171b5d61b8Smrg    sdkconfig.set('includedir', join_paths('${prefix}', get_option('includedir')))
6181b5d61b8Smrg    sdkconfig.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
6191b5d61b8Smrg    sdkconfig.set('moduledir', join_paths('${exec_prefix}', module_dir))
6201b5d61b8Smrg    sdkconfig.set('sdkdir', join_paths('${prefix}', get_option('includedir'), 'xorg'))
6211b5d61b8Smrg    sdkconfig.set('sysconfigdir', join_paths('${datarootdir}', 'X11/xorg.conf.d'))
6221b5d61b8Smrg
6231b5d61b8Smrg    sdkconfig.set('abi_ansic',
6241b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
6251b5d61b8Smrg                    '/^#define ABI_ANSIC.*SET/ { printf "%d.%d", $2, $3 }',
6261b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
6271b5d61b8Smrg        ).stdout()
6281b5d61b8Smrg    )
6291b5d61b8Smrg    sdkconfig.set('abi_videodrv',
6301b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
6311b5d61b8Smrg                    '/^#define ABI_VIDEODRV.*SET/ { printf "%d.%d", $2, $3 }',
6321b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
6331b5d61b8Smrg        ).stdout()
6341b5d61b8Smrg    )
6351b5d61b8Smrg    sdkconfig.set('abi_xinput',
6361b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
6371b5d61b8Smrg                    '/^#define ABI_XINPUT.*SET/ { printf "%d.%d", $2, $3 }',
6381b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
6391b5d61b8Smrg        ).stdout()
6401b5d61b8Smrg    )
6411b5d61b8Smrg    sdkconfig.set('abi_extension',
6421b5d61b8Smrg        run_command(awk, '-F', '[(,)]',
6431b5d61b8Smrg                    '/^#define ABI_EXTENSION.*SET/ { printf "%d.%d", $2, $3 }',
6441b5d61b8Smrg                    files('hw/xfree86/common/xf86Module.h')
6451b5d61b8Smrg        ).stdout()
6461b5d61b8Smrg    )
6471b5d61b8Smrg
6481b5d61b8Smrg    sdk_required_modules = [
6491b5d61b8Smrg      'pixman-1 >= 0.27.2',
6501b5d61b8Smrg    ]
6511b5d61b8Smrg
6521b5d61b8Smrg    # XXX this isn't trying very hard, but hard enough.
6531b5d61b8Smrg    sdkconfig.set('PACKAGE_VERSION', meson.project_version())
6541b5d61b8Smrg    sdkconfig.set('SDK_REQUIRED_MODULES', ' '.join(sdk_required_modules))
6551b5d61b8Smrg    sdkconfig.set('symbol_visibility', '-fvisibility=hidden')
6561b5d61b8Smrg    sdkconfig.set('XORG_DRIVER_LIBS', '')
6571b5d61b8Smrg
6581b5d61b8Smrg    configure_file(
6591b5d61b8Smrg        input: 'xorg-server.pc.in',
6601b5d61b8Smrg        output: 'xorg-server.pc',
6611b5d61b8Smrg        configuration: sdkconfig,
6621b5d61b8Smrg        install_dir: join_paths(get_option('prefix'),
6631b5d61b8Smrg                                get_option('libdir'),
6641b5d61b8Smrg                                'pkgconfig'),
6651b5d61b8Smrg    )
6661b5d61b8Smrgendif
6671b5d61b8Smrg
6681b5d61b8Smrginstall_data('xorg-server.m4',
6691b5d61b8Smrg             install_dir: join_paths(get_option('datadir'), 'aclocal'))
670