From 9c886f20b97b6ab1ac85b849f1fe7f16eb199ff0 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 23 Aug 2018 21:00:58 -0400 Subject: [PATCH] Revert "Merge pull request #1194 from ascent12/meson_feature" This breaks wlroots when used as a meson subproject. This reverts commit dea311992eb4ff3e343c3cf5b0603034223d2a42, reversing changes made to 6db9c4b74667c1d917d720f5e96985a2461569fb. --- backend/meson.build | 20 ++- backend/x11/meson.build | 44 ------- examples/meson.build | 154 ++++++++++-------------- glgen.sh | 1 + include/wlr/backend/meson.build | 16 --- include/wlr/backend/session/meson.build | 1 - include/wlr/config.h.in | 19 --- include/wlr/interfaces/meson.build | 10 -- include/wlr/meson.build | 20 +-- include/wlr/render/meson.build | 9 -- include/wlr/types/meson.build | 42 ------- include/wlr/util/meson.build | 6 - include/wlr/version.h.in | 16 --- meson.build | 118 +++++++++++++----- meson_options.txt | 18 ++- protocol/meson.build | 59 +++++---- render/meson.build | 6 +- rootston/meson.build | 13 +- xwayland/meson.build | 40 ++---- 19 files changed, 227 insertions(+), 385 deletions(-) delete mode 100644 backend/x11/meson.build delete mode 100644 include/wlr/backend/meson.build delete mode 100644 include/wlr/backend/session/meson.build delete mode 100644 include/wlr/config.h.in delete mode 100644 include/wlr/interfaces/meson.build delete mode 100644 include/wlr/render/meson.build delete mode 100644 include/wlr/types/meson.build delete mode 100644 include/wlr/util/meson.build delete mode 100644 include/wlr/version.h.in diff --git a/backend/meson.build b/backend/meson.build index dd1f4df3..52abe64d 100644 --- a/backend/meson.build +++ b/backend/meson.build @@ -1,4 +1,3 @@ -backend_parts = [] backend_files = files( 'backend.c', 'drm/atomic.c', @@ -45,17 +44,28 @@ else backend_files += files('session/direct.c') endif -if logind.found() +if conf_data.get('WLR_HAS_SYSTEMD', false) backend_files += files('session/logind.c') - backend_deps += logind + backend_deps += systemd endif -subdir('x11') +if conf_data.get('WLR_HAS_X11_BACKEND', false) + backend_files += files( + 'x11/backend.c', + 'x11/input_device.c', + 'x11/output.c', + ) + backend_deps += xcb_xkb +endif + +if conf_data.get('WLR_HAS_ELOGIND', false) + backend_files += files('session/logind.c') + backend_deps += elogind +endif lib_wlr_backend = static_library( 'wlr_backend', backend_files, include_directories: wlr_inc, - link_whole: backend_parts, dependencies: backend_deps, ) diff --git a/backend/x11/meson.build b/backend/x11/meson.build deleted file mode 100644 index 1164df1e..00000000 --- a/backend/x11/meson.build +++ /dev/null @@ -1,44 +0,0 @@ -x11_libs = [] -x11_required = [ - 'xcb', - 'x11-xcb', -] -x11_optional = [ - 'xcb-xkb', -] - -foreach lib : x11_required - dep = dependency(lib, required: get_option('x11-backend')) - if not dep.found() - subdir_done() - endif - - x11_libs += dep -endforeach - -foreach lib : x11_optional - dep = dependency(lib, required: get_option(lib)) - if dep.found() - x11_libs += dep - conf_data.set('WLR_HAS_' + lib.underscorify().to_upper(), true) - endif -endforeach - -lib_wlr_backend_x11 = static_library( - 'wlr_backend_x11', - files( - 'backend.c', - 'input_device.c', - 'output.c', - ), - include_directories: wlr_inc, - dependencies: [ - wayland_server, - pixman, - xkbcommon, - x11_libs, - ], -) - -backend_parts += lib_wlr_backend_x11 -conf_data.set('WLR_HAS_X11_BACKEND', true) diff --git a/examples/meson.build b/examples/meson.build index 0fb37a9e..25ad7566 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -1,102 +1,80 @@ threads = dependency('threads') wayland_cursor = dependency('wayland-cursor') + libpng = dependency('libpng', required: false) + # These versions correspond to ffmpeg 4.0 libavutil = dependency('libavutil', version: '>=56.14.100', required: false) libavcodec = dependency('libavcodec', version: '>=58.18.100', required: false) libavformat = dependency('libavformat', version: '>=58.12.100', required: false) -# Small hack until https://github.com/mesonbuild/meson/pull/3386/ is merged -foreach dep : ['libpng', 'libavutil', 'libavcodec', 'libavformat'] - if not get_variable(dep).found() - set_variable(dep, disabler()) - endif -endforeach - if not cc.has_header('libavutil/hwcontext_drm.h', dependencies: libavutil) - libavutil = disabler() + libavutil = disabler() endif -examples = { - 'simple': { - 'src': 'simple.c', - 'dep': wlroots, - }, - 'pointer': { - 'src': 'pointer.c', - 'dep': wlroots, - }, - 'touch': { - 'src': ['touch.c', 'cat.c'], - 'dep': wlroots, - }, - 'tablet': { - 'src': 'tablet.c', - 'dep': wlroots, - }, - 'rotation': { - 'src': ['rotation.c', 'cat.c'], - 'dep': wlroots, - }, - 'multi-pointer': { - 'src': 'multi-pointer.c', - 'dep': wlroots, - }, - 'output-layout': { - 'src': ['output-layout.c', 'cat.c'], - 'dep': wlroots, - }, - 'screenshot': { - 'src': 'screenshot.c', - 'dep': [wayland_client, wlr_protos, wlroots], - }, - 'idle': { - 'src': 'idle.c', - 'dep': [wayland_client, wlr_protos, wlroots, threads], - }, - 'idle-inhibit': { - 'src': 'idle-inhibit.c', - 'dep': [wayland_client, wlr_protos, wlroots], - }, - 'layer-shell': { - 'src': 'layer-shell.c', - 'dep': [wayland_client, wayland_cursor, wlr_protos, wlroots], - }, - 'input-inhibitor': { - 'src': 'input-inhibitor.c', - 'dep': [wayland_client, wayland_cursor, wlr_protos, wlroots], - }, - 'gamma-control': { - 'src': 'gamma-control.c', - 'dep': [wayland_client, wayland_cursor, wlr_protos, wlroots], - }, - 'dmabuf-capture': { - 'src': 'dmabuf-capture.c', - 'dep': [ - libavcodec, - libavformat, - libavutil, - threads, - wayland_client, - wlr_protos, - wlroots, - ], - }, - 'screencopy': { - 'src': 'screencopy.c', - 'dep': [libpng, wayland_client, wlr_protos, wlroots], - }, - 'toplevel-decoration': { - 'src': 'toplevel-decoration.c', - 'dep': [wayland_client, wlr_protos, wlroots], - }, -} +executable('simple', 'simple.c', dependencies: wlroots) +executable('pointer', 'pointer.c', dependencies: wlroots) +executable('touch', 'touch.c', 'cat.c', dependencies: wlroots) +executable('tablet', 'tablet.c', dependencies: wlroots) +executable('rotation', 'rotation.c', 'cat.c', dependencies: wlroots) +executable('multi-pointer', 'multi-pointer.c', dependencies: wlroots) +executable('output-layout', 'output-layout.c', 'cat.c', dependencies: wlroots) -foreach name, info : examples +executable( + 'screenshot', + 'screenshot.c', + dependencies: [wayland_client, wlr_protos, wlroots] +) + +executable( + 'idle', + 'idle.c', + dependencies: [wayland_client, wlr_protos, wlroots, threads] +) + +executable( + 'idle-inhibit', + 'idle-inhibit.c', + dependencies: [wayland_client, wlr_protos, wlroots, threads] +) + +executable( + 'layer-shell', + 'layer-shell.c', + dependencies: [wayland_cursor, wayland_client, wlr_protos, wlroots] +) + +executable( + 'input-inhibitor', + 'input-inhibitor.c', + dependencies: [wayland_cursor, wayland_client, wlr_protos, wlroots] +) + +executable( + 'gamma-control', + 'gamma-control.c', + dependencies: [wayland_cursor, wayland_client, wlr_protos, wlroots] +) + +if libavutil.found() and libavcodec.found() and libavformat.found() executable( - name, - info.get('src'), - dependencies: info.get('dep'), - build_by_default: get_option('examples'), + 'dmabuf-capture', + 'dmabuf-capture.c', + dependencies: [wayland_client, wlr_protos, libavutil, libavcodec, + libavformat, wlroots, threads ] ) -endforeach +endif + +if libpng.found() + executable( + 'screencopy', + 'screencopy.c', + dependencies: [wayland_client, wlr_protos, wlroots, libpng] + ) +endif + +executable( + 'toplevel-decoration', + 'toplevel-decoration.c', + dependencies: [wayland_client, wlr_protos, wlroots] +) diff --git a/glgen.sh b/glgen.sh index b27750e4..0356cf98 100755 --- a/glgen.sh +++ b/glgen.sh @@ -66,6 +66,7 @@ cat > $OUT_H << EOF #include #include +#include #include #include diff --git a/include/wlr/backend/meson.build b/include/wlr/backend/meson.build deleted file mode 100644 index e005b854..00000000 --- a/include/wlr/backend/meson.build +++ /dev/null @@ -1,16 +0,0 @@ -install_headers( - 'drm.h', - 'headless.h', - 'interface.h', - 'libinput.h', - 'multi.h', - 'session.h', - 'wayland.h', - subdir: 'wlr/backend', -) - -if conf_data.get('WLR_HAS_X11_BACKEND', false) - install_headers('x11.h', subdir: 'wlr/backend') -endif - -subdir('session') diff --git a/include/wlr/backend/session/meson.build b/include/wlr/backend/session/meson.build deleted file mode 100644 index 21b5a96b..00000000 --- a/include/wlr/backend/session/meson.build +++ /dev/null @@ -1 +0,0 @@ -install_headers('interface.h', subdir: 'wlr/backend/session') diff --git a/include/wlr/config.h.in b/include/wlr/config.h.in deleted file mode 100644 index 750ad3b7..00000000 --- a/include/wlr/config.h.in +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef WLR_CONFIG_H -#define WLR_CONFIG_H - -#mesondefine WLR_HAS_LIBCAP - -#mesondefine WLR_HAS_SYSTEMD -#mesondefine WLR_HAS_ELOGIND - -#mesondefine WLR_HAS_X11_BACKEND - -#mesondefine WLR_HAS_XWAYLAND - -#mesondefine WLR_HAS_XCB_ERRORS -#mesondefine WLR_HAS_XCB_ICCCM -#mesondefine WLR_HAS_XCB_XKB - -#mesondefine WLR_HAS_POSIX_FALLOCATE - -#endif diff --git a/include/wlr/interfaces/meson.build b/include/wlr/interfaces/meson.build deleted file mode 100644 index 207896b5..00000000 --- a/include/wlr/interfaces/meson.build +++ /dev/null @@ -1,10 +0,0 @@ -install_headers( - 'wlr_input_device.h', - 'wlr_keyboard.h', - 'wlr_output.h', - 'wlr_pointer.h', - 'wlr_tablet_pad.h', - 'wlr_tablet_tool.h', - 'wlr_touch.h', - subdir: 'wlr/interfaces', -) diff --git a/include/wlr/meson.build b/include/wlr/meson.build index 43b5aec9..6259c311 100644 --- a/include/wlr/meson.build +++ b/include/wlr/meson.build @@ -4,23 +4,11 @@ version_data.set_quoted('WLR_VERSION_STR', meson.project_version()) version_data.set('WLR_VERSION_MAJOR', version_array[0]) version_data.set('WLR_VERSION_MINOR', version_array[1]) version_data.set('WLR_VERSION_MICRO', version_array[2]) +version_data.set('WLR_VERSION_NUM', '(WLR_VERSION_MAJOR << 16) | (WLR_VERSION_MINOR << 8) | WLR_VERSION_MICRO') version_data.set('WLR_VERSION_API_CURRENT', so_version[0]) version_data.set('WLR_VERSION_API_REVISION', so_version[1]) version_data.set('WLR_VERSION_API_AGE', so_version[2]) -install_headers( - configure_file(input: 'config.h.in', output: 'config.h',configuration: conf_data), - configure_file(input: 'version.h.in', output: 'version.h', configuration: version_data), - 'backend.h', - 'xcursor.h', - subdir: 'wlr' -) -if conf_data.get('WLR_HAS_XWAYLAND', false) - install_headers('xwayland.h', subdir: 'wlr') -endif - -subdir('backend') -subdir('interfaces') -subdir('render') -subdir('types') -subdir('util') +wlr_inc_dest = join_paths(get_option('includedir'), 'wlr') +configure_file(output: 'config.h', install_dir: wlr_inc_dest, configuration: conf_data) +configure_file(output: 'version.h', install_dir: wlr_inc_dest, configuration: version_data) diff --git a/include/wlr/render/meson.build b/include/wlr/render/meson.build deleted file mode 100644 index 05127bb7..00000000 --- a/include/wlr/render/meson.build +++ /dev/null @@ -1,9 +0,0 @@ -install_headers( - 'dmabuf.h', - 'egl.h', - 'gles2.h', - 'interface.h', - 'wlr_renderer.h', - 'wlr_texture.h', - subdir: 'wlr/render' -) diff --git a/include/wlr/types/meson.build b/include/wlr/types/meson.build deleted file mode 100644 index 8c81cb0e..00000000 --- a/include/wlr/types/meson.build +++ /dev/null @@ -1,42 +0,0 @@ -install_headers( - 'wlr_box.h', - 'wlr_buffer.h', - 'wlr_compositor.h', - 'wlr_cursor.h', - 'wlr_data_device.h', - 'wlr_export_dmabuf_v1.h', - 'wlr_gamma_control.h', - 'wlr_gamma_control_v1.h', - 'wlr_idle.h', - 'wlr_idle_inhibit_v1.h', - 'wlr_input_device.h', - 'wlr_input_inhibitor.h', - 'wlr_keyboard.h', - 'wlr_layer_shell.h', - 'wlr_linux_dmabuf_v1.h', - 'wlr_list.h', - 'wlr_matrix.h', - 'wlr_output.h', - 'wlr_output_damage.h', - 'wlr_output_layout.h', - 'wlr_pointer.h', - 'wlr_primary_selection.h', - 'wlr_region.h', - 'wlr_screencopy_v1.h', - 'wlr_screenshooter.h', - 'wlr_seat.h', - 'wlr_server_decoration.h', - 'wlr_surface.h', - 'wlr_tablet_pad.h', - 'wlr_tablet_tool.h', - 'wlr_tablet_v2.h', - 'wlr_touch.h', - 'wlr_virtual_keyboard_v1.h', - 'wlr_wl_shell.h', - 'wlr_xcursor_manager.h', - 'wlr_xdg_decoration_v1.h', - 'wlr_xdg_output.h', - 'wlr_xdg_shell.h', - 'wlr_xdg_shell_v6.h', - subdir: 'wlr/types', -) diff --git a/include/wlr/util/meson.build b/include/wlr/util/meson.build deleted file mode 100644 index ee72cbd6..00000000 --- a/include/wlr/util/meson.build +++ /dev/null @@ -1,6 +0,0 @@ -install_headers( - 'edges.h', - 'log.h', - 'region.h', - subdir: 'wlr/util', -) diff --git a/include/wlr/version.h.in b/include/wlr/version.h.in deleted file mode 100644 index cdc0fd75..00000000 --- a/include/wlr/version.h.in +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef WLR_VERSION_H -#define WLR_VERSION_H - -#mesondefine WLR_VERSION_STR - -#mesondefine WLR_VERSION_MAJOR -#mesondefine WLR_VERSION_MINOR -#mesondefine WLR_VERSION_MICRO - -#define WLR_VERSION_NUM ((WLR_VERSION_MAJOR << 16) | (WLR_VERSION_MINOR << 8) | WLR_VERSION_MICRO) - -#mesondefine WLR_VERSION_API_CURRENT -#mesondefine WLR_VERSION_API_REVISION -#mesondefine WLR_VERSION_API_AGE - -#endif diff --git a/meson.build b/meson.build index 8458a66c..655eb52d 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ project( 'c', version: '0.0.1', license: 'MIT', - meson_version: '>=0.47.0', + meson_version: '>=0.44.0', default_options: [ 'c_std=c11', 'warning_level=2', @@ -18,7 +18,15 @@ so_version = ['0', '0', '0'] add_project_arguments('-Wno-unused-parameter', language: 'c') add_project_arguments( - '-DWLR_SRC_DIR="@0@"'.format(meson.current_source_dir()), + '-DWLR_SRC_DIR="@0@"'.format(meson.source_root()), + language: 'c', +) +add_project_arguments( + '-I@0@'.format(meson.build_root()), + language: 'c', +) +add_project_link_arguments( + '-Wl,-rpath,@0@'.format(meson.build_root()), language: 'c', ) add_project_arguments( @@ -28,7 +36,7 @@ add_project_arguments( conf_data = configuration_data() -wlr_inc = include_directories('.', 'include') +wlr_inc = include_directories('include') cc = meson.get_compiler('c') @@ -54,37 +62,90 @@ 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')) +libcap = dependency('libcap', required: get_option('enable-libcap') == 'true') +systemd = dependency('libsystemd', required: get_option('enable-systemd') == 'true') +elogind = dependency('libelogind', required: get_option('enable-elogind') == 'true') math = cc.find_library('m', required: false) +exclude_headers = [] wlr_parts = [] wlr_deps = [] -if libcap.found() +if libcap.found() and get_option('enable-libcap') != 'false' conf_data.set('WLR_HAS_LIBCAP', true) wlr_deps += libcap endif -if logind.found() - conf_data.set('WLR_HAS_' + get_option('logind-provider').to_upper(), true) - wlr_deps += logind +if systemd.found() and get_option('enable-systemd') != 'false' + conf_data.set('WLR_HAS_SYSTEMD', true) + wlr_deps += systemd +endif + +if elogind.found() and get_option('enable-elogind') != 'false' + conf_data.set('WLR_HAS_ELOGIND', true) +endif + +if get_option('enable-x11_backend') or get_option('enable-xwayland') + xcb = dependency('xcb') + xcb_composite = dependency('xcb-composite') + xcb_xfixes = dependency('xcb-xfixes') + xcb_image = dependency('xcb-image') + xcb_render = dependency('xcb-render') + x11_xcb = dependency('x11-xcb') + + xcb_icccm = dependency('xcb-icccm', required: false) + xcb_xkb = dependency('xcb-xkb', required: false) + xcb_errors = dependency('xcb-errors', required: get_option('enable-xcb_errors') == 'true') + + if xcb_icccm.found() + conf_data.set('WLR_HAS_XCB_ICCCM', true) + endif + + if xcb_xkb.found() + conf_data.set('WLR_HAS_XCB_XKB', true) + endif + + if xcb_errors.found() and get_option('enable-xcb_errors') != 'false' + conf_data.set('WLR_HAS_XCB_ERRORS', true) + endif + + wlr_deps += [ + xcb, + xcb_composite, + x11_xcb, + ] +else + add_project_arguments('-DMESA_EGL_NO_X11_HEADERS', language: 'c') +endif + +if get_option('enable-x11_backend') + conf_data.set('WLR_HAS_X11_BACKEND', true) +endif + +if get_option('enable-xwayland') + subdir('xwayland') + wlr_parts += [lib_wlr_xwayland] + conf_data.set('WLR_HAS_XWAYLAND', true) +else + exclude_headers += 'xwayland.h' endif if cc.has_header_symbol('fcntl.h', 'posix_fallocate', prefix: '#define _POSIX_C_SOURCE 200112L') conf_data.set('WLR_HAS_POSIX_FALLOCATE', true) endif +includedir = get_option('includedir') +exclude_headers += 'meson.build' +install_subdir('include/wlr', install_dir: includedir, exclude_files: exclude_headers) + + +subdir('include') subdir('protocol') subdir('render') - subdir('backend') subdir('types') subdir('util') subdir('xcursor') -subdir('xwayland') - -subdir('include') wlr_parts += [ lib_wl_protos, @@ -121,7 +182,6 @@ lib_wlr = library( include_directories: wlr_inc, install: true, link_args : symbols_flag, - link_depends: symbols_file, ) wlroots = declare_dependency( @@ -130,6 +190,7 @@ wlroots = declare_dependency( include_directories: wlr_inc, ) + summary = [ '', '----------------', @@ -147,8 +208,14 @@ summary = [ ] message('\n'.join(summary)) -subdir('examples') -subdir('rootston') + +if get_option('enable-rootston') + subdir('rootston') +endif + +if get_option('enable-examples') + subdir('examples') +endif pkgconfig = import('pkgconfig') pkgconfig.generate( @@ -163,31 +230,26 @@ 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]', - ) + ['--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', + custom_target('etags', build_by_default: true, input: all_files, output: 'TAGS', - command: [etags, '-o', '@OUTPUT@', '@INPUT@'], - ) + command: [etags.path(), '-o', 'TAGS'] + all_files) endif ctags = find_program('ctags', required: false) if ctags.found() and all_files.length() > 0 - custom_target( - 'ctags', + custom_target('ctags', build_by_default: true, input: all_files, output: 'tags', - command: [ctags, '-f', '@OUTPUT@', '@INPUT@'], - ) + command: [ctags.path(), '-f', 'tags'] + all_files) endif endif diff --git a/meson_options.txt b/meson_options.txt index 360c6f6a..e474b8aa 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,10 +1,8 @@ -option('libcap', type: 'feature', value: 'auto', description: 'Enable support for rootless session via capabilities (cap_sys_admin)') -option('logind', type: 'feature', value: 'auto', description: 'Enable support for rootless session via logind') -option('logind-provider', type: 'combo', choices: ['systemd', 'elogind'], value: 'systemd', description: 'Provider of logind support library') -option('xcb-errors', type: 'feature', value: 'auto', description: 'Use xcb-errors util library') -option('xcb-icccm', type: 'feature', value: 'auto', description: 'Use xcb-icccm util library') -option('xcb-xkb', type: 'feature', value: 'auto', description: 'Use xcb-xkb util library') -option('xwayland', type: 'feature', value: 'auto', description: 'Enable support for X11 applications') -option('x11-backend', type: 'feature', value: 'auto', description: 'Enable X11 backend') -option('rootston', type: 'boolean', value: true, description: 'Build the rootston example compositor') -option('examples', type: 'boolean', value: true, description: 'Build example applications') +option('enable-libcap', type: 'combo', choices: ['auto', 'true', 'false'], value: 'auto', description: 'Enable support for capabilities') +option('enable-systemd', type: 'combo', choices: ['auto', 'true', 'false'], value: 'auto', description: 'Enable support for logind') +option('enable-elogind', type: 'combo', choices: ['auto', 'true', 'false'], value: 'auto', description: 'Enable support for logind') +option('enable-xcb_errors', type: 'combo', choices: ['auto', 'true', 'false'], value: 'auto', description: 'Use xcb-errors util library') +option('enable-xwayland', type: 'boolean', value: true, description: 'Enable support X11 applications') +option('enable-x11_backend', type: 'boolean', value: true, description: 'Enable X11 backend') +option('enable-rootston', type: 'boolean', value: true, description: 'Build the rootston example compositor') +option('enable-examples', type: 'boolean', value: true, description: 'Build example applications') diff --git a/protocol/meson.build b/protocol/meson.build index 2d2a73ed..73a3156a 100644 --- a/protocol/meson.build +++ b/protocol/meson.build @@ -1,15 +1,32 @@ wl_protocol_dir = wayland_protos.get_pkgconfig_variable('pkgdatadir') -wayland_scanner_dep = dependency('wayland-scanner', required: false, native: true) -if wayland_scanner_dep.found() - wayland_scanner = find_program( - wayland_scanner_dep.get_pkgconfig_variable('wayland_scanner'), - native: true, - ) +wayland_scanner = find_program('wayland-scanner') + +wayland_scanner_server = generator( + wayland_scanner, + output: '@BASENAME@-protocol.h', + arguments: ['server-header', '@INPUT@', '@OUTPUT@'], +) + +# should check wayland_scanner's version, but it is hard to get +if wayland_server.version().version_compare('>=1.14.91') + code_type = 'private-code' else - wayland_scanner = find_program('wayland-scanner', native: true) + code_type = 'code' endif +wayland_scanner_code = generator( + wayland_scanner, + output: '@BASENAME@-protocol.c', + arguments: [code_type, '@INPUT@', '@OUTPUT@'], +) + +wayland_scanner_client = generator( + wayland_scanner, + output: '@BASENAME@-client-protocol.h', + arguments: ['client-header', '@INPUT@', '@OUTPUT@'], +) + protocols = [ [wl_protocol_dir, 'stable/xdg-shell/xdg-shell.xml'], [wl_protocol_dir, 'unstable/idle-inhibit/idle-inhibit-unstable-v1.xml'], @@ -50,35 +67,17 @@ wl_protos_headers = [] foreach p : protocols xml = join_paths(p) - wl_protos_src += custom_target( - xml.underscorify() + '_server_c', - input: xml, - output: '@BASENAME@-protocol.c', - command: [wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@'], - ) - wl_protos_headers += custom_target( - xml.underscorify() + '_server_h', - input: xml, - output: '@BASENAME@-protocol.h', - command: [wayland_scanner, 'server-header', '@INPUT@', '@OUTPUT@'], - ) + wl_protos_src += wayland_scanner_code.process(xml) + wl_protos_headers += wayland_scanner_server.process(xml) endforeach foreach p : client_protocols xml = join_paths(p) - wl_protos_headers += custom_target( - xml.underscorify() + '_client_h', - input: xml, - output: '@BASENAME@-client-protocol.h', - command: [wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@'], - ) + wl_protos_headers += wayland_scanner_client.process(xml) endforeach -lib_wl_protos = static_library( - 'wl_protos', - wl_protos_src + wl_protos_headers, - dependencies: wayland_client.partial_dependency(includes: true), -) +lib_wl_protos = static_library('wl_protos', wl_protos_src + wl_protos_headers, + dependencies: [wayland_client]) # for the include directory wlr_protos = declare_dependency( link_with: lib_wl_protos, diff --git a/render/meson.build b/render/meson.build index c5401d22..4b90c229 100644 --- a/render/meson.build +++ b/render/meson.build @@ -1,7 +1,6 @@ glgen = find_program('../glgen.sh') -glapi = custom_target( - 'glapi', +glapi = custom_target('glapi', input: 'glapi.txt', output: ['@BASENAME@.c', '@BASENAME@.h'], command: [glgen, '@INPUT@', '@OUTPUT0@', '@OUTPUT1@'], @@ -20,7 +19,8 @@ lib_wlr_render = static_library( 'wlr_renderer.c', 'wlr_texture.c', ), - glapi, + glapi[0], + glapi[1], include_directories: wlr_inc, dependencies: [egl, glesv2, pixman, wayland_server], ) diff --git a/rootston/meson.build b/rootston/meson.build index 9d1decce..8ab872b5 100644 --- a/rootston/meson.build +++ b/rootston/meson.build @@ -11,17 +11,12 @@ sources = [ 'seat.c', 'virtual_keyboard.c', 'wl_shell.c', - 'xdg_shell.c', 'xdg_shell_v6.c', + 'xdg_shell.c', ] - -if conf_data.get('WLR_HAS_XWAYLAND', false) - sources += 'xwayland.c' +if get_option('enable-xwayland') + sources += ['xwayland.c'] endif - executable( - 'rootston', - sources, - dependencies: [wlroots, wlr_protos, pixman], - build_by_default: get_option('rootston'), + 'rootston', sources, dependencies: [wlroots, wlr_protos, pixman] ) diff --git a/xwayland/meson.build b/xwayland/meson.build index 0bd88924..ec486f58 100644 --- a/xwayland/meson.build +++ b/xwayland/meson.build @@ -1,32 +1,3 @@ -xwayland_libs = [] -xwayland_required = [ - 'xcb', - 'xcb-composite', - 'xcb-render', - 'xcb-xfixes', -] -xwayland_optional = [ - 'xcb-errors', - 'xcb-icccm', -] - -foreach lib : xwayland_required - dep = dependency(lib, required: get_option('xwayland')) - if not dep.found() - subdir_done() - endif - - xwayland_libs += dep -endforeach - -foreach lib : xwayland_optional - dep = dependency(lib, required: get_option(lib)) - if dep.found() - xwayland_libs += dep - conf_data.set('WLR_HAS_' + lib.underscorify().to_upper(), true) - endif -endforeach - lib_wlr_xwayland = static_library( 'wlr_xwayland', files( @@ -41,11 +12,14 @@ lib_wlr_xwayland = static_library( include_directories: wlr_inc, dependencies: [ wayland_server, - xwayland_libs, + xcb, + xcb_composite, + xcb_xfixes, + xcb_image, + xcb_render, + xcb_icccm, + xcb_errors, xkbcommon, pixman, ], ) - -wlr_parts += lib_wlr_xwayland -conf_data.set('WLR_HAS_XWAYLAND', true)