blob: 976143ad0822aab8350dd65d1b87425d8f971a8e [file] [log] [blame]
Daniel Stone8011b0f2016-11-24 15:54:51 +00001project('weston',
2 'c',
Simon Ser4a039242022-02-01 22:59:57 +01003 version: '10.0.0',
Daniel Stone8011b0f2016-11-24 15:54:51 +00004 default_options: [
Daniel Stonee2f9c1b2019-06-11 11:41:41 +01005 'warning_level=3',
Daniel Stone8011b0f2016-11-24 15:54:51 +00006 'c_std=gnu99',
Pekka Paalanen2f9ca272019-07-09 12:06:42 +03007 'b_lundef=true',
Daniel Stone8011b0f2016-11-24 15:54:51 +00008 ],
Pekka Paalanenc0565b62021-02-08 14:19:56 +02009 meson_version: '>= 0.52.1',
Daniel Stone8011b0f2016-11-24 15:54:51 +000010 license: 'MIT/Expat',
11)
12
Pekka Paalanena0f4a162020-10-27 13:27:05 +020013libweston_major = 10
Daniel Stone8011b0f2016-11-24 15:54:51 +000014
15# libweston_revision is manufactured to follow the autotools build's
16# library file naming, thanks to libtool
17version_weston = meson.project_version()
18version_weston_arr = version_weston.split('.')
19if libweston_major > version_weston_arr[0].to_int()
20 if libweston_major > version_weston_arr[0].to_int() + 1
21 error('Bad versions in meson.build: libweston_major is too high')
22 endif
23 libweston_revision = 0
24elif libweston_major == version_weston_arr[0].to_int()
25 libweston_revision = version_weston_arr[2].to_int()
26else
27 error('Bad versions in meson.build: libweston_major is too low')
28endif
29
30dir_prefix = get_option('prefix')
31dir_bin = join_paths(dir_prefix, get_option('bindir'))
32dir_data = join_paths(dir_prefix, get_option('datadir'))
Daniel Stone8011b0f2016-11-24 15:54:51 +000033dir_include_libweston = 'libweston-@0@'.format(libweston_major)
Pekka Paalanena78cf772019-03-28 16:35:56 +020034dir_include_libweston_install = join_paths(dir_include_libweston, 'libweston')
Daniel Stone8011b0f2016-11-24 15:54:51 +000035dir_lib = join_paths(dir_prefix, get_option('libdir'))
36dir_libexec = join_paths(dir_prefix, get_option('libexecdir'))
37dir_module_weston = join_paths(dir_lib, 'weston')
38dir_module_libweston = join_paths(dir_lib, 'libweston-@0@'.format(libweston_major))
39dir_data_pc = join_paths(dir_data, 'pkgconfig')
40dir_lib_pc = join_paths(dir_lib, 'pkgconfig')
41dir_man = join_paths(dir_prefix, get_option('mandir'))
Quentin Glidicb5c70d72019-07-22 22:11:38 +020042dir_protocol_libweston = join_paths('libweston-@0@'.format(libweston_major), 'protocols')
Daniel Stone8011b0f2016-11-24 15:54:51 +000043
Pekka Paalanena78cf772019-03-28 16:35:56 +020044public_inc = include_directories('include')
Pekka Paalanen4f5e3602019-04-05 17:09:28 +030045common_inc = [ include_directories('.'), public_inc ]
Pekka Paalanena78cf772019-03-28 16:35:56 +020046
Daniel Stone8011b0f2016-11-24 15:54:51 +000047pkgconfig = import('pkgconfig')
48
Daniel Stone8011b0f2016-11-24 15:54:51 +000049git_version_h = vcs_tag(
50 input: 'libweston/git-version.h.meson',
51 output: 'git-version.h',
52 fallback: version_weston
53)
54
55config_h = configuration_data()
56
57cc = meson.get_compiler('c')
58
59global_args = []
60global_args_maybe = [
Guillaume Champagne556afd12020-01-26 18:24:44 -050061 '-Wmissing-prototypes',
Eric Engestrom29a68032019-01-10 14:57:05 +000062 '-Wno-unused-parameter',
63 '-Wno-shift-negative-value', # required due to Pixman
64 '-Wno-missing-field-initializers',
Daniel Stone34473d72019-06-11 11:40:13 +010065 '-Wno-pedantic',
Pekka Paalanencde58fd2021-03-03 14:01:40 +020066 '-Wundef',
Daniel Stone8011b0f2016-11-24 15:54:51 +000067 '-fvisibility=hidden',
Daniel Stone8011b0f2016-11-24 15:54:51 +000068]
69foreach a : global_args_maybe
70 if cc.has_argument(a)
71 global_args += a
72 endif
73endforeach
Daniel Stone8011b0f2016-11-24 15:54:51 +000074add_global_arguments(global_args, language: 'c')
75
76if cc.has_header_symbol('sys/sysmacros.h', 'major')
77 config_h.set('MAJOR_IN_SYSMACROS', 1)
78elif cc.has_header_symbol('sys/mkdev.h', 'major')
79 config_h.set('MAJOR_IN_MKDEV', 1)
80endif
81
82optional_libc_funcs = [
Emmanuel Gil Peyrotdeae98e2019-07-22 15:06:20 +020083 'mkostemp', 'strchrnul', 'initgroups', 'posix_fallocate', 'memfd_create'
Daniel Stone8011b0f2016-11-24 15:54:51 +000084]
85foreach func : optional_libc_funcs
86 if cc.has_function(func)
87 config_h.set('HAVE_' + func.to_upper(), 1)
88 endif
89endforeach
90
91optional_system_headers = [
92 'linux/sync_file.h'
93]
94foreach hdr : optional_system_headers
95 if cc.has_header(hdr)
96 config_h.set('HAVE_' + hdr.underscorify().to_upper(), 1)
97 endif
98endforeach
99
100env_modmap = ''
101
102config_h.set('_GNU_SOURCE', '1')
103config_h.set('_ALL_SOURCE', '1')
Pekka Paalanen6510b2a2020-01-24 15:11:13 +0200104config_h.set('EGL_NO_X11', '1')
105config_h.set('MESA_EGL_NO_X11_HEADERS', '1')
Heiko Thiery526765d2020-10-23 22:39:35 +0200106config_h.set('EGL_NO_PLATFORM_SPECIFIC_TYPES', '1')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000107
108config_h.set_quoted('PACKAGE_STRING', 'weston @0@'.format(version_weston))
109config_h.set_quoted('PACKAGE_VERSION', version_weston)
110config_h.set_quoted('VERSION', version_weston)
111config_h.set_quoted('PACKAGE_URL', 'https://wayland.freedesktop.org')
112config_h.set_quoted('PACKAGE_BUGREPORT', 'https://gitlab.freedesktop.org/wayland/weston/issues/')
113
114config_h.set_quoted('BINDIR', dir_bin)
115config_h.set_quoted('DATADIR', dir_data)
116config_h.set_quoted('LIBEXECDIR', dir_libexec)
117config_h.set_quoted('MODULEDIR', dir_module_weston)
118config_h.set_quoted('LIBWESTON_MODULEDIR', dir_module_libweston)
119
Pekka Paalanen16186972020-02-04 16:59:59 +0200120config_h.set10('TEST_GL_RENDERER', get_option('test-gl-renderer'))
121
Daniel Stone8011b0f2016-11-24 15:54:51 +0000122backend_default = get_option('backend-default')
123if backend_default == 'auto'
124 foreach b : [ 'headless', 'fbdev', 'x11', 'wayland', 'drm' ]
125 if get_option('backend-' + b)
126 backend_default = b
127 endif
128 endforeach
129endif
130opt_backend_native = backend_default + '-backend.so'
131config_h.set_quoted('WESTON_NATIVE_BACKEND', opt_backend_native)
132message('The default backend is ' + backend_default)
133if not get_option('backend-' + backend_default)
134 error('Backend @0@ was chosen as native but is not being built.'.format(backend_default))
135endif
136
137dep_xkbcommon = dependency('xkbcommon', version: '>= 0.3.0')
138if dep_xkbcommon.version().version_compare('>= 0.5.0')
139 config_h.set('HAVE_XKBCOMMON_COMPOSE', '1')
140endif
141
Simon Ser413d2102021-02-16 13:34:46 +0100142if get_option('deprecated-wl-shell')
Simon Ser2839e612022-01-20 13:27:01 +0100143 warning('Support for the deprecated wl_shell interface is enabled.')
144 warning('This feature will be removed in a future version.')
Simon Ser413d2102021-02-16 13:34:46 +0100145 config_h.set('HAVE_DEPRECATED_WL_SHELL', '1')
146endif
147
Pekka Paalanen30104bd2021-02-08 16:29:51 +0200148dep_wayland_server = dependency('wayland-server', version: '>= 1.18.0')
149dep_wayland_client = dependency('wayland-client', version: '>= 1.18.0')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000150dep_pixman = dependency('pixman-1', version: '>= 0.25.2')
151dep_libinput = dependency('libinput', version: '>= 0.8.0')
Eric Toombs6e229ca2019-01-31 21:53:25 -0500152dep_libevdev = dependency('libevdev')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000153dep_libm = cc.find_library('m')
limin.tian531dd232025-01-07 12:09:27 +0000154dep_liblog = cc.find_library('liblog')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000155dep_libdl = cc.find_library('dl')
Pekka Paalanen9b94a7d2020-09-16 17:11:40 +0300156dep_libdrm = dependency('libdrm', version: '>= 2.4.95')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000157dep_libdrm_headers = dep_libdrm.partial_dependency(compile_args: true)
Daniel Stone8011b0f2016-11-24 15:54:51 +0000158dep_threads = dependency('threads')
159
Marius Vlad6f6fd262021-07-12 12:58:34 +0300160dep_libdrm_version = dep_libdrm.version()
161if dep_libdrm_version.version_compare('>=2.4.107')
162 message('Found libdrm with human format modifier support.')
163 config_h.set('HAVE_HUMAN_FORMAT_MODIFIER', '1')
164endif
165
Pekka Paalanend9133632020-11-25 13:22:26 +0200166prog_python = import('python').find_installation('python3')
167files_xxd_py = files('tools/xxd.py')
168cmd_xxd = [ prog_python, files_xxd_py, '@INPUT@', '@OUTPUT@' ]
169
Pekka Paalanena78cf772019-03-28 16:35:56 +0200170subdir('include')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000171subdir('protocol')
172subdir('shared')
173subdir('libweston')
174subdir('libweston-desktop')
175subdir('xwayland')
176subdir('compositor')
177subdir('desktop-shell')
178subdir('fullscreen-shell')
179subdir('ivi-shell')
Alexandros Frantzis87c16792020-04-21 18:23:37 +0300180subdir('kiosk-shell')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000181subdir('remoting')
Michael Olbrichd5d5aa92019-04-23 12:34:05 +0200182subdir('pipewire')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000183subdir('clients')
184subdir('wcap')
185subdir('tests')
186subdir('data')
187subdir('man')
leng.fangdbaf6fa2024-06-20 19:31:04 +0800188subdir('simpleshell')
Daniel Stone8011b0f2016-11-24 15:54:51 +0000189
Harish Krupob81fc512019-04-16 10:41:01 +0530190configure_file(output: 'config.h', configuration: config_h)
191
Marius Vladbbf6ea02019-06-14 12:41:02 +0300192if get_option('doc')
193 subdir('doc/sphinx')
194else
195 message('Documentation will not be built. Use -Ddoc to build it.')
196endif