project('weston', 'c', version: '10.0.90', default_options: [ 'warning_level=3', 'c_std=gnu99', 'b_lundef=true', ], meson_version: '>= 0.54.0', license: 'MIT/Expat', ) libweston_major = 11 # libweston_revision is manufactured to follow the autotools build's # library file naming, thanks to libtool version_weston = meson.project_version() version_weston_arr = version_weston.split('.') if libweston_major > version_weston_arr[0].to_int() if libweston_major > version_weston_arr[0].to_int() + 1 error('Bad versions in meson.build: libweston_major is too high') endif libweston_revision = 0 elif libweston_major == version_weston_arr[0].to_int() libweston_revision = version_weston_arr[2].to_int() else error('Bad versions in meson.build: libweston_major is too low') endif if not (get_option('launcher-logind') or get_option('launcher-libseat')) error('At least one launcher must be enabled') endif dir_prefix = get_option('prefix') dir_bin = join_paths(dir_prefix, get_option('bindir')) dir_data = join_paths(dir_prefix, get_option('datadir')) dir_include_libweston = 'libweston-@0@'.format(libweston_major) dir_include_libweston_install = join_paths(dir_include_libweston, 'libweston') dir_lib = join_paths(dir_prefix, get_option('libdir')) dir_libexec = join_paths(dir_prefix, get_option('libexecdir')) dir_module_weston = join_paths(dir_lib, 'weston') dir_module_libweston = join_paths(dir_lib, 'libweston-@0@'.format(libweston_major)) dir_data_pc = join_paths(dir_data, 'pkgconfig') dir_lib_pc = join_paths(dir_lib, 'pkgconfig') dir_man = join_paths(dir_prefix, get_option('mandir')) dir_protocol_libweston = join_paths('libweston-@0@'.format(libweston_major), 'protocols') public_inc = include_directories('include') common_inc = [ include_directories('.'), public_inc ] pkgconfig = import('pkgconfig') git_version_h = vcs_tag( input: 'libweston/git-version.h.meson', output: 'git-version.h', fallback: version_weston ) config_h = configuration_data() cc = meson.get_compiler('c') global_args = [] global_args_maybe = [ '-Wmissing-prototypes', '-Wno-unused-parameter', '-Wno-shift-negative-value', # required due to Pixman '-Wno-missing-field-initializers', '-Wno-pedantic', '-Wundef', '-fvisibility=hidden', ] foreach a : global_args_maybe if cc.has_argument(a) global_args += a endif endforeach add_global_arguments(global_args, language: 'c') if cc.has_header_symbol('sys/sysmacros.h', 'major') config_h.set('MAJOR_IN_SYSMACROS', 1) elif cc.has_header_symbol('sys/mkdev.h', 'major') config_h.set('MAJOR_IN_MKDEV', 1) endif optional_libc_funcs = [ 'mkostemp', 'strchrnul', 'initgroups', 'posix_fallocate', 'memfd_create' ] foreach func : optional_libc_funcs if cc.has_function(func) config_h.set('HAVE_' + func.to_upper(), 1) endif endforeach optional_system_headers = [ 'linux/sync_file.h' ] foreach hdr : optional_system_headers if cc.has_header(hdr) config_h.set('HAVE_' + hdr.underscorify().to_upper(), 1) endif endforeach env_modmap = '' config_h.set('_GNU_SOURCE', '1') config_h.set('_ALL_SOURCE', '1') config_h.set('EGL_NO_X11', '1') config_h.set('MESA_EGL_NO_X11_HEADERS', '1') config_h.set('EGL_NO_PLATFORM_SPECIFIC_TYPES', '1') config_h.set_quoted('PACKAGE_STRING', 'weston @0@'.format(version_weston)) config_h.set_quoted('PACKAGE_VERSION', version_weston) config_h.set_quoted('VERSION', version_weston) config_h.set_quoted('PACKAGE_URL', 'https://wayland.freedesktop.org') config_h.set_quoted('PACKAGE_BUGREPORT', 'https://gitlab.freedesktop.org/wayland/weston/issues/') config_h.set_quoted('BINDIR', dir_bin) config_h.set_quoted('DATADIR', dir_data) config_h.set_quoted('LIBEXECDIR', dir_libexec) config_h.set_quoted('MODULEDIR', dir_module_weston) config_h.set_quoted('LIBWESTON_MODULEDIR', dir_module_libweston) config_h.set10('TEST_GL_RENDERER', get_option('test-gl-renderer')) backend_default = get_option('backend-default') if backend_default == 'auto' foreach b : [ 'headless', 'x11', 'wayland', 'drm' ] if get_option('backend-' + b) backend_default = b endif endforeach endif opt_backend_native = backend_default + '-backend.so' config_h.set_quoted('WESTON_NATIVE_BACKEND', opt_backend_native) message('The default backend is ' + backend_default) if not get_option('backend-' + backend_default) error('Backend @0@ was chosen as native but is not being built.'.format(backend_default)) endif dep_xkbcommon = dependency('xkbcommon', version: '>= 0.3.0') if dep_xkbcommon.version().version_compare('>= 0.5.0') config_h.set('HAVE_XKBCOMMON_COMPOSE', '1') endif dep_wayland_server = dependency('wayland-server', version: '>= 1.20.0') dep_wayland_client = dependency('wayland-client', version: '>= 1.20.0') dep_pixman = dependency('pixman-1', version: '>= 0.25.2') dep_libinput = dependency('libinput', version: '>= 0.8.0') dep_libevdev = dependency('libevdev') dep_libm = cc.find_library('m') dep_libdl = cc.find_library('dl') dep_libdrm = dependency('libdrm', version: '>= 2.4.95') dep_libdrm_headers = dep_libdrm.partial_dependency(compile_args: true) dep_threads = dependency('threads') dep_libdrm_version = dep_libdrm.version() if dep_libdrm_version.version_compare('>=2.4.107') message('Found libdrm with human format modifier support.') config_h.set('HAVE_HUMAN_FORMAT_MODIFIER', '1') endif prog_python = import('python').find_installation('python3') files_xxd_py = files('tools/xxd.py') cmd_xxd = [ prog_python, files_xxd_py, '@INPUT@', '@OUTPUT@' ] subdir('include') subdir('protocol') subdir('shared') subdir('libweston') subdir('libweston-desktop') subdir('xwayland') subdir('shell-utils') subdir('compositor') subdir('desktop-shell') subdir('fullscreen-shell') subdir('ivi-shell') subdir('kiosk-shell') subdir('remoting') subdir('pipewire') subdir('clients') subdir('wcap') subdir('tests') subdir('data') subdir('man') configure_file(output: 'config.h', configuration: config_h) if get_option('doc') subdir('doc/sphinx') else message('Documentation will not be built. Use -Ddoc to build it.') endif