diff options
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..df1dbb84 --- /dev/null +++ b/meson.build @@ -0,0 +1,205 @@ +project( + 'wlroots', + 'c', + version: '0.2.0', + license: 'MIT', + meson_version: '>=0.48.0', + default_options: [ + 'c_std=c11', + 'warning_level=2', + 'werror=true', + ], +) + +# Format of so_version is CURRENT, REVISION, AGE. +# See: https://autotools.io/libtool/version.html +# for a reference about clean library versioning. +so_version = ['0', '0', '0'] + +add_project_arguments( + [ + '-DWLR_SRC_DIR="@0@"'.format(meson.current_source_dir()), + '-DWLR_USE_UNSTABLE', + + '-Wno-unused-parameter', + '-Wundef', + ], + language: 'c', +) + +conf_data = configuration_data() +conf_data.set10('WLR_HAS_LIBCAP', false) +conf_data.set10('WLR_HAS_SYSTEMD', false) +conf_data.set10('WLR_HAS_ELOGIND', false) +conf_data.set10('WLR_HAS_X11_BACKEND', false) +conf_data.set10('WLR_HAS_XWAYLAND', false) +conf_data.set10('WLR_HAS_XCB_ERRORS', false) +conf_data.set10('WLR_HAS_XCB_ICCCM', false) + +wlr_inc = include_directories('.', 'include') + +cc = meson.get_compiler('c') + +# Clang complains about some zeroed initializer lists (= {0}), even though they +# are valid +if cc.get_id() == 'clang' + add_project_arguments('-Wno-missing-field-initializers', language: 'c') + add_project_arguments('-Wno-missing-braces', language: 'c') +endif + +# Avoid wl_buffer deprecation warnings +add_project_arguments('-DWL_HIDE_DEPRECATED', language: 'c') + +wayland_server = dependency('wayland-server', version: '>=1.16') +wayland_client = dependency('wayland-client') +wayland_egl = dependency('wayland-egl') +wayland_protos = dependency('wayland-protocols', version: '>=1.15') +egl = dependency('egl') +glesv2 = dependency('glesv2') +drm = dependency('libdrm') +gbm = dependency('gbm', version: '>=17.1.0') +libinput = dependency('libinput', version: '>=1.7.0') +xkbcommon = dependency('xkbcommon') +udev = dependency('libudev') +pixman = dependency('pixman-1') +libcap = dependency('libcap', required: get_option('libcap')) +logind = dependency('lib' + get_option('logind-provider'), required: get_option('logind'), version: '>=237') +math = cc.find_library('m') +rt = cc.find_library('rt') + +wlr_parts = [] +wlr_deps = [] + +if libcap.found() + conf_data.set10('WLR_HAS_LIBCAP', true) + wlr_deps += libcap +endif + +if logind.found() + conf_data.set10('WLR_HAS_' + get_option('logind-provider').to_upper(), true) + wlr_deps += logind +endif + +subdir('protocol') +subdir('render') + +subdir('backend') +subdir('types') +subdir('util') +subdir('xcursor') +subdir('xwayland') + +subdir('include') + +wlr_parts += [ + lib_wl_protos, + lib_wlr_backend, + lib_wlr_render, + lib_wlr_types, + lib_wlr_util, + lib_wlr_xcursor, +] + +wlr_deps += [ + wayland_server, + wayland_client, + wayland_egl, + wayland_protos, + egl, + glesv2, + drm, + gbm, + libinput, + xkbcommon, + udev, + pixman, + math, +] + +if host_machine.system() == 'freebsd' + override_options = ['b_lundef=false'] +else + override_options = [] +endif + +symbols_file = 'wlroots.syms' +symbols_flag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), symbols_file) +lib_wlr = library( + meson.project_name(), + version: '.'.join(so_version), + link_whole: wlr_parts, + dependencies: wlr_deps, + include_directories: wlr_inc, + install: true, + link_args : symbols_flag, + link_depends: symbols_file, + override_options: override_options, +) + +wlroots = declare_dependency( + link_with: lib_wlr, + dependencies: wlr_deps, + include_directories: wlr_inc, +) + +summary = [ + '', + '----------------', + 'wlroots @0@'.format(meson.project_version()), + '', + ' libcap: @0@'.format(conf_data.get('WLR_HAS_LIBCAP', false)), + ' systemd: @0@'.format(conf_data.get('WLR_HAS_SYSTEMD', false)), + ' elogind: @0@'.format(conf_data.get('WLR_HAS_ELOGIND', false)), + ' xwayland: @0@'.format(conf_data.get('WLR_HAS_XWAYLAND', false)), + ' x11_backend: @0@'.format(conf_data.get('WLR_HAS_X11_BACKEND', false)), + ' xcb-icccm: @0@'.format(conf_data.get('WLR_HAS_XCB_ICCCM', false)), + ' xcb-errors: @0@'.format(conf_data.get('WLR_HAS_XCB_ERRORS', false)), + '----------------', + '' +] +message('\n'.join(summary)) + +subdir('examples') +subdir('rootston') + +pkgconfig = import('pkgconfig') +pkgconfig.generate( + libraries: lib_wlr, + version: meson.project_version(), + filebase: meson.project_name(), + name: meson.project_name(), + description: 'Wayland compositor library', +) + +git = find_program('git', required: false) +if git.found() + all_files = run_command( + git, + '--git-dir=@0@/.git'.format(meson.current_source_dir()), + 'ls-files', + ':/*.[ch]', + ) + all_files = files(all_files.stdout().split()) + + etags = find_program('etags', required: false) + if etags.found() and all_files.length() > 0 + custom_target( + 'etags', + build_by_default: true, + input: all_files, + output: 'TAGS', + command: [etags, '-o', '@OUTPUT@', '@INPUT@'], + ) + endif + + ctags = find_program('ctags', required: false) + if ctags.found() and all_files.length() > 0 + custom_target( + 'ctags', + build_by_default: true, + input: all_files, + output: 'tags', + command: [ctags, '-f', '@OUTPUT@', '@INPUT@'], + ) + endif +endif |