11b5d61b8Smrgversion_split = meson.project_version().split('.')
21b5d61b8Smrgmajor = version_split[0].to_int()
31b5d61b8Smrgminor = version_split[1].to_int()
41b5d61b8Smrgpatch = version_split[2].to_int()
51b5d61b8Smrg
6ed6184dfSmrg# convert to the old-style 1.x.y version scheme used up to 1.20.x for backwards compatibility
7ed6184dfSmrgrelease = 1 * 10000000 + major * 100000 + minor * 1000 + patch
81b5d61b8Smrg
9ed6184dfSmrgdri_dep = dependency('dri', required: build_glx)
101b5d61b8Smrg
111b5d61b8Smrgconf_data = configuration_data()
121b5d61b8Smrgconf_data.set('_DIX_CONFIG_H_', '1')
131b5d61b8Smrg
141b5d61b8Smrgconf_data.set('HAVE_TYPEOF', cc.compiles('''
151b5d61b8Smrg    int foo(int bar) { typeof(bar) baz = 1; return baz; }
161b5d61b8Smrg''',
17ed6184dfSmrg    name: 'typeof()') ? '1' : false)
181b5d61b8Smrg
19ed6184dfSmrg# For feature macros we're using either false (boolean) or '1', which correspond to the macro being
20ed6184dfSmrg# not defined at all and defined to 1. This is to match autotools behavior and thus preserve
21ed6184dfSmrg# backwards  compatibility with all the existing code that uses #ifdef to check if feature is
22ed6184dfSmrg# enabled. This ifdef would pass if the macro is defined to 0 which would silently break code
23ed6184dfSmrg# in various places.
24ed6184dfSmrg#
25ed6184dfSmrg# As a complication when we read the configuration from conf_data back we get either string or
26ed6184dfSmrg# bool. Meson does not like comparing things of different types so we always convert the returned
27ed6184dfSmrg# value to an integer using to_int().
28ed6184dfSmrgconf_data.set('MONOTONIC_CLOCK', cc.has_function('clock_gettime') and
29ed6184dfSmrgcc.compiles('''
301b5d61b8Smrg    #define _POSIX_C_SOURCE 200112L
311b5d61b8Smrg    #include <time.h>
321b5d61b8Smrg    #include <unistd.h>
331b5d61b8Smrg    #ifndef CLOCK_MONOTONIC
341b5d61b8Smrg    #error CLOCK_MONOTONIC not defined
351b5d61b8Smrg    #endif
361b5d61b8Smrg''',
37ed6184dfSmrg    name: 'CLOCK_MONOTONIC') ? '1' : false)
381b5d61b8Smrg
39ed6184dfSmrgconf_data.set('XSERVER_DTRACE', with_dtrace ? '1' : false)
401b5d61b8Smrg
411b5d61b8Smrgif host_machine.endian() == 'little'
421b5d61b8Smrg    conf_data.set('X_BYTE_ORDER', 'X_LITTLE_ENDIAN')
431b5d61b8Smrgelse
441b5d61b8Smrg    conf_data.set('X_BYTE_ORDER', 'X_BIG_ENDIAN')
451b5d61b8Smrgendif
461b5d61b8Smrg
471b5d61b8Smrgglx_align64 = []
481b5d61b8Smrgif cc.sizeof('unsigned long') == 8
491b5d61b8Smrg   conf_data.set('_XSERVER64', '1')
501b5d61b8Smrg   glx_align64 = '-D__GLX_ALIGN64'
511b5d61b8Smrgendif
521b5d61b8Smrg
531b5d61b8Smrgconf_data.set('_GNU_SOURCE', '1')
541b5d61b8Smrg
551b5d61b8Smrg# autoconf checks for /dev/xf86 here, but the test should be based on
561b5d61b8Smrg# the target, not the build system.  Could we get rid of this and just
571b5d61b8Smrg# ifdef for openbsd?
58ed6184dfSmrgconf_data.set('HAS_APERTURE_DRV', host_machine.system() == 'openbsd' ? '1' : false)
59ed6184dfSmrg
60ed6184dfSmrgif get_option('input_thread') == 'false'
61ed6184dfSmrg  enable_input_thread = false
62ed6184dfSmrgelse
63ed6184dfSmrg  enable_input_thread = cc.has_header_symbol('pthread.h',
64ed6184dfSmrg					     'PTHREAD_MUTEX_RECURSIVE')
65ed6184dfSmrg  if not enable_input_thread and get_option('input_thread') == 'true'
66ed6184dfSmrg    error('Input thread enabled and PTHREAD_MUTEX_RECURSIVE not found')
67ed6184dfSmrg  endif
68ed6184dfSmrg  if host_machine.system() == 'windows' and get_option('input_thread') == 'auto'
69ed6184dfSmrg      enable_input_thread = false
70ed6184dfSmrg  endif
71ed6184dfSmrgendif
72ed6184dfSmrgconf_data.set('INPUTTHREAD', enable_input_thread ? '1' : false)
73ed6184dfSmrg
74ed6184dfSmrgif cc.compiles('''
75ed6184dfSmrg    #define _GNU_SOURCE 1
76ed6184dfSmrg    #include <pthread.h>
77ed6184dfSmrg    void foo(int bar) { pthread_setname_np(pthread_self(), "example"); }
78ed6184dfSmrg''',
79ed6184dfSmrg    args: '-Werror-implicit-function-declaration',
80ed6184dfSmrg    name: 'pthread_setname_np(tid, name)')
81ed6184dfSmrg    conf_data.set('HAVE_PTHREAD_SETNAME_NP_WITH_TID', 1)
82ed6184dfSmrgelif cc.compiles('''
83ed6184dfSmrg    #define _GNU_SOURCE 1
84ed6184dfSmrg    #include <pthread.h>
85ed6184dfSmrg    void foo(int bar) { pthread_setname_np("example"); }
86ed6184dfSmrg''',
87ed6184dfSmrg    args: '-Werror-implicit-function-declaration',
88ed6184dfSmrg    name: 'pthread_setname_np(name)')
89ed6184dfSmrg    conf_data.set('HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID', 1)
90ed6184dfSmrgendif
91ed6184dfSmrg
92ed6184dfSmrgconf_data.set('HAVE_LIBBSD', libbsd_dep.found() ? '1' : false)
93ed6184dfSmrg# Note: this symbol is used by libXtrans.
94ed6184dfSmrgconf_data.set('HAVE_SYSTEMD_DAEMON', libsystemd_daemon_dep.found() ? '1' : false)
95ed6184dfSmrgconf_data.set('CONFIG_UDEV', build_udev ? '1' : false)
96ed6184dfSmrgconf_data.set('CONFIG_UDEV_KMS', build_udev_kms ? '1' : false)
97ed6184dfSmrgconf_data.set('HAVE_DBUS', build_dbus ? '1' : false)
98ed6184dfSmrgconf_data.set('CONFIG_HAL', build_hal ? '1' : false)
99ed6184dfSmrgconf_data.set('SYSTEMD_LOGIND', build_systemd_logind ? '1' : false)
100ed6184dfSmrgconf_data.set('NEED_DBUS', build_systemd_logind or build_hal ? '1' : false)
101ed6184dfSmrgconf_data.set('CONFIG_WSCONS', host_machine.system() == 'openbsd' ? '1' : false)
102ed6184dfSmrg
103ed6184dfSmrgconf_data.set('HAVE_XSHMFENCE', xshmfence_dep.found() ? '1' : false)
104ed6184dfSmrgconf_data.set('WITH_LIBDRM', libdrm_required ? '1' : false)
1051b5d61b8Smrgconf_data.set('GLAMOR_HAS_EGL_QUERY_DMABUF',
106ed6184dfSmrg              epoxy_dep.found() and epoxy_dep.version().version_compare('>= 1.4.4') ? '1' : false)
1075a7dfde8Smrgconf_data.set('GLAMOR_HAS_EGL_QUERY_DRIVER',
108ed6184dfSmrg              epoxy_dep.found() and epoxy_dep.version().version_compare('>= 1.5.4') ? '1' : false)
109ed6184dfSmrgconf_data.set('GLXEXT', build_glx ? '1' : false)
110ed6184dfSmrgconf_data.set('GLAMOR', build_glamor ? '1' : false)
111ed6184dfSmrgconf_data.set('GLAMOR_HAS_GBM', gbm_dep.found() ? '1' : false)
1121b5d61b8Smrgconf_data.set('GLAMOR_HAS_GBM_LINEAR',
113ed6184dfSmrg              build_glamor and gbm_dep.found() and gbm_dep.version().version_compare('>= 10.6') ? '1' : false)
1141b5d61b8Smrgconf_data.set('GBM_BO_WITH_MODIFIERS',
115ed6184dfSmrg              build_glamor and gbm_dep.found() and gbm_dep.version().version_compare('>= 17.1') ? '1' : false)
1161b5d61b8Smrg
1171b5d61b8Smrgconf_data.set_quoted('SERVER_MISC_CONFIG_PATH', serverconfigdir)
1181b5d61b8Smrgconf_data.set_quoted('PROJECTROOT', get_option('prefix'))
1191b5d61b8Smrgconf_data.set_quoted('SYSCONFDIR', join_paths(get_option('prefix'), get_option('sysconfdir')))
1201b5d61b8Smrgconf_data.set_quoted('SUID_WRAPPER_DIR', join_paths(get_option('prefix'), get_option('libexecdir')))
1211b5d61b8Smrgconf_data.set_quoted('COMPILEDDEFAULTFONTPATH', default_font_path)
1221b5d61b8Smrg
1231b5d61b8Smrgconf_data.set('XORG_VERSION_CURRENT', release)
1241b5d61b8Smrg
125ed6184dfSmrgconf_data.set('HASXDMAUTH', has_xdm_auth ? '1' : false)
126ed6184dfSmrgconf_data.set('SECURE_RPC', get_option('secure-rpc') ? '1' : false)
127ed6184dfSmrg
128ed6184dfSmrgconf_data.set('HAVE_DLFCN_H', cc.has_header('dlfcn.h') ? '1' : false)
129ed6184dfSmrgconf_data.set('HAVE_EXECINFO_H', cc.has_header('execinfo.h') ? '1' : false)
130ed6184dfSmrgconf_data.set('HAVE_FCNTL_H', cc.has_header('fcntl.h') ? '1' : false)
131ed6184dfSmrgconf_data.set('HAVE_FNMATCH_H', cc.has_header('fnmatch.h') ? '1' : false)
132ed6184dfSmrgconf_data.set('HAVE_LINUX_AGPGART_H', cc.has_header('linux/agpgart.h') ? '1' : false)
133ed6184dfSmrgconf_data.set('HAVE_STDLIB_H', cc.has_header('stdlib.h') ? '1' : false)
134ed6184dfSmrgconf_data.set('HAVE_STRING_H', cc.has_header('string.h') ? '1' : false)
135ed6184dfSmrgconf_data.set('HAVE_STRINGS_H', cc.has_header('strings.h') ? '1' : false)
136ed6184dfSmrgconf_data.set('HAVE_SYS_AGPGART_H', cc.has_header('sys/agpgart.h') ? '1' : false)
137ed6184dfSmrgconf_data.set('HAVE_SYS_AGPIO_H', cc.has_header('sys/agpio.h') ? '1' : false)
138a1e1cf94Smrgconf_data.set('HAVE_SYS_UN_H', cc.has_header('sys/un.h') ? '1' : false)
139ed6184dfSmrgconf_data.set('HAVE_SYS_UTSNAME_H', cc.has_header('sys/utsname.h') ? '1' : false)
140ed6184dfSmrgconf_data.set('HAVE_SYS_SYSMACROS_H', cc.has_header('sys/sysmacros.h') ? '1' : false)
141ed6184dfSmrgconf_data.set('HAVE_UNISTD_H', cc.has_header('unistd.h') ? '1' : false)
142ed6184dfSmrg
143ed6184dfSmrgconf_data.set('HAVE_ARC4RANDOM_BUF', cc.has_function('arc4random_buf', dependencies: libbsd_dep) ? '1' : false)
144ed6184dfSmrgconf_data.set('HAVE_BACKTRACE', cc.has_function('backtrace') ? '1' : false)
145ed6184dfSmrgconf_data.set('HAVE_CBRT', cc.has_function('cbrt') ? '1' : false)
146ed6184dfSmrgconf_data.set('HAVE_EPOLL_CREATE1', cc.has_function('epoll_create1') ? '1' : false)
147ed6184dfSmrgconf_data.set('HAVE_GETUID', cc.has_function('getuid') ? '1' : false)
148ed6184dfSmrgconf_data.set('HAVE_GETEUID', cc.has_function('geteuid') ? '1' : false)
149ed6184dfSmrgconf_data.set('HAVE_ISASTREAM', cc.has_function('isastream') ? '1' : false)
150ed6184dfSmrgconf_data.set('HAVE_ISSETUGID', cc.has_function('issetugid') ? '1' : false)
151ed6184dfSmrgconf_data.set('HAVE_GETIFADDRS', cc.has_function('getifaddrs') ? '1' : false)
152ed6184dfSmrgconf_data.set('HAVE_GETPEEREID', cc.has_function('getpeereid') ? '1' : false)
153ed6184dfSmrgconf_data.set('HAVE_GETPEERUCRED', cc.has_function('getpeerucred') ? '1' : false)
154ed6184dfSmrgconf_data.set('HAVE_GETPROGNAME', cc.has_function('getprogname') ? '1' : false)
155ed6184dfSmrgconf_data.set('HAVE_GETZONEID', cc.has_function('getzoneid') ? '1' : false)
156ed6184dfSmrgconf_data.set('HAVE_MEMFD_CREATE', cc.has_function('memfd_create') ? '1' : false)
157ed6184dfSmrgconf_data.set('HAVE_MKOSTEMP', cc.has_function('mkostemp') ? '1' : false)
158ed6184dfSmrgconf_data.set('HAVE_MMAP', cc.has_function('mmap') ? '1' : false)
159ed6184dfSmrgconf_data.set('HAVE_POLL', cc.has_function('poll') ? '1' : false)
160ed6184dfSmrgconf_data.set('HAVE_POLLSET_CREATE', cc.has_function('pollset_create') ? '1' : false)
161ed6184dfSmrgconf_data.set('HAVE_POSIX_FALLOCATE', cc.has_function('posix_fallocate') ? '1' : false)
162ed6184dfSmrgconf_data.set('HAVE_PORT_CREATE', cc.has_function('port_create') ? '1' : false)
163ed6184dfSmrgconf_data.set('HAVE_REALLOCARRAY', cc.has_function('reallocarray', dependencies: libbsd_dep) ? '1' : false)
164ed6184dfSmrgconf_data.set('HAVE_SETEUID', cc.has_function('seteuid') ? '1' : false)
165ed6184dfSmrgconf_data.set('HAVE_SETITIMER', cc.has_function('setitimer') ? '1' : false)
166ed6184dfSmrgconf_data.set('HAVE_SHMCTL64', cc.has_function('shmctl64') ? '1' : false)
167ed6184dfSmrgconf_data.set('HAVE_SIGACTION', cc.has_function('sigaction') ? '1' : false)
168ed6184dfSmrgconf_data.set('HAVE_SIGPROCMASK', cc.has_function('sigprocmask') ? '1' : false)
169f2346221Smrg# HAVE_SOCKLEN_T is used by xtrans when IPv6 is disabled
170f2346221Smrgconf_data.set('HAVE_SOCKLEN_T', cc.has_type('socklen_t', prefix: '#include <sys/socket.h>') ? '1' : false)
171ed6184dfSmrgconf_data.set('HAVE_STRCASECMP', cc.has_function('strcasecmp') ? '1' : false)
172ed6184dfSmrgconf_data.set('HAVE_STRCASESTR', cc.has_function('strcasestr') ? '1' : false)
173ed6184dfSmrgconf_data.set('HAVE_STRLCAT', cc.has_function('strlcat', dependencies: libbsd_dep) ? '1' : false)
174ed6184dfSmrgconf_data.set('HAVE_STRLCPY', cc.has_function('strlcpy', dependencies: libbsd_dep) ? '1' : false)
175ed6184dfSmrgconf_data.set('HAVE_STRNCASECMP', cc.has_function('strncasecmp') ? '1' : false)
176ed6184dfSmrgconf_data.set('HAVE_STRNDUP', cc.has_function('strndup') and cc.has_header_symbol('string.h', 'strndup') ? '1' : false)
17754b5899cSmrg# HAVE_STRUCT_SOCKADDR_STORAGE is used by xtrans >= 1.6
17854b5899cSmrgconf_data.set('HAVE_STRUCT_SOCKADDR_STORAGE', cc.has_type('struct sockaddr_storage', prefix: '#include <sys/socket.h>') ? '1' : false)
179ed6184dfSmrgconf_data.set('HAVE_TIMINGSAFE_MEMCMP', cc.has_function('timingsafe_memcmp') ? '1' : false)
180ed6184dfSmrgconf_data.set('HAVE_VASPRINTF', cc.has_function('vasprintf') ? '1' : false)
181ed6184dfSmrgconf_data.set('HAVE_VSNPRINTF', cc.has_function('vsnprintf') ? '1' : false)
182ed6184dfSmrgconf_data.set('HAVE_WALKCONTEXT', cc.has_function('walkcontext') ? '1' : false)
1831b5d61b8Smrg
1841b5d61b8Smrgconf_data.set('BUSFAULT', conf_data.get('HAVE_SIGACTION'))
1851b5d61b8Smrg
1861b5d61b8Smrg# Don't let X dependencies typedef 'pointer'
1871b5d61b8Smrgconf_data.set('_XTYPEDEF_POINTER', '1')
1881b5d61b8Smrgconf_data.set('_XITYPEDEF_POINTER', '1')
1891b5d61b8Smrg
1901b5d61b8Smrgconf_data.set('LISTEN_TCP', get_option('listen_tcp'))
1911b5d61b8Smrgconf_data.set('LISTEN_UNIX', get_option('listen_unix'))
1921b5d61b8Smrgconf_data.set('LISTEN_LOCAL', get_option('listen_local'))
1931b5d61b8Smrg
194ed6184dfSmrgif cc.has_header_symbol('sys/socket.h', 'SCM_RIGHTS')
195ed6184dfSmrg  conf_data.set('XTRANS_SEND_FDS', '1')
196ed6184dfSmrgendif
1971b5d61b8Smrg
198ed6184dfSmrgif conf_data.get('HAVE_GETPEEREID').to_int() == 0 and conf_data.get('HAVE_GETPEERUCRED').to_int() == 0
199ed6184dfSmrg    if not cc.has_header_symbol('sys/socket.h', 'SO_PEERCRED')
200ed6184dfSmrg        conf_data.set('NO_LOCAL_CLIENT_CRED', 1)
201ed6184dfSmrg    endif
202ed6184dfSmrgendif
203ed6184dfSmrg
204ed6184dfSmrgconf_data.set('TCPCONN', '1')
205ed6184dfSmrgconf_data.set('UNIXCONN', host_machine.system() != 'windows' ? '1' : false)
206ed6184dfSmrgconf_data.set('IPv6', build_ipv6 ? '1' : false)
2071b5d61b8Smrg
2081b5d61b8Smrgconf_data.set('BIGREQS', '1')
209a1e1cf94Smrgconf_data.set('COMPOSITE', '1')
2101b5d61b8Smrgconf_data.set('DAMAGE', '1')
2111b5d61b8Smrgconf_data.set('DBE', '1')
212ed6184dfSmrgconf_data.set('DGA', build_dga ? '1' : false)
213ed6184dfSmrgconf_data.set('DPMSExtension', build_dpms ? '1' : false)
214ed6184dfSmrgconf_data.set('DRI2', build_dri2 ? '1' : false)
215ed6184dfSmrgconf_data.set('DRI3', build_dri3 ? '1' : false)
216ed6184dfSmrgif build_glx
217ed6184dfSmrg    conf_data.set_quoted('DRI_DRIVER_PATH', dri_dep.get_pkgconfig_variable('dridriverdir'))
218ed6184dfSmrgendif
219ed6184dfSmrgconf_data.set('HAS_SHM', build_mitshm ? '1' : false)
220ed6184dfSmrgconf_data.set('MITSHM', build_mitshm ? '1' : false)
221ed6184dfSmrgconf_data.set('PANORAMIX', build_xinerama ? '1' : false)
2221b5d61b8Smrgconf_data.set('PRESENT', '1')
2231b5d61b8Smrgconf_data.set('RANDR', '1')
224ed6184dfSmrgconf_data.set('RES', build_res ? '1' : false)
2251b5d61b8Smrgconf_data.set('RENDER', '1')
226ed6184dfSmrgconf_data.set('SCREENSAVER', build_screensaver ? '1' : false)
2271b5d61b8Smrgconf_data.set('SHAPE', '1')
228ed6184dfSmrgconf_data.set('XACE', build_xace ? '1' : false)
2291b5d61b8Smrgconf_data.set('XCMISC', '1')
230ed6184dfSmrgconf_data.set('XCSECURITY', build_xsecurity ? '1' : false)
231ed6184dfSmrgconf_data.set('XDMCP', xdmcp_dep.found() ? '1' : false)
232ed6184dfSmrgconf_data.set('XF86BIGFONT', build_xf86bigfont ? '1' : false)
233ed6184dfSmrgconf_data.set('XF86DRI', build_dri1 ? '1' : false)
234ed6184dfSmrgconf_data.set('XF86VIDMODE', 1)
2351b5d61b8Smrgconf_data.set('XFIXES', '1')
236ed6184dfSmrgconf_data.set('XFreeXDGA', build_dga ? '1' : false)
237ed6184dfSmrgconf_data.set('XINERAMA', build_xinerama ? '1' : false)
2381b5d61b8Smrgconf_data.set('XINPUT', '1')
2391b5d61b8Smrgconf_data.set('XRECORD', '1')
240ed6184dfSmrgconf_data.set('XSELINUX', build_xselinux ? '1' : false)
2411b5d61b8Smrgconf_data.set('XSYNC', '1')
2421b5d61b8Smrgconf_data.set('XTEST', '1')
243ed6184dfSmrgconf_data.set('XV', build_xv ? '1' : false)
244ed6184dfSmrgconf_data.set('XvExtension', build_xv ? '1' : false)
245ed6184dfSmrgconf_data.set('XvMCExtension', build_xvmc ? '1' : false)
2461b5d61b8Smrg
247ed6184dfSmrgconf_data.set('HAVE_SHA1_IN_' + sha1.to_upper(), '1', description: 'Use @0@ SHA1 functions'.format(sha1))
248ed6184dfSmrgconf_data.set('HAVE_LIBUNWIND', get_option('libunwind'))
2491b5d61b8Smrg
250ed6184dfSmrgconf_data.set('HAVE_APM', (build_apm or build_acpi) ? '1' : false)
251ed6184dfSmrgconf_data.set('HAVE_ACPI', build_acpi ? '1' : false)
2521b5d61b8Smrg
253ed6184dfSmrgconf_data.set('DDXOSVERRORF', build_xwin ? '1' : false)
254ed6184dfSmrgconf_data.set('DDXBEFORERESET', build_xwin ? '1' : false)
2551b5d61b8Smrgenable_debugging = get_option('buildtype') == 'debug'
256ed6184dfSmrgconf_data.set('DEBUG', enable_debugging ? '1' : false)
2571b5d61b8Smrg
2581b5d61b8Smrgconf_data.set_quoted('XVENDORNAME', get_option('vendor_name'))
2591b5d61b8Smrgconf_data.set_quoted('XVENDORNAMESHORT', get_option('vendor_name_short'))
2601b5d61b8Smrgconf_data.set_quoted('__VENDORDWEBSUPPORT__', get_option('vendor_web'))
2611b5d61b8Smrgconf_data.set_quoted('BUILDERADDR', get_option('builder_addr'))
2621b5d61b8Smrgconf_data.set_quoted('BUILDERSTRING', get_option('builder_string'))
2631b5d61b8Smrg
264ed6184dfSmrgif build_rootless
265ed6184dfSmrg    conf_data.set('ROOTLESS', build_rootless ? '1' : false)
266ed6184dfSmrg    conf_data.set('ROOTLESS_WORKAROUND', 1)
267ed6184dfSmrg    conf_data.set('ROOTLESS_SAFEALPHA', 1)
268ed6184dfSmrgendif
269ed6184dfSmrg
2701b5d61b8Smrg#
2711b5d61b8Smrg# for xorg-server.h only
2721b5d61b8Smrg#
2731b5d61b8Smrgdefines_svr4 = '''#if !defined(SVR4) && !defined(__svr4__) && !defined(__SVR4)
2741b5d61b8Smrg#error "I am not SVR4"
2751b5d61b8Smrg#endif
2761b5d61b8Smrg'''
2771b5d61b8Smrg
2781b5d61b8Smrg# BSD specifics
2791b5d61b8Smrgsupports_pccons = false
2801b5d61b8Smrgsupports_pcvt = false
2811b5d61b8Smrgsupports_syscons = false
2821b5d61b8Smrgsupports_wscons = false
2831b5d61b8Smrgcsrg_based = false
2841b5d61b8Smrg
285ed6184dfSmrgif host_machine.system() == 'freebsd' or host_machine.system() == 'dragonfly'
2861b5d61b8Smrg  supports_pccons = true
2871b5d61b8Smrg  supports_pcvt = true
2881b5d61b8Smrg  supports_syscons = true
2891b5d61b8Smrg  csrg_based = true
2901b5d61b8Smrgendif
2911b5d61b8Smrg
2921b5d61b8Smrgif host_machine.system() == 'kfreebsd'
2931b5d61b8Smrg  supports_pccons = true
2941b5d61b8Smrg  supports_pcvt = true
2951b5d61b8Smrg  supports_syscons = true
2961b5d61b8Smrgendif
2971b5d61b8Smrg
2981b5d61b8Smrgif host_machine.system() == 'netbsd'
2991b5d61b8Smrg  supports_pccons = true
3001b5d61b8Smrg  supports_pcvt = true
3011b5d61b8Smrg  supports_wscons = true
3021b5d61b8Smrg  csrg_based = true
3031b5d61b8Smrgendif
3041b5d61b8Smrg
3051b5d61b8Smrgif host_machine.system() == 'openbsd'
3061b5d61b8Smrg  supports_pcvt = true
3071b5d61b8Smrg  supports_wscons = true
3081b5d61b8Smrg  csrg_based = true
3091b5d61b8Smrgendif
3101b5d61b8Smrg
311ed6184dfSmrgif host_machine.system() == 'darwin'
312ed6184dfSmrg  csrg_based = true
313ed6184dfSmrgendif
314ed6184dfSmrg
315ed6184dfSmrgconf_data.set('SVR4', cc.compiles(defines_svr4) ? '1' : false)
3161b5d61b8Smrgconf_data.set_quoted('XKB_DFLT_RULES', get_option('xkb_default_rules'))
317ed6184dfSmrgconf_data.set('XORGSERVER', build_xorg ? '1' : false)
3181b5d61b8Smrgconf_data.set_quoted('XCONFIGFILE', 'xorg.conf')
3191b5d61b8Smrgconf_data.set_quoted('__XSERVERNAME__', 'Xorg')
320ed6184dfSmrgconf_data.set('WITH_VGAHW', build_vgahw ? '1' : false)
321ed6184dfSmrgconf_data.set('CSRG_BASED', csrg_based ? '1' : false)
322ed6184dfSmrgconf_data.set('PCCONS_SUPPORT', supports_pccons ? '1' : false)
323ed6184dfSmrgconf_data.set('PCVT_SUPPORT', supports_pcvt ? '1' : false)
324ed6184dfSmrgconf_data.set('SYSCONS_SUPPORT', supports_syscons ? '1' : false)
325ed6184dfSmrgconf_data.set('WSCONS_SUPPORT', supports_wscons ? '1' : false)
326ed6184dfSmrgconf_data.set('XSERVER_LIBPCIACCESS', get_option('pciaccess') ? '1' : false)
327ed6184dfSmrgconf_data.set('XSERVER_PLATFORM_BUS', build_udev_kms ? '1' : false)
3281b5d61b8Smrg
3291b5d61b8Smrgconfigure_file(output : 'dix-config.h',
3301b5d61b8Smrg               configuration : conf_data)
3311b5d61b8Smrg
3321b5d61b8Smrgconfigure_file(output : 'xorg-server.h',
3331b5d61b8Smrg               input : 'xorg-server.h.meson.in',
3341b5d61b8Smrg               configuration : conf_data,
335ed6184dfSmrg               install: build_xorg,
3361b5d61b8Smrg               install_dir: xorgsdkdir)
3371b5d61b8Smrg
3381b5d61b8Smrgversion_data = configuration_data()
3391b5d61b8Smrgversion_data.set('VENDOR_RELEASE', '@0@'.format(release))
3401b5d61b8Smrgversion_data.set_quoted('VENDOR_NAME', get_option('vendor_name'))
3411b5d61b8Smrgversion_data.set_quoted('VENDOR_NAME_SHORT', get_option('vendor_name_short'))
3421b5d61b8Smrgversion_data.set_quoted('VENDOR_WEB', get_option('vendor_web'))
3431b5d61b8Smrgversion_data.set_quoted('VENDOR_MAN_VERSION', 'Version @0@.@1@.@2@'.format(major, minor, patch))
3441b5d61b8Smrgconfigure_file(output : 'version-config.h',
3451b5d61b8Smrg               configuration : version_data)
3461b5d61b8Smrg
3471b5d61b8Smrgxkb_data = configuration_data()
3481b5d61b8Smrg
3491b5d61b8Smrgxkb_data.set_quoted('XKB_BIN_DIRECTORY', xkb_bin_dir)
3501b5d61b8Smrgxkb_data.set_quoted('XKB_BASE_DIRECTORY', xkb_dir)
3511b5d61b8Smrgxkb_data.set_quoted('XKB_DFLT_RULES', get_option('xkb_default_rules'))
3521b5d61b8Smrgxkb_data.set_quoted('XKB_DFLT_MODEL', get_option('xkb_default_model'))
3531b5d61b8Smrgxkb_data.set_quoted('XKB_DFLT_LAYOUT', get_option('xkb_default_layout'))
3541b5d61b8Smrgxkb_data.set_quoted('XKB_DFLT_VARIANT', get_option('xkb_default_variant'))
3551b5d61b8Smrgxkb_data.set_quoted('XKB_DFLT_OPTIONS', get_option('xkb_default_options'))
356ed6184dfSmrgxkb_data.set_quoted('XKM_OUTPUT_DIR', xkb_output_dir + '/')
3571b5d61b8Smrg
3581b5d61b8Smrgconfigure_file(output : 'xkb-config.h',
3591b5d61b8Smrg               configuration : xkb_data)
3601b5d61b8Smrg
3611b5d61b8Smrgxorg_data = configuration_data()
3621b5d61b8Smrg
3631b5d61b8Smrgxorg_data.set_quoted('XORG_BIN_DIRECTORY', get_option('bindir'))
3641b5d61b8Smrgxorg_data.set('XORG_VERSION_CURRENT', release)
3651b5d61b8Smrgxorg_data.set_quoted('XF86CONFIGFILE', 'xorg.conf')
3661b5d61b8Smrgxorg_data.set_quoted('XCONFIGFILE', 'xorg.conf')
3671b5d61b8Smrgxorg_data.set_quoted('XCONFIGDIR', 'xorg.conf.d')
3681b5d61b8Smrgxorg_data.set_quoted('DEFAULT_XDG_DATA_HOME', '.local/share')
3691b5d61b8Smrgxorg_data.set_quoted('DEFAULT_XDG_DATA_HOME_LOGDIR', 'xorg')
3701b5d61b8Smrgxorg_data.set_quoted('DEFAULT_LOGDIR', log_dir)
3711b5d61b8Smrgxorg_data.set_quoted('DEFAULT_LOGPREFIX', 'Xorg.')
3721b5d61b8Smrgxorg_data.set_quoted('DEFAULT_MODULE_PATH', join_paths(get_option('prefix'), module_dir))
3731b5d61b8Smrgxorg_data.set_quoted('DEFAULT_LIBRARY_PATH', join_paths(get_option('prefix'), get_option('libdir')))
3741b5d61b8Smrgxorg_data.set_quoted('__XSERVERNAME__', 'Xorg')
375ed6184dfSmrgxorg_data.set('XSERVER_LIBPCIACCESS', get_option('pciaccess') ? '1' : false)
3761b5d61b8Smrgxorg_data.set_quoted('PCI_TXT_IDS_PATH', '')
377ed6184dfSmrgxorg_data.set('XSERVER_PLATFORM_BUS', build_udev_kms ? '1' : false)
378ed6184dfSmrgxorg_data.set('WSCONS_SUPPORT',
379ed6184dfSmrg              host_machine.system() == 'netbsd' or host_machine.system() == 'openbsd' ? '1' : false)
380ed6184dfSmrgxorg_data.set('HAVE_STROPTS_H', cc.has_header('stropts.h') ? '1' : false)
381ed6184dfSmrgxorg_data.set('HAVE_SYS_KD_H', cc.has_header('sys/kd.h') ? '1' : false)
382ed6184dfSmrgxorg_data.set('HAVE_SYS_VT_H', cc.has_header('sys/vt.h') ? '1' : false)
383ed6184dfSmrg
384ed6184dfSmrgif host_machine.system() == 'freebsd' or host_machine.system() == 'dragonfly'
3851b5d61b8Smrg    if host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64'
386ed6184dfSmrg        xorg_data.set('USE_DEV_IO', '1')
3871b5d61b8Smrg    endif
3881b5d61b8Smrgelif host_machine.system() == 'netbsd'
3891b5d61b8Smrg    if host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64'
390ed6184dfSmrg        xorg_data.set('USE_I386_IOPL', '1')
3911b5d61b8Smrg    endif
3921b5d61b8Smrgelif host_machine.system() == 'openbsd'
3931b5d61b8Smrg    if host_machine.cpu_family() == 'x86'
394ed6184dfSmrg        xorg_data.set('USE_I386_IOPL', '1')
3951b5d61b8Smrg    endif
3961b5d61b8Smrg    if host_machine.cpu_family() == 'x86_64'
397ed6184dfSmrg        xorg_data.set('USE_AMD64_IOPL', '1')
3981b5d61b8Smrg    endif
3991b5d61b8Smrgendif
4001b5d61b8Smrg
4011b5d61b8Smrgconfigure_file(output : 'xorg-config.h',
4021b5d61b8Smrg               input : 'xorg-config.h.meson.in',
4031b5d61b8Smrg               configuration : xorg_data)
4041b5d61b8Smrg
4051b5d61b8Smrgxwin_data = configuration_data()
4061b5d61b8Smrgxwin_data.set_quoted('DEFAULT_LOGDIR', log_dir)
407ed6184dfSmrgxwin_data.set('HAS_WINSOCK', host_machine.system() == 'windows' ? '1' : false,
408ed6184dfSmrg              description: 'Use Windows sockets')
409ed6184dfSmrgxwin_data.set('HAS_DEVWINDOWS', host_machine.system() == 'cygwin' ? '1' : false,
410ed6184dfSmrg              description: 'Has /dev/windows for signaling new win32 messages')
411ed6184dfSmrgxwin_data.set('RELOCATE_PROJECTROOT', host_machine.system() == 'windows' ? '1' : false,
412ed6184dfSmrg              description: 'Make paths relative to the xserver installation location')
4131b5d61b8Smrg# XXX: these three are all the same as DEBUG so we should just change to that
4141b5d61b8Smrgxwin_data.set10('CYGDEBUG', enable_debugging)
4151b5d61b8Smrgxwin_data.set10('CYGWINDOWING_DEBUG',enable_debugging)
4161b5d61b8Smrgxwin_data.set10('CYGMULTIWINDOW_DEBUG', enable_debugging)
4171b5d61b8Smrg
4181b5d61b8Smrgconfigure_file(output : 'xwin-config.h',
4191b5d61b8Smrg               input : 'xwin-config.h.meson.in',
4201b5d61b8Smrg               configuration : xwin_data)
4211b5d61b8Smrg
422ed6184dfSmrgdtrace_hdr = []
423ed6184dfSmrgdtrace_tmpl = files('Xserver.d')
424ed6184dfSmrgif with_dtrace
425ed6184dfSmrg    dtrace_header = generator(dtrace,
426ed6184dfSmrg        output: '@BASENAME@-dtrace.h',
427ed6184dfSmrg        arguments: ['-h', '-s', '@INPUT@', '-o', '@OUTPUT@']
428ed6184dfSmrg    )
4291b5d61b8Smrg
430ed6184dfSmrg    dtrace_hdr += dtrace_header.process(dtrace_tmpl)
431ed6184dfSmrgendif
4321b5d61b8Smrg
4331b5d61b8Smrgif build_xorg
4341b5d61b8Smrg    install_data(
4351b5d61b8Smrg        [
4361b5d61b8Smrg            'XIstubs.h',
4371b5d61b8Smrg            'Xprintf.h',
4381b5d61b8Smrg            'callback.h',
4391b5d61b8Smrg            'client.h',
4401b5d61b8Smrg            'closestr.h',
4411b5d61b8Smrg            'closure.h',
4421b5d61b8Smrg            'colormap.h',
4431b5d61b8Smrg            'colormapst.h',
4441b5d61b8Smrg            'hotplug.h',
4451b5d61b8Smrg            'cursor.h',
4461b5d61b8Smrg            'cursorstr.h',
4471b5d61b8Smrg            'dix.h',
4481b5d61b8Smrg            'dixaccess.h',
4491b5d61b8Smrg            'dixevents.h',
4501b5d61b8Smrg            'dixfont.h',
4511b5d61b8Smrg            'dixfontstr.h',
4521b5d61b8Smrg            'dixgrabs.h',
4531b5d61b8Smrg            'dixstruct.h',
4541b5d61b8Smrg            'events.h',
4551b5d61b8Smrg            'exevents.h',
4561b5d61b8Smrg            'extension.h',
4571b5d61b8Smrg            'extinit.h',
4581b5d61b8Smrg            'extnsionst.h',
459ed6184dfSmrg            'fourcc.h',
4601b5d61b8Smrg            'gc.h',
4611b5d61b8Smrg            'gcstruct.h',
4621b5d61b8Smrg            'globals.h',
4631b5d61b8Smrg            'glx_extinit.h',
4641b5d61b8Smrg            'glxvndabi.h',
4651b5d61b8Smrg            'input.h',
4661b5d61b8Smrg            'inputstr.h',
4671b5d61b8Smrg            'list.h',
4681b5d61b8Smrg            'misc.h',
4691b5d61b8Smrg            'miscstruct.h',
4701b5d61b8Smrg            'opaque.h',
4711b5d61b8Smrg            'nonsdk_extinit.h',
4721b5d61b8Smrg            'optionstr.h',
4731b5d61b8Smrg            'os.h',
4741b5d61b8Smrg            'pixmap.h',
4751b5d61b8Smrg            'pixmapstr.h',
4761b5d61b8Smrg            'privates.h',
4771b5d61b8Smrg            'property.h',
4781b5d61b8Smrg            'propertyst.h',
4791b5d61b8Smrg            'ptrveloc.h',
4801b5d61b8Smrg            'region.h',
4811b5d61b8Smrg            'regionstr.h',
4821b5d61b8Smrg            'registry.h',
4831b5d61b8Smrg            'resource.h',
4841b5d61b8Smrg            'rgb.h',
4851b5d61b8Smrg            'screenint.h',
4861b5d61b8Smrg            'scrnintstr.h',
4871b5d61b8Smrg            'selection.h',
4881b5d61b8Smrg            'servermd.h',
4891b5d61b8Smrg            'validate.h',
4901b5d61b8Smrg            'displaymode.h',
4911b5d61b8Smrg            'window.h',
4921b5d61b8Smrg            'windowstr.h',
4931b5d61b8Smrg            'xkbfile.h',
4941b5d61b8Smrg            'xkbsrv.h',
4951b5d61b8Smrg            'xkbstr.h',
4961b5d61b8Smrg            'xkbrules.h',
4971b5d61b8Smrg            'Xprintf.h',
4981b5d61b8Smrg            'xserver_poll.h',
4991b5d61b8Smrg            'xserver-properties.h',
5001b5d61b8Smrg        ],
5011b5d61b8Smrg        install_dir: xorgsdkdir,
5021b5d61b8Smrg    )
5031b5d61b8Smrgendif
504