xref: /OK3568_Linux_fs/external/xserver/meson.build (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyunproject('xserver', 'c',
2*4882a593Smuzhiyun        default_options: [
3*4882a593Smuzhiyun            'buildtype=debugoptimized',
4*4882a593Smuzhiyun            'c_std=gnu99',
5*4882a593Smuzhiyun        ],
6*4882a593Smuzhiyun        version: '1.20.11',
7*4882a593Smuzhiyun        meson_version: '>= 0.42.0',
8*4882a593Smuzhiyun)
9*4882a593Smuzhiyunadd_project_arguments('-DHAVE_DIX_CONFIG_H', language: 'c')
10*4882a593Smuzhiyuncc = meson.get_compiler('c')
11*4882a593Smuzhiyun
12*4882a593Smuzhiyunadd_global_arguments('-fno-strict-aliasing', language : 'c')
13*4882a593Smuzhiyunadd_global_arguments('-fvisibility=hidden', language : 'c')
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunadd_global_link_arguments('-fvisibility=hidden', language : 'c')
16*4882a593Smuzhiyun
17*4882a593Smuzhiyunif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
18*4882a593Smuzhiyun    test_wflags = [
19*4882a593Smuzhiyun        '-Wall',
20*4882a593Smuzhiyun        '-Wpointer-arith',
21*4882a593Smuzhiyun        '-Wmissing-declarations',
22*4882a593Smuzhiyun        '-Wformat=2',
23*4882a593Smuzhiyun        '-Wstrict-prototypes',
24*4882a593Smuzhiyun        '-Wmissing-prototypes',
25*4882a593Smuzhiyun        '-Wnested-externs',
26*4882a593Smuzhiyun        '-Wbad-function-cast',
27*4882a593Smuzhiyun        '-Wold-style-definition',
28*4882a593Smuzhiyun        '-Wunused',
29*4882a593Smuzhiyun        '-Wuninitialized',
30*4882a593Smuzhiyun        '-Wshadow',
31*4882a593Smuzhiyun        '-Wmissing-noreturn',
32*4882a593Smuzhiyun        '-Wmissing-format-attribute',
33*4882a593Smuzhiyun        '-Wredundant-decls',
34*4882a593Smuzhiyun        '-Werror=implicit',
35*4882a593Smuzhiyun        '-Werror=nonnull',
36*4882a593Smuzhiyun        '-Werror=init-self',
37*4882a593Smuzhiyun        '-Werror=main',
38*4882a593Smuzhiyun        '-Werror=missing-braces',
39*4882a593Smuzhiyun        '-Werror=sequence-point',
40*4882a593Smuzhiyun        '-Werror=return-type',
41*4882a593Smuzhiyun        '-Werror=trigraphs',
42*4882a593Smuzhiyun        '-Werror=array-bounds',
43*4882a593Smuzhiyun        '-Werror=write-strings',
44*4882a593Smuzhiyun        '-Werror=address',
45*4882a593Smuzhiyun        '-Werror=int-to-pointer-cast',
46*4882a593Smuzhiyun        '-Werror=pointer-to-int-cast',
47*4882a593Smuzhiyun    ]
48*4882a593Smuzhiyunelse
49*4882a593Smuzhiyun    test_wflags = []
50*4882a593Smuzhiyunendif
51*4882a593Smuzhiyun
52*4882a593Smuzhiyuncommon_wflags = []
53*4882a593Smuzhiyunforeach wflag: test_wflags
54*4882a593Smuzhiyun    if cc.has_argument(wflag)
55*4882a593Smuzhiyun        common_wflags += [ wflag ]
56*4882a593Smuzhiyun    endif
57*4882a593Smuzhiyunendforeach
58*4882a593Smuzhiyun
59*4882a593Smuzhiyunadd_global_arguments(common_wflags, language : 'c')
60*4882a593Smuzhiyun
61*4882a593Smuzhiyunxproto_dep = dependency('xproto', version: '>= 7.0.31')
62*4882a593Smuzhiyunrandrproto_dep = dependency('randrproto', version: '>= 1.6.0')
63*4882a593Smuzhiyunrenderproto_dep = dependency('renderproto', version: '>= 0.11')
64*4882a593Smuzhiyunxextproto_dep = dependency('xextproto', version: '>= 7.2.99.901')
65*4882a593Smuzhiyuninputproto_dep = dependency('inputproto', version: '>= 2.3')
66*4882a593Smuzhiyunkbproto_dep = dependency('kbproto', version: '>= 1.0.3')
67*4882a593Smuzhiyunfontsproto_dep = dependency('fontsproto', version: '>= 2.1.3')
68*4882a593Smuzhiyunfixesproto_dep = dependency('fixesproto', version: '>= 5.0')
69*4882a593Smuzhiyundamageproto_dep = dependency('damageproto', version: '>= 1.1')
70*4882a593Smuzhiyunxcmiscproto_dep = dependency('xcmiscproto', version: '>= 1.2.0')
71*4882a593Smuzhiyunbigreqsproto_dep = dependency('bigreqsproto', version: '>= 1.1.0')
72*4882a593Smuzhiyunxtrans_dep = dependency('xtrans', version: '>= 1.3.5')
73*4882a593Smuzhiyun
74*4882a593Smuzhiyunvideoproto_dep = dependency('videoproto')
75*4882a593Smuzhiyuncompositeproto_dep = dependency('compositeproto', version: '>= 0.4')
76*4882a593Smuzhiyunrecordproto_dep = dependency('recordproto', version: '>= 1.13.99.1')
77*4882a593Smuzhiyunscrnsaverproto_dep = dependency('scrnsaverproto', version: '>= 1.1')
78*4882a593Smuzhiyunresourceproto_dep = dependency('resourceproto', version: '>= 1.2.0')
79*4882a593Smuzhiyunxf86driproto_dep = dependency('xf86driproto', version: '>= 2.1.0', required: get_option('dri1') == 'true')
80*4882a593Smuzhiyundri2proto_dep = dependency('dri2proto', version: '>= 2.8', required: get_option('dri2') == 'true')
81*4882a593Smuzhiyundri3proto_dep = dependency('dri3proto', version: '>= 1.2', required: get_option('dri3') == 'true')
82*4882a593Smuzhiyunxineramaproto_dep = dependency('xineramaproto')
83*4882a593Smuzhiyunxf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0')
84*4882a593Smuzhiyunxf86vidmodeproto_dep = dependency('xf86vidmodeproto', version: '>= 2.2.99.1', required: false)
85*4882a593Smuzhiyunwindowswmproto_dep = dependency('windowswmproto', required: false)
86*4882a593Smuzhiyunapplewmproto_dep = dependency('applewmproto', version: '>= 1.4', required: false)
87*4882a593Smuzhiyunxshmfence_dep = dependency('xshmfence', version: '>= 1.1', required: false)
88*4882a593Smuzhiyun
89*4882a593Smuzhiyunpixman_dep = dependency('pixman-1')
90*4882a593Smuzhiyunlibbsd_dep = dependency('libbsd', required: false)
91*4882a593Smuzhiyunxkbcomp_dep = dependency('xkbcomp', required: false)
92*4882a593Smuzhiyunxkbfile_dep = dependency('xkbfile')
93*4882a593Smuzhiyunxfont2_dep = dependency('xfont2', version: '>= 2.0')
94*4882a593Smuzhiyunnettle_dep = dependency('nettle')
95*4882a593Smuzhiyun
96*4882a593Smuzhiyundbus_required = get_option('systemd_logind') == 'true'
97*4882a593Smuzhiyundbus_dep = dependency('dbus-1', version: '>= 1.0', required: dbus_required)
98*4882a593Smuzhiyun
99*4882a593Smuzhiyunbuild_hashtable = false
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun# Resolve default values of some options
102*4882a593Smuzhiyunxkb_dir = get_option('xkb_dir')
103*4882a593Smuzhiyunif xkb_dir == ''
104*4882a593Smuzhiyun    xkb_dir = xkbcomp_dep.get_pkgconfig_variable('xkbconfigdir')
105*4882a593Smuzhiyun    if xkb_dir == ''
106*4882a593Smuzhiyun        xkb_dir = join_paths(get_option('prefix'), 'share/X11/xkb')
107*4882a593Smuzhiyun    endif
108*4882a593Smuzhiyunendif
109*4882a593Smuzhiyun
110*4882a593Smuzhiyunxkb_output_dir = get_option('xkb_output_dir')
111*4882a593Smuzhiyunif xkb_output_dir == ''
112*4882a593Smuzhiyun    xkb_output_dir = join_paths(xkb_dir, 'compiled')
113*4882a593Smuzhiyunendif
114*4882a593Smuzhiyun
115*4882a593Smuzhiyunxkb_bin_dir = get_option('xkb_bin_dir')
116*4882a593Smuzhiyunif xkb_bin_dir == ''
117*4882a593Smuzhiyun    xkb_bin_dir = xkbcomp_dep.get_pkgconfig_variable('bindir')
118*4882a593Smuzhiyun    if xkb_bin_dir == ''
119*4882a593Smuzhiyun        xkb_bin_dir = join_paths(get_option('prefix'), get_option('bindir'))
120*4882a593Smuzhiyun    endif
121*4882a593Smuzhiyunendif
122*4882a593Smuzhiyun
123*4882a593Smuzhiyundfp = get_option('default_font_path')
124*4882a593Smuzhiyunif dfp == ''
125*4882a593Smuzhiyun    fontutil_dep = dependency('fontutil')
126*4882a593Smuzhiyun    fontrootdir = fontutil_dep.get_pkgconfig_variable('fontrootdir')
127*4882a593Smuzhiyun    default_font_path = ','.join([
128*4882a593Smuzhiyun        join_paths(fontrootdir, 'misc'),
129*4882a593Smuzhiyun        join_paths(fontrootdir, 'TTF'),
130*4882a593Smuzhiyun        join_paths(fontrootdir, 'OTF'),
131*4882a593Smuzhiyun        join_paths(fontrootdir, 'Type1'),
132*4882a593Smuzhiyun        join_paths(fontrootdir, '100dpi'),
133*4882a593Smuzhiyun        join_paths(fontrootdir, '75dpi'),
134*4882a593Smuzhiyun    ])
135*4882a593Smuzhiyunelse
136*4882a593Smuzhiyun    default_font_path = dfp
137*4882a593Smuzhiyunendif
138*4882a593Smuzhiyun
139*4882a593Smuzhiyunhal_option = get_option('hal')
140*4882a593Smuzhiyunglamor_option = get_option('glamor')
141*4882a593Smuzhiyun
142*4882a593Smuzhiyunbuild_udev = get_option('udev')
143*4882a593Smuzhiyunif host_machine.system() == 'windows'
144*4882a593Smuzhiyun    build_udev = false
145*4882a593Smuzhiyun    hal_option = 'false'
146*4882a593Smuzhiyunendif
147*4882a593Smuzhiyun
148*4882a593Smuzhiyunif get_option('systemd_logind') == 'auto'
149*4882a593Smuzhiyun    build_systemd_logind = build_udev and dbus_dep.found()
150*4882a593Smuzhiyunelse
151*4882a593Smuzhiyun    build_systemd_logind = get_option('systemd_logind') == 'true'
152*4882a593Smuzhiyunendif
153*4882a593Smuzhiyun
154*4882a593Smuzhiyunbuild_xorg = false
155*4882a593Smuzhiyunif (host_machine.system() != 'darwin' and
156*4882a593Smuzhiyun    host_machine.system() != 'windows')
157*4882a593Smuzhiyun    if get_option('xorg') == 'auto'
158*4882a593Smuzhiyun        build_xorg = (host_machine.system() != 'darwin' and
159*4882a593Smuzhiyun                      host_machine.system() != 'windows')
160*4882a593Smuzhiyun    else
161*4882a593Smuzhiyun        build_xorg = get_option('xorg') == 'true'
162*4882a593Smuzhiyun    endif
163*4882a593Smuzhiyunendif
164*4882a593Smuzhiyunxorgsdkdir = join_paths(get_option('prefix'), get_option('includedir'), 'xorg')
165*4882a593Smuzhiyun
166*4882a593Smuzhiyunbuild_xwayland = false
167*4882a593Smuzhiyunif (host_machine.system() != 'darwin' and
168*4882a593Smuzhiyun    host_machine.system() != 'windows')
169*4882a593Smuzhiyun    if get_option('xwayland') != 'false'
170*4882a593Smuzhiyun        xwayland_required = get_option('xwayland') == 'true'
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun        xwayland_dep = [
173*4882a593Smuzhiyun            dependency('wayland-client', version: '>= 1.3.0', required: xwayland_required),
174*4882a593Smuzhiyun            dependency('wayland-protocols', version: '>= 1.10', required: xwayland_required),
175*4882a593Smuzhiyun            dependency('libdrm', version: '>= 2.4.89', required: xwayland_required),
176*4882a593Smuzhiyun            dependency('epoxy', required: xwayland_required),
177*4882a593Smuzhiyun        ]
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun        build_xwayland = true
180*4882a593Smuzhiyun        # check for all the deps being found, to handle 'auto' mode.
181*4882a593Smuzhiyun        foreach d: xwayland_dep
182*4882a593Smuzhiyun            if not d.found()
183*4882a593Smuzhiyun                build_xwayland = false
184*4882a593Smuzhiyun            endif
185*4882a593Smuzhiyun        endforeach
186*4882a593Smuzhiyun    endif
187*4882a593Smuzhiyunendif
188*4882a593Smuzhiyun
189*4882a593Smuzhiyunbuild_xnest = false
190*4882a593Smuzhiyunif (host_machine.system() != 'darwin' and
191*4882a593Smuzhiyun    host_machine.system() != 'windows')
192*4882a593Smuzhiyun    if get_option('xnest') != 'false'
193*4882a593Smuzhiyun        xnest_required = get_option('xnest') == 'true'
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun        xnest_dep = [
196*4882a593Smuzhiyun            dependency('xext', version: '>= 1.0.99.4', required: xnest_required),
197*4882a593Smuzhiyun            dependency('x11', required: xnest_required),
198*4882a593Smuzhiyun            dependency('xau', required: xnest_required),
199*4882a593Smuzhiyun        ]
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun        build_xnest = true
202*4882a593Smuzhiyun        # check for all the deps being found, to handle 'auto' mode.
203*4882a593Smuzhiyun        foreach d: xnest_dep
204*4882a593Smuzhiyun            if not d.found()
205*4882a593Smuzhiyun                build_xnest = false
206*4882a593Smuzhiyun            endif
207*4882a593Smuzhiyun        endforeach
208*4882a593Smuzhiyun    endif
209*4882a593Smuzhiyunendif
210*4882a593Smuzhiyun
211*4882a593Smuzhiyunbuild_xwin = false
212*4882a593Smuzhiyunif get_option('xwin') == 'auto'
213*4882a593Smuzhiyun    if (host_machine.system() == 'cygwin' or
214*4882a593Smuzhiyun        host_machine.system() == 'windows')
215*4882a593Smuzhiyun            build_xwin = true
216*4882a593Smuzhiyun    endif
217*4882a593Smuzhiyunelse
218*4882a593Smuzhiyun    build_xwin = get_option('xwin') == 'true'
219*4882a593Smuzhiyunendif
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun# XXX: Finish these.
222*4882a593Smuzhiyunbuild_xquartz = false
223*4882a593Smuzhiyun
224*4882a593Smuzhiyunif get_option('ipv6') == 'auto'
225*4882a593Smuzhiyun    build_ipv6 = cc.has_function('getaddrinfo')
226*4882a593Smuzhiyunelse
227*4882a593Smuzhiyun    build_ipv6 = get_option('ipv6') == 'true'
228*4882a593Smuzhiyunendif
229*4882a593Smuzhiyun
230*4882a593Smuzhiyunint10 = get_option('int10')
231*4882a593Smuzhiyunif int10 == 'auto'
232*4882a593Smuzhiyun    int10 = 'x86emu'
233*4882a593Smuzhiyun    if host_machine.cpu() == 'powerpc' and host_machine.system() == 'freebsd'
234*4882a593Smuzhiyun        int10 = 'stub'
235*4882a593Smuzhiyun    endif
236*4882a593Smuzhiyun    if host_machine.cpu() == 'arm'
237*4882a593Smuzhiyun        int10 = 'stub'
238*4882a593Smuzhiyun    endif
239*4882a593Smuzhiyunendif
240*4882a593Smuzhiyun
241*4882a593Smuzhiyunhal_dep = []
242*4882a593Smuzhiyunif hal_option == 'auto'
243*4882a593Smuzhiyun    if not build_udev
244*4882a593Smuzhiyun        hal_dep = dependency('hal', required: false)
245*4882a593Smuzhiyun        build_hal = hal_dep.found()
246*4882a593Smuzhiyun    else
247*4882a593Smuzhiyun        build_hal = false
248*4882a593Smuzhiyun    endif
249*4882a593Smuzhiyunelse
250*4882a593Smuzhiyun    build_hal = hal_option == 'true'
251*4882a593Smuzhiyun    if build_hal
252*4882a593Smuzhiyun        hal_dep = dependency('hal')
253*4882a593Smuzhiyun    endif
254*4882a593Smuzhiyunendif
255*4882a593Smuzhiyun
256*4882a593Smuzhiyunif build_udev and build_hal
257*4882a593Smuzhiyun    error('Hotplugging through both libudev and hal not allowed')
258*4882a593Smuzhiyunendif
259*4882a593Smuzhiyun
260*4882a593Smuzhiyunbuild_dbus = build_hal or build_systemd_logind
261*4882a593Smuzhiyun
262*4882a593Smuzhiyunudev_dep = dependency('', required:false)
263*4882a593Smuzhiyunif build_udev
264*4882a593Smuzhiyun    udev_dep = dependency('libudev', version: '>= 143')
265*4882a593Smuzhiyunendif
266*4882a593Smuzhiyun
267*4882a593Smuzhiyunlog_dir = get_option('log_dir')
268*4882a593Smuzhiyunif log_dir == ''
269*4882a593Smuzhiyun    log_dir = join_paths(get_option('prefix'), get_option('localstatedir'), 'log')
270*4882a593Smuzhiyunendif
271*4882a593Smuzhiyun
272*4882a593Smuzhiyunmodule_dir = join_paths(get_option('libdir'), get_option('module_dir'))
273*4882a593Smuzhiyun
274*4882a593Smuzhiyunif glamor_option == 'auto'
275*4882a593Smuzhiyun    build_glamor = build_xorg or build_xwayland
276*4882a593Smuzhiyunelse
277*4882a593Smuzhiyun    build_glamor = get_option('glamor') == 'true'
278*4882a593Smuzhiyunendif
279*4882a593Smuzhiyun
280*4882a593Smuzhiyungbm_dep = dependency('', required: false)
281*4882a593Smuzhiyunepoxy_dep = dependency('', required: false)
282*4882a593Smuzhiyunif build_glamor
283*4882a593Smuzhiyun    gbm_dep = dependency('gbm', version: '>= 10.2', required: false)
284*4882a593Smuzhiyun    epoxy_dep = dependency('epoxy', required: false)
285*4882a593Smuzhiyunendif
286*4882a593Smuzhiyun
287*4882a593Smuzhiyuneglstream_option = get_option('xwayland_eglstream')
288*4882a593Smuzhiyunif build_xwayland and build_glamor
289*4882a593Smuzhiyun    eglstream_dep = dependency('wayland-eglstream-protocols', required:false)
290*4882a593Smuzhiyun    if eglstream_option == 'auto'
291*4882a593Smuzhiyun        build_eglstream = eglstream_dep.found()
292*4882a593Smuzhiyun    else
293*4882a593Smuzhiyun        build_eglstream = eglstream_option == 'true'
294*4882a593Smuzhiyun        if build_eglstream and not eglstream_dep.found()
295*4882a593Smuzhiyun            error('glamor EGLStream support requested, but wayland-eglstream-protocols not found')
296*4882a593Smuzhiyun        endif
297*4882a593Smuzhiyun    endif
298*4882a593Smuzhiyunelse
299*4882a593Smuzhiyun    build_eglstream = false
300*4882a593Smuzhiyunendif
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun# XXX: Add more sha1 options, because Linux is about choice
303*4882a593Smuzhiyunsha1_dep = nettle_dep
304*4882a593Smuzhiyun
305*4882a593Smuzhiyunxdmcp_dep = dependency('', required : false)
306*4882a593Smuzhiyunif get_option('xdmcp')
307*4882a593Smuzhiyun    xdmcp_dep = dependency('xdmcp')
308*4882a593Smuzhiyunendif
309*4882a593Smuzhiyun
310*4882a593Smuzhiyunhas_xdm_auth = get_option('xdm-auth-1')
311*4882a593Smuzhiyun
312*4882a593Smuzhiyunif not xdmcp_dep.found()
313*4882a593Smuzhiyun  has_xdm_auth = false
314*4882a593Smuzhiyunendif
315*4882a593Smuzhiyun
316*4882a593Smuzhiyunbuild_glx = get_option('glx')
317*4882a593Smuzhiyunif build_glx
318*4882a593Smuzhiyun    build_hashtable = true
319*4882a593Smuzhiyunendif
320*4882a593Smuzhiyun
321*4882a593Smuzhiyunlibdrm_dep = dependency('libdrm', version: '>= 2.4.89', required: false)
322*4882a593Smuzhiyun
323*4882a593Smuzhiyunif get_option('dri1') == 'auto'
324*4882a593Smuzhiyun    build_dri1 = xf86driproto_dep.found() and libdrm_dep.found()
325*4882a593Smuzhiyunelse
326*4882a593Smuzhiyun    build_dri1 = get_option('dri1') == 'true'
327*4882a593Smuzhiyunendif
328*4882a593Smuzhiyun
329*4882a593Smuzhiyunif get_option('dri2') == 'auto'
330*4882a593Smuzhiyun    build_dri2 = dri2proto_dep.found() and libdrm_dep.found()
331*4882a593Smuzhiyunelse
332*4882a593Smuzhiyun    build_dri2 = get_option('dri2') == 'true'
333*4882a593Smuzhiyunendif
334*4882a593Smuzhiyun
335*4882a593Smuzhiyunif get_option('dri3') == 'auto'
336*4882a593Smuzhiyun    build_dri3 = dri3proto_dep.found() and xshmfence_dep.found() and libdrm_dep.found()
337*4882a593Smuzhiyunelse
338*4882a593Smuzhiyun    build_dri3 = get_option('dri3') == 'true'
339*4882a593Smuzhiyun    if build_dri3
340*4882a593Smuzhiyun       if not xshmfence_dep.found()
341*4882a593Smuzhiyun           error('DRI3 requested, but xshmfence not found')
342*4882a593Smuzhiyun       endif
343*4882a593Smuzhiyun    endif
344*4882a593Smuzhiyunendif
345*4882a593Smuzhiyun
346*4882a593Smuzhiyunlibdrm_required = build_dri1 or build_dri2 or build_dri3
347*4882a593Smuzhiyunif not libdrm_dep.found() and libdrm_required
348*4882a593Smuzhiyun    error('DRI requested, but LIBDRM not found')
349*4882a593Smuzhiyunendif
350*4882a593Smuzhiyun
351*4882a593Smuzhiyunbuild_modesetting = libdrm_dep.found() and dri2proto_dep.found()
352*4882a593Smuzhiyun
353*4882a593Smuzhiyunbuild_vbe = false
354*4882a593Smuzhiyunif get_option('vbe') == 'auto'
355*4882a593Smuzhiyun    if (host_machine.system() != 'darwin' and
356*4882a593Smuzhiyun        host_machine.system() != 'windows' and
357*4882a593Smuzhiyun        host_machine.system() != 'cygwin')
358*4882a593Smuzhiyun        build_vbe = true
359*4882a593Smuzhiyun    endif
360*4882a593Smuzhiyunelse
361*4882a593Smuzhiyun    build_vbe = get_option('vbe') == 'true'
362*4882a593Smuzhiyunendif
363*4882a593Smuzhiyun
364*4882a593Smuzhiyunrga_dep = dependency('', required: false)
365*4882a593Smuzhiyunif build_modesetting
366*4882a593Smuzhiyun    rga_dep = dependency('librga', required: false)
367*4882a593Smuzhiyunendif
368*4882a593Smuzhiyun
369*4882a593Smuzhiyunbuild_vgahw = false
370*4882a593Smuzhiyunif get_option('vgahw') == 'auto'
371*4882a593Smuzhiyun    if (host_machine.system() != 'darwin' and
372*4882a593Smuzhiyun        host_machine.system() != 'windows' and
373*4882a593Smuzhiyun        host_machine.system() != 'cygwin')
374*4882a593Smuzhiyun        build_vgahw = true
375*4882a593Smuzhiyun    endif
376*4882a593Smuzhiyunelse
377*4882a593Smuzhiyun    build_vgahw = get_option('vgahw') == 'true'
378*4882a593Smuzhiyunendif
379*4882a593Smuzhiyun
380*4882a593Smuzhiyunbuild_dpms = get_option('dpms')
381*4882a593Smuzhiyunif build_xquartz
382*4882a593Smuzhiyun    build_dpms = false
383*4882a593Smuzhiyunendif
384*4882a593Smuzhiyun
385*4882a593Smuzhiyunbuild_xf86bigfont = get_option('xf86bigfont')
386*4882a593Smuzhiyunbuild_screensaver = get_option('screensaver')
387*4882a593Smuzhiyunbuild_res = get_option('xres')
388*4882a593Smuzhiyunif build_res
389*4882a593Smuzhiyun    build_hashtable = true
390*4882a593Smuzhiyunendif
391*4882a593Smuzhiyun
392*4882a593Smuzhiyunbuild_xace = get_option('xace')
393*4882a593Smuzhiyunbuild_xinerama = get_option('xinerama')
394*4882a593Smuzhiyun
395*4882a593Smuzhiyunbuild_xsecurity = get_option('xcsecurity')
396*4882a593Smuzhiyunif build_xsecurity
397*4882a593Smuzhiyun    if not build_xace
398*4882a593Smuzhiyun        error('cannot build Security extension without X-ACE')
399*4882a593Smuzhiyun    endif
400*4882a593Smuzhiyunendif
401*4882a593Smuzhiyun
402*4882a593Smuzhiyunbuild_xv = get_option('xv')
403*4882a593Smuzhiyunbuild_xvmc = get_option('xvmc')
404*4882a593Smuzhiyunif not build_xv
405*4882a593Smuzhiyun    build_xvmc = false
406*4882a593Smuzhiyunendif
407*4882a593Smuzhiyun
408*4882a593Smuzhiyunbuild_dga = false
409*4882a593Smuzhiyunif get_option('dga') == 'auto'
410*4882a593Smuzhiyun    xf86dgaproto_dep = dependency('xf86dgaproto', version: '>= 2.0.99.1', required: false)
411*4882a593Smuzhiyun    if xf86dgaproto_dep.found()
412*4882a593Smuzhiyun        build_dga = true
413*4882a593Smuzhiyun    endif
414*4882a593Smuzhiyunelif get_option('dga') == 'true'
415*4882a593Smuzhiyun    xf86dgaproto_dep = dependency('xf86dgaproto', version: '>= 2.0.99.1', required: true)
416*4882a593Smuzhiyun    build_dga = true
417*4882a593Smuzhiyunendif
418*4882a593Smuzhiyun
419*4882a593Smuzhiyunbuild_apm = false
420*4882a593Smuzhiyunif (get_option('linux_apm') == true and
421*4882a593Smuzhiyun   host_machine.system() == 'linux')
422*4882a593Smuzhiyun    if cc.has_header('linux/apm_bios.h')
423*4882a593Smuzhiyun        build_apm = true
424*4882a593Smuzhiyun    endif
425*4882a593Smuzhiyunendif
426*4882a593Smuzhiyun
427*4882a593Smuzhiyunbuild_acpi = false
428*4882a593Smuzhiyunif (get_option('linux_acpi') == true and
429*4882a593Smuzhiyun   host_machine.system() == 'linux')
430*4882a593Smuzhiyun    if (host_machine.cpu() == 'x86' or
431*4882a593Smuzhiyun       host_machine.cpu() == 'x86_64' or
432*4882a593Smuzhiyun       host_machine.cpu() == 'ia64')
433*4882a593Smuzhiyun        build_acpi = true
434*4882a593Smuzhiyun    endif
435*4882a593Smuzhiyunendif
436*4882a593Smuzhiyun
437*4882a593Smuzhiyunbuild_mitshm = false
438*4882a593Smuzhiyunif get_option('mitshm') == 'auto'
439*4882a593Smuzhiyun    build_mitshm = cc.has_header('sys/shm.h')
440*4882a593Smuzhiyunelif get_option('mitshm') == 'true'
441*4882a593Smuzhiyun    build_mitshm = true
442*4882a593Smuzhiyunendif
443*4882a593Smuzhiyun
444*4882a593Smuzhiyun# XXX: Allow configuration of these.
445*4882a593Smuzhiyunbuild_xselinux = false
446*4882a593Smuzhiyunbuild_xf86vidmode = xf86vidmodeproto_dep.found()
447*4882a593Smuzhiyun
448*4882a593Smuzhiyunm_dep = cc.find_library('m', required : false)
449*4882a593Smuzhiyundl_dep = cc.find_library('dl', required : false)
450*4882a593Smuzhiyun
451*4882a593Smuzhiyuncommon_dep = [
452*4882a593Smuzhiyun    xproto_dep,
453*4882a593Smuzhiyun    randrproto_dep,
454*4882a593Smuzhiyun    renderproto_dep,
455*4882a593Smuzhiyun    xextproto_dep,
456*4882a593Smuzhiyun    inputproto_dep,
457*4882a593Smuzhiyun    kbproto_dep,
458*4882a593Smuzhiyun    fontsproto_dep,
459*4882a593Smuzhiyun    fixesproto_dep,
460*4882a593Smuzhiyun    damageproto_dep,
461*4882a593Smuzhiyun    xcmiscproto_dep,
462*4882a593Smuzhiyun    bigreqsproto_dep,
463*4882a593Smuzhiyun    xtrans_dep,
464*4882a593Smuzhiyun
465*4882a593Smuzhiyun    videoproto_dep,
466*4882a593Smuzhiyun    compositeproto_dep,
467*4882a593Smuzhiyun    recordproto_dep,
468*4882a593Smuzhiyun    scrnsaverproto_dep,
469*4882a593Smuzhiyun    resourceproto_dep,
470*4882a593Smuzhiyun    xf86driproto_dep,
471*4882a593Smuzhiyun    dri2proto_dep,
472*4882a593Smuzhiyun    dri3proto_dep,
473*4882a593Smuzhiyun    xineramaproto_dep,
474*4882a593Smuzhiyun    xf86bigfontproto_dep,
475*4882a593Smuzhiyun    xf86dgaproto_dep,
476*4882a593Smuzhiyun    xf86vidmodeproto_dep,
477*4882a593Smuzhiyun    windowswmproto_dep,
478*4882a593Smuzhiyun    applewmproto_dep,
479*4882a593Smuzhiyun
480*4882a593Smuzhiyun    pixman_dep,
481*4882a593Smuzhiyun    libbsd_dep,
482*4882a593Smuzhiyun    xkbfile_dep,
483*4882a593Smuzhiyun    xfont2_dep,
484*4882a593Smuzhiyun    xdmcp_dep,
485*4882a593Smuzhiyun]
486*4882a593Smuzhiyun
487*4882a593Smuzhiyuninc = include_directories(
488*4882a593Smuzhiyun    'Xext',
489*4882a593Smuzhiyun    'Xi',
490*4882a593Smuzhiyun    'composite',
491*4882a593Smuzhiyun    'damageext',
492*4882a593Smuzhiyun    'exa',
493*4882a593Smuzhiyun    'fb',
494*4882a593Smuzhiyun    'glamor',
495*4882a593Smuzhiyun    'mi',
496*4882a593Smuzhiyun    'miext/damage',
497*4882a593Smuzhiyun    'miext/shadow',
498*4882a593Smuzhiyun    'miext/sync',
499*4882a593Smuzhiyun    'dbe',
500*4882a593Smuzhiyun    'dri3',
501*4882a593Smuzhiyun    'include',
502*4882a593Smuzhiyun    'present',
503*4882a593Smuzhiyun    'randr',
504*4882a593Smuzhiyun    'render',
505*4882a593Smuzhiyun    'xfixes',
506*4882a593Smuzhiyun)
507*4882a593Smuzhiyun
508*4882a593Smuzhiyunglx_inc = include_directories('glx')
509*4882a593Smuzhiyun
510*4882a593Smuzhiyuntop_srcdir_inc = include_directories('.')
511*4882a593Smuzhiyun
512*4882a593Smuzhiyunserverconfigdir = join_paths(get_option('libdir'), 'xorg')
513*4882a593Smuzhiyun
514*4882a593Smuzhiyunmanpage_config = configuration_data()
515*4882a593Smuzhiyunmanpage_config.set('vendorversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
516*4882a593Smuzhiyunmanpage_config.set('xorgversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version()))
517*4882a593Smuzhiyunmanpage_config.set('xservername', 'Xorg')
518*4882a593Smuzhiyunmanpage_config.set('xconfigfile', 'xorg.conf')
519*4882a593Smuzhiyunmanpage_config.set('projectroot', get_option('prefix'))
520*4882a593Smuzhiyunmanpage_config.set('apploaddir', '$(appdefaultdir)')
521*4882a593Smuzhiyunmanpage_config.set('appmansuffix', '1')
522*4882a593Smuzhiyunmanpage_config.set('drivermansuffix', '4')
523*4882a593Smuzhiyunmanpage_config.set('adminmansuffix', '8')
524*4882a593Smuzhiyunmanpage_config.set('libmansuffix', '3')
525*4882a593Smuzhiyunmanpage_config.set('miscmansuffix', '7')
526*4882a593Smuzhiyunmanpage_config.set('filemansuffix', '5')
527*4882a593Smuzhiyunmanpage_config.set('logdir', log_dir)
528*4882a593Smuzhiyunmanpage_config.set('datadir', join_paths(get_option('prefix'), get_option('datadir')))
529*4882a593Smuzhiyunmanpage_config.set('mandir', join_paths(get_option('prefix'), get_option('mandir')))
530*4882a593Smuzhiyunmanpage_config.set('sysconfdir', join_paths(get_option('prefix'), get_option('sysconfdir')))
531*4882a593Smuzhiyunmanpage_config.set('xconfigdir', 'xorg.conf.d')
532*4882a593Smuzhiyunmanpage_config.set('xkbdir', xkb_dir)
533*4882a593Smuzhiyunmanpage_config.set('XKB_DFLT_RULES', get_option('xkb_default_rules'))
534*4882a593Smuzhiyunmanpage_config.set('XKB_DFLT_MODEL', get_option('xkb_default_model'))
535*4882a593Smuzhiyunmanpage_config.set('XKB_DFLT_LAYOUT', get_option('xkb_default_layout'))
536*4882a593Smuzhiyunmanpage_config.set('XKB_DFLT_VARIANT', get_option('xkb_default_variant'))
537*4882a593Smuzhiyunmanpage_config.set('XKB_DFLT_OPTIONS', get_option('xkb_default_options'))
538*4882a593Smuzhiyunmanpage_config.set('bundle_id_prefix', '...')
539*4882a593Smuzhiyunmanpage_config.set('modulepath', module_dir)
540*4882a593Smuzhiyun# wtf doesn't this work
541*4882a593Smuzhiyun# manpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), libexecdir))
542*4882a593Smuzhiyunmanpage_config.set('suid_wrapper_dir', join_paths(get_option('prefix'), 'libexec'))
543*4882a593Smuzhiyunmanpage_config.set('default_font_path', default_font_path)
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun# Include must come first, as it sets up dix-config.h
546*4882a593Smuzhiyunsubdir('include')
547*4882a593Smuzhiyun
548*4882a593Smuzhiyun# X server core
549*4882a593Smuzhiyunsubdir('config')
550*4882a593Smuzhiyunsubdir('dix')
551*4882a593Smuzhiyunsubdir('dri3')
552*4882a593Smuzhiyunsubdir('glx')
553*4882a593Smuzhiyunsubdir('fb')
554*4882a593Smuzhiyunsubdir('mi')
555*4882a593Smuzhiyunsubdir('os')
556*4882a593Smuzhiyun# X extensions
557*4882a593Smuzhiyunsubdir('composite')
558*4882a593Smuzhiyunsubdir('damageext')
559*4882a593Smuzhiyunsubdir('dbe')
560*4882a593Smuzhiyunsubdir('miext/damage')
561*4882a593Smuzhiyunsubdir('miext/shadow')
562*4882a593Smuzhiyunsubdir('miext/sync')
563*4882a593Smuzhiyunsubdir('present')
564*4882a593Smuzhiyunif build_xwin or build_xquartz
565*4882a593Smuzhiyun    subdir('pseudoramiX')
566*4882a593Smuzhiyunendif
567*4882a593Smuzhiyunsubdir('randr')
568*4882a593Smuzhiyunsubdir('record')
569*4882a593Smuzhiyunsubdir('render')
570*4882a593Smuzhiyunsubdir('xfixes')
571*4882a593Smuzhiyunsubdir('xkb')
572*4882a593Smuzhiyunsubdir('Xext')
573*4882a593Smuzhiyunsubdir('Xi')
574*4882a593Smuzhiyun# other
575*4882a593Smuzhiyunif build_glamor
576*4882a593Smuzhiyun    subdir('glamor')
577*4882a593Smuzhiyunendif
578*4882a593Smuzhiyunif build_xorg or get_option('xephyr')
579*4882a593Smuzhiyun    subdir('exa')
580*4882a593Smuzhiyunendif
581*4882a593Smuzhiyun
582*4882a593Smuzhiyun# Common static libraries of all X servers
583*4882a593Smuzhiyunlibxserver = [
584*4882a593Smuzhiyun    libxserver_mi,
585*4882a593Smuzhiyun    libxserver_dix,
586*4882a593Smuzhiyun
587*4882a593Smuzhiyun    libxserver_composite,
588*4882a593Smuzhiyun    libxserver_damageext,
589*4882a593Smuzhiyun    libxserver_dbe,
590*4882a593Smuzhiyun    libxserver_randr,
591*4882a593Smuzhiyun    libxserver_miext_damage,
592*4882a593Smuzhiyun    libxserver_render,
593*4882a593Smuzhiyun    libxserver_present,
594*4882a593Smuzhiyun    libxserver_xext,
595*4882a593Smuzhiyun    libxserver_miext_sync,
596*4882a593Smuzhiyun    libxserver_xfixes,
597*4882a593Smuzhiyun    libxserver_xi,
598*4882a593Smuzhiyun    libxserver_xkb,
599*4882a593Smuzhiyun    libxserver_record,
600*4882a593Smuzhiyun
601*4882a593Smuzhiyun    libxserver_os,
602*4882a593Smuzhiyun]
603*4882a593Smuzhiyun
604*4882a593Smuzhiyunlibxserver += libxserver_dri3
605*4882a593Smuzhiyun
606*4882a593Smuzhiyunsubdir('hw')
607*4882a593Smuzhiyunsubdir('test')
608*4882a593Smuzhiyun
609*4882a593Smuzhiyuninstall_man(configure_file(
610*4882a593Smuzhiyun    input: 'man/Xserver.man',
611*4882a593Smuzhiyun    output: 'Xserver.1',
612*4882a593Smuzhiyun    configuration: manpage_config,
613*4882a593Smuzhiyun))
614*4882a593Smuzhiyun
615*4882a593Smuzhiyunif build_xorg
616*4882a593Smuzhiyun    sdkconfig = configuration_data()
617*4882a593Smuzhiyun    awk = find_program('awk')
618*4882a593Smuzhiyun
619*4882a593Smuzhiyun    sdkconfig.set('prefix', get_option('prefix'))
620*4882a593Smuzhiyun    sdkconfig.set('exec_prefix', '${prefix}')
621*4882a593Smuzhiyun    sdkconfig.set('libdir', join_paths('${exec_prefix}', get_option('libdir')))
622*4882a593Smuzhiyun    sdkconfig.set('includedir', join_paths('${prefix}', get_option('includedir')))
623*4882a593Smuzhiyun    sdkconfig.set('datarootdir', join_paths('${prefix}', get_option('datadir')))
624*4882a593Smuzhiyun    sdkconfig.set('moduledir', join_paths('${exec_prefix}', module_dir))
625*4882a593Smuzhiyun    sdkconfig.set('sdkdir', join_paths('${prefix}', get_option('includedir'), 'xorg'))
626*4882a593Smuzhiyun    sdkconfig.set('sysconfigdir', join_paths('${datarootdir}', 'X11/xorg.conf.d'))
627*4882a593Smuzhiyun
628*4882a593Smuzhiyun    sdkconfig.set('abi_ansic',
629*4882a593Smuzhiyun        run_command(awk, '-F', '[(,)]',
630*4882a593Smuzhiyun                    '/^#define ABI_ANSIC.*SET/ { printf "%d.%d", $2, $3 }',
631*4882a593Smuzhiyun                    files('hw/xfree86/common/xf86Module.h')
632*4882a593Smuzhiyun        ).stdout()
633*4882a593Smuzhiyun    )
634*4882a593Smuzhiyun    sdkconfig.set('abi_videodrv',
635*4882a593Smuzhiyun        run_command(awk, '-F', '[(,)]',
636*4882a593Smuzhiyun                    '/^#define ABI_VIDEODRV.*SET/ { printf "%d.%d", $2, $3 }',
637*4882a593Smuzhiyun                    files('hw/xfree86/common/xf86Module.h')
638*4882a593Smuzhiyun        ).stdout()
639*4882a593Smuzhiyun    )
640*4882a593Smuzhiyun    sdkconfig.set('abi_xinput',
641*4882a593Smuzhiyun        run_command(awk, '-F', '[(,)]',
642*4882a593Smuzhiyun                    '/^#define ABI_XINPUT.*SET/ { printf "%d.%d", $2, $3 }',
643*4882a593Smuzhiyun                    files('hw/xfree86/common/xf86Module.h')
644*4882a593Smuzhiyun        ).stdout()
645*4882a593Smuzhiyun    )
646*4882a593Smuzhiyun    sdkconfig.set('abi_extension',
647*4882a593Smuzhiyun        run_command(awk, '-F', '[(,)]',
648*4882a593Smuzhiyun                    '/^#define ABI_EXTENSION.*SET/ { printf "%d.%d", $2, $3 }',
649*4882a593Smuzhiyun                    files('hw/xfree86/common/xf86Module.h')
650*4882a593Smuzhiyun        ).stdout()
651*4882a593Smuzhiyun    )
652*4882a593Smuzhiyun
653*4882a593Smuzhiyun    sdk_required_modules = [
654*4882a593Smuzhiyun      'pixman-1 >= 0.27.2',
655*4882a593Smuzhiyun    ]
656*4882a593Smuzhiyun
657*4882a593Smuzhiyun    # XXX this isn't trying very hard, but hard enough.
658*4882a593Smuzhiyun    sdkconfig.set('PACKAGE_VERSION', meson.project_version())
659*4882a593Smuzhiyun    sdkconfig.set('SDK_REQUIRED_MODULES', ' '.join(sdk_required_modules))
660*4882a593Smuzhiyun    sdkconfig.set('symbol_visibility', '-fvisibility=hidden')
661*4882a593Smuzhiyun    sdkconfig.set('XORG_DRIVER_LIBS', '')
662*4882a593Smuzhiyun
663*4882a593Smuzhiyun    configure_file(
664*4882a593Smuzhiyun        input: 'xorg-server.pc.in',
665*4882a593Smuzhiyun        output: 'xorg-server.pc',
666*4882a593Smuzhiyun        configuration: sdkconfig,
667*4882a593Smuzhiyun        install_dir: join_paths(get_option('prefix'),
668*4882a593Smuzhiyun                                get_option('libdir'),
669*4882a593Smuzhiyun                                'pkgconfig'),
670*4882a593Smuzhiyun    )
671*4882a593Smuzhiyunendif
672*4882a593Smuzhiyun
673*4882a593Smuzhiyuninstall_data('xorg-server.m4',
674*4882a593Smuzhiyun             install_dir: join_paths(get_option('datadir'), 'aclocal'))
675