1fe8aea9eSmrgproject('xf86-video-intel', 'c',
2fe8aea9eSmrg	version : '2.99.917',
3fe8aea9eSmrg	default_options: [
4fe8aea9eSmrg	  'warning_level=2',
5fe8aea9eSmrg	  'c_std=gnu99',
6fe8aea9eSmrg	],
7fe8aea9eSmrg	license : 'MIT',
8fe8aea9eSmrg	meson_version : '>0.40.0')
9fe8aea9eSmrg
10fe8aea9eSmrgconfig = configuration_data()
11fe8aea9eSmrg
12fe8aea9eSmrgversion = meson.project_version().split('.')
13fe8aea9eSmrgconfig.set('PACKAGE_VERSION_MAJOR', version[0])
14fe8aea9eSmrgconfig.set('PACKAGE_VERSION_MINOR', version[1])
15fe8aea9eSmrgconfig.set('PACKAGE_VERSION_PATCHLEVEL', version[2])
16fe8aea9eSmrg
17fe8aea9eSmrgconfig.set_quoted('LIBEXEC_PATH', join_paths(get_option('prefix'),
18fe8aea9eSmrg					     get_option('libexecdir')))
19fe8aea9eSmrg
20fe8aea9eSmrgcc = meson.get_compiler('c')
21fe8aea9eSmrg
22fe8aea9eSmrgxorg = dependency('xorg-server', version : '>= 1.6', required : true)
23fe8aea9eSmrgpthreads = dependency('threads', required : true)
24fe8aea9eSmrgpciaccess = dependency('pciaccess', version : '>= 0.10', required : true)
25fe8aea9eSmrg
26fe8aea9eSmrgx11 = dependency('x11', required : false)
27fe8aea9eSmrgxfixes = dependency('xfixes', required : false)
28fe8aea9eSmrgpng = dependency('libpng', required : false)
29fe8aea9eSmrg
30fe8aea9eSmrgif not cc.has_function('clock_gettime', args : '-lrt')
31fe8aea9eSmrg  error('clock_gettime() missing')
32fe8aea9eSmrgendif
33fe8aea9eSmrg
34fe8aea9eSmrgif cc.has_function('getline')
35fe8aea9eSmrg  config.set('HAVE_GETLINE', 1)
36fe8aea9eSmrgendif
37fe8aea9eSmrg
38fe8aea9eSmrgif cc.has_function('strndup')
39fe8aea9eSmrg  config.set('HAVE_STRNDUP', 1)
40fe8aea9eSmrgendif
41fe8aea9eSmrg
42fe8aea9eSmrgif cc.has_function('strcasecmp')
43fe8aea9eSmrg  config.set('HAVE_STRCASECMP', 1)
44fe8aea9eSmrgendif
45fe8aea9eSmrg
46fe8aea9eSmrgdependency('xproto', required : true)
47fe8aea9eSmrgdependency('fontsproto', required : true)
48fe8aea9eSmrgdependency('damageproto', required : true)
49fe8aea9eSmrg
50fe8aea9eSmrgif cc.has_header_symbol('xorg-server.h', 'RANDR',
51fe8aea9eSmrg			dependencies : xorg)
52fe8aea9eSmrg  dependency('randrproto', required : true)
53fe8aea9eSmrgendif
54fe8aea9eSmrgif cc.has_header_symbol('xorg-server.h', 'RENDER',
55fe8aea9eSmrg			dependencies : xorg)
56fe8aea9eSmrg  dependency('renderproto', required : true)
57fe8aea9eSmrgendif
58fe8aea9eSmrgif cc.has_header_symbol('xorg-server.h', 'DPMSExtension',
59fe8aea9eSmrg			dependencies : xorg)
60fe8aea9eSmrg  dependency('xextproto', required : true)
61fe8aea9eSmrgendif
62fe8aea9eSmrg
63fe8aea9eSmrgwith_tools = get_option('tools')
64fe8aea9eSmrg
65fe8aea9eSmrgconfig.set('USE_GIT_DESCRIBE', 1)
66fe8aea9eSmrgconfig.set('BUILDER_DESCRIPTION', 1)
67fe8aea9eSmrg
68fe8aea9eSmrgatomic_primitives = 'none'
69fe8aea9eSmrg
70fe8aea9eSmrgatomic_primitives_code = '''
71fe8aea9eSmrgint atomic_add(int i) {
72fe8aea9eSmrg    return __sync_fetch_and_add (&i, 1);
73fe8aea9eSmrg}
74fe8aea9eSmrgint atomic_cmpxchg(int i, int j, int k) {
75fe8aea9eSmrg    return __sync_val_compare_and_swap (&i, j, k);
76fe8aea9eSmrg}
77fe8aea9eSmrgint main(void) {
78fe8aea9eSmrg    return 0;
79fe8aea9eSmrg}'''
80fe8aea9eSmrgif cc.links(atomic_primitives_code, name : 'atomic primitives')
81fe8aea9eSmrg  atomic_primitives = 'intel'
82fe8aea9eSmrg  config.set('HAVE_ATOMIC_PRIMITIVES', 1)
83fe8aea9eSmrgendif
84fe8aea9eSmrg
85fe8aea9eSmrgif atomic_primitives == 'none' and cc.has_header('atomic_ops.h')
86fe8aea9eSmrg  atomic_primitives = 'libatomic-ops'
87fe8aea9eSmrg  config.set('HAVE_LIB_ATOMIC_OPS', 1)
88fe8aea9eSmrgendif
89fe8aea9eSmrg
90fe8aea9eSmrgif atomic_primitives == 'none'
91fe8aea9eSmrg  error('xf86-video-intel depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package.')
92fe8aea9eSmrgendif
93fe8aea9eSmrg
94fe8aea9eSmrglibudev = dependency('libudev', required : false)
95fe8aea9eSmrgif libudev.found()
96fe8aea9eSmrg  config.set('HAVE_UDEV', 1)
97fe8aea9eSmrgendif
98fe8aea9eSmrg
99fe8aea9eSmrgcpuid_code = '''
100fe8aea9eSmrg#include <cpuid.h>
101fe8aea9eSmrg#include <stddef.h>
102fe8aea9eSmrgint main(void) {
103fe8aea9eSmrg    int eax, ebx, ecx, edx;
104fe8aea9eSmrg    if (__get_cpuid_max(0, NULL) < 4)
105fe8aea9eSmrg       return 0;
106fe8aea9eSmrg    __cpuid_count(4, 0, eax, ebx, ecx, edx);
107fe8aea9eSmrg    return 0;
108fe8aea9eSmrg}'''
109fe8aea9eSmrgif cc.links(cpuid_code, name : '__cpuid()')
110fe8aea9eSmrg  config.set('HAVE_CPUID_H', 1)
111fe8aea9eSmrgendif
112fe8aea9eSmrg
113fe8aea9eSmrghas_shm = (cc.has_header('sys/ipc.h') and
114fe8aea9eSmrg	   cc.has_header('X11/extensions/XShm.h') and
115fe8aea9eSmrg	   cc.has_header('X11/extensions/shmproto.h') and
116fe8aea9eSmrg	   cc.has_header('X11/extensions/shmstr.h'))
117fe8aea9eSmrgif has_shm
118fe8aea9eSmrg  config.set('HAVE_MIT_SHM', 1)
119fe8aea9eSmrg  config.set('HAVE_X11_EXTENSIONS_SHMPROTO_H', 1)
120fe8aea9eSmrg  config.set('HAVE_X11_EXTENSIONS_SHMSTR_H', 1)
121fe8aea9eSmrgendif
122fe8aea9eSmrg
123fe8aea9eSmrgif cc.has_header('X11/extensions/Xinerama.h')
124fe8aea9eSmrg  config.set('HAVE_X11_EXTENSIONS_XINERAMA_H', 1)
125fe8aea9eSmrgendif
126fe8aea9eSmrg
127fe8aea9eSmrgif cc.has_header('X11/extensions/dpmsconst.h')
128fe8aea9eSmrg  config.set('HAVE_X11_EXTENSIONS_DPMSCONST_H', 1)
129fe8aea9eSmrgendif
130fe8aea9eSmrg
131fe8aea9eSmrgpixman = dependency('pixman-1', version : '>= 0.16.0', required : true)
132fe8aea9eSmrg
133fe8aea9eSmrgif pixman.version() >= '0.24.0'
134fe8aea9eSmrg  config.set('HAS_PIXMAN_TRIANGLES', 1)
135fe8aea9eSmrgendif
136fe8aea9eSmrgif pixman.version() >= '0.27.1'
137fe8aea9eSmrg  config.set('HAS_PIXMAN_GLYPHS', 1)
138fe8aea9eSmrgendif
139fe8aea9eSmrg
140fe8aea9eSmrgwith_kms = get_option('kms')
141fe8aea9eSmrgif with_kms
142fe8aea9eSmrg  config.set('KMS', 1)
143fe8aea9eSmrgendif
144fe8aea9eSmrg
145fe8aea9eSmrgwith_ums = get_option('ums')
146fe8aea9eSmrgif with_ums
147fe8aea9eSmrg  has_ums = cc.has_header('vgaHW.h',
148fe8aea9eSmrg			  dependencies : xorg)
149fe8aea9eSmrg
150fe8aea9eSmrg  # Currently 'required' doesn't work for cc.has_header() & co.
151fe8aea9eSmrg  if not has_ums
152fe8aea9eSmrg    error('UMS dependencies not met')
153fe8aea9eSmrg  endif
154fe8aea9eSmrg
155fe8aea9eSmrg  config.set('UMS', 1)
156fe8aea9eSmrgendif
157fe8aea9eSmrg
158fe8aea9eSmrgwith_xvmc = get_option('xvmc')
159fe8aea9eSmrgif with_xvmc
160fe8aea9eSmrg  dependency('xvmc', required : true)
161fe8aea9eSmrg  dependency('dri2proto', required : true)
162fe8aea9eSmrg  dependency('x11', required : true)
163fe8aea9eSmrg  dependency('x11-xcb', required : true)
164fe8aea9eSmrg  dependency('xcb-dri2', required : true)
165fe8aea9eSmrg  dependency('xcb-aux', required : true)
166fe8aea9eSmrg  dependency('libdrm_intel', required : true)
167fe8aea9eSmrg
168fe8aea9eSmrg  config.set('ENABLE_XVMC', 1)
169fe8aea9eSmrgendif
170fe8aea9eSmrg
171fe8aea9eSmrgwith_valgrind = get_option('valgrind')
172fe8aea9eSmrgif with_valgrind
173fe8aea9eSmrg  message('Checking Valgrind support')
174fe8aea9eSmrg  valgrind = dependency('valgrind', required : true)
175fe8aea9eSmrg  config.set('HAVE_VALGRIND', 1)
176fe8aea9eSmrgendif
177fe8aea9eSmrg
178fe8aea9eSmrginc = include_directories([ '.', 'src', 'xvmc', 'src/render_program', ])
179fe8aea9eSmrg
180fe8aea9eSmrgadd_project_arguments('-include', 'config.h', language : 'c')
181fe8aea9eSmrg
182fe8aea9eSmrgman_config = configuration_data()
183fe8aea9eSmrgman_config.set('appmansuffix', '1')
184fe8aea9eSmrgman_config.set('filemansuffix', '5')
185fe8aea9eSmrgman_config.set('drivermansuffix', '4')
186fe8aea9eSmrgman_config.set('miscmansuffix', '7')
187fe8aea9eSmrgman_config.set('xservername',
188fe8aea9eSmrg	       cc.get_define('__XSERVERNAME__',
189fe8aea9eSmrg			     prefix : '#include <xorg-server.h>',
190fe8aea9eSmrg			     dependencies : xorg))
191fe8aea9eSmrgman_config.set('xconfigfile',
192fe8aea9eSmrg	       cc.get_define('__XCONFIGFILE____',
193fe8aea9eSmrg			     prefix : '#include <xorg-server.h>',
194fe8aea9eSmrg			     dependencies : xorg))
195fe8aea9eSmrgman_config.set('vendorversion', '"@0@ @1@" "@2@"'.format(meson.project_name(),
196fe8aea9eSmrg							 meson.project_version(),
197fe8aea9eSmrg							 'X Version 11'))
198fe8aea9eSmrg
199fe8aea9eSmrgsubdir('src')
200fe8aea9eSmrgsubdir('tools')
201fe8aea9eSmrg
202fe8aea9eSmrgif with_xvmc
203fe8aea9eSmrg  subdir('xvmc')
204fe8aea9eSmrgendif
205fe8aea9eSmrg
206fe8aea9eSmrgsubdir('man')
207fe8aea9eSmrg
208fe8aea9eSmrgconfigure_file(output: 'config.h', install: false, configuration: config)
209