From 10a881a499e91883c8f19c59c9ac6e31d0af8874 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 9 Jul 2020 13:31:20 +1000 Subject: [PATCH] meson.build: only build the tools where getopt.h is available Windows doesn't have getopt.h. This would prevent building the tools but they are behind other checks that cause them to be disabled. The only tools that don't need getopt.h are interactive-wayland and interactive-x11 but neither is particularly useful on Windows. Just hide all tools behind the getopt check in preparation for the upcoming tool consolidation work. Signed-off-by: Peter Hutterer --- meson.build | 120 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/meson.build b/meson.build index 30f8abc..ec1dbe2 100644 --- a/meson.build +++ b/meson.build @@ -118,6 +118,7 @@ elif cc.has_header_symbol('stdlib.h', '__secure_getenv', prefix: system_ext_defi else message('C library does not support secure_getenv, using getenv instead') endif +have_getopt = cc.has_header_symbol('getopt.h', 'getopt') have_getopt_long = cc.has_header_symbol('getopt.h', 'getopt_long', prefix: '#define _GNU_SOURCE') @@ -525,66 +526,69 @@ executable('fuzz-compose', 'fuzz/compose/target.c', dependencies: test_dep) # Demo programs. -libxkbcommon_tools_internal = static_library( - 'tools-internal', - 'tools/tools-common.h', - 'tools/tools-common.c', - libxkbcommon_sources, - include_directories: include_directories('src'), -) -tools_dep = declare_dependency( - include_directories: [include_directories('src'), include_directories('tools')], - link_with: libxkbcommon_tools_internal, -) - -if have_getopt_long - executable('xkbcommon-rmlvo-to-keymap', 'tools/rmlvo-to-keymap.c', dependencies: tools_dep) - executable('xkbcommon-how-to-type', 'tools/how-to-type.c', dependencies: tools_dep) -endif -if cc.has_header('linux/input.h') - executable('xkbcommon-interactive-evdev', 'tools/interactive-evdev.c', dependencies: tools_dep) -endif -if get_option('enable-x11') - x11_tools_dep = declare_dependency( - link_with: libxkbcommon_x11_internal, - dependencies: [ - tools_dep, - xcb_dep, - xcb_xkb_dep, - ], - ) - executable('xkbcommon-interactive-x11', 'tools/interactive-x11.c', dependencies: x11_tools_dep) -endif -if get_option('enable-wayland') - wayland_client_dep = dependency('wayland-client', version: '>=1.2.0', required: false) - wayland_protocols_dep = dependency('wayland-protocols', version: '>=1.12', required: false) - wayland_scanner_dep = dependency('wayland-scanner', required: false, native: true) - if not wayland_client_dep.found() or not wayland_protocols_dep.found() or not wayland_scanner_dep.found() - error('''The Wayland demo programs require wayland-client >= 1.2.0, wayland-protocols >= 1.7 which were not found. -You can disable the Wayland demo programs with -Denable-wayland=false.''') - endif - - wayland_scanner = find_program(wayland_scanner_dep.get_pkgconfig_variable('wayland_scanner')) - wayland_scanner_code_gen = generator( - wayland_scanner, - output: '@BASENAME@-protocol.c', - arguments: ['code', '@INPUT@', '@OUTPUT@'], +build_tools = have_getopt +if build_tools + libxkbcommon_tools_internal = static_library( + 'tools-internal', + 'tools/tools-common.h', + 'tools/tools-common.c', + libxkbcommon_sources, + include_directories: include_directories('src'), ) - wayland_scanner_client_header_gen = generator( - wayland_scanner, - output: '@BASENAME@-client-protocol.h', - arguments: ['client-header', '@INPUT@', '@OUTPUT@'], + tools_dep = declare_dependency( + include_directories: [include_directories('src'), include_directories('tools')], + link_with: libxkbcommon_tools_internal, ) - wayland_protocols_datadir = wayland_protocols_dep.get_pkgconfig_variable('pkgdatadir') - xdg_shell_xml = join_paths(wayland_protocols_datadir, 'stable/xdg-shell/xdg-shell.xml') - xdg_shell_sources = [ - wayland_scanner_code_gen.process(xdg_shell_xml), - wayland_scanner_client_header_gen.process(xdg_shell_xml), - ] - executable('xkbcommon-interactive-wayland', - 'tools/interactive-wayland.c', - xdg_shell_sources, - dependencies: [tools_dep, wayland_client_dep]) + + if have_getopt_long + executable('xkbcommon-rmlvo-to-keymap', 'tools/rmlvo-to-keymap.c', dependencies: tools_dep) + executable('xkbcommon-how-to-type', 'tools/how-to-type.c', dependencies: tools_dep) + endif + if cc.has_header('linux/input.h') + executable('xkbcommon-interactive-evdev', 'tools/interactive-evdev.c', dependencies: tools_dep) + endif + if get_option('enable-x11') + x11_tools_dep = declare_dependency( + link_with: libxkbcommon_x11_internal, + dependencies: [ + tools_dep, + xcb_dep, + xcb_xkb_dep, + ], + ) + executable('xkbcommon-interactive-x11', 'tools/interactive-x11.c', dependencies: x11_tools_dep) + endif + if get_option('enable-wayland') + wayland_client_dep = dependency('wayland-client', version: '>=1.2.0', required: false) + wayland_protocols_dep = dependency('wayland-protocols', version: '>=1.12', required: false) + wayland_scanner_dep = dependency('wayland-scanner', required: false, native: true) + if not wayland_client_dep.found() or not wayland_protocols_dep.found() or not wayland_scanner_dep.found() + error('''The Wayland demo programs require wayland-client >= 1.2.0, wayland-protocols >= 1.7 which were not found. + You can disable the Wayland demo programs with -Denable-wayland=false.''') + endif + + wayland_scanner = find_program(wayland_scanner_dep.get_pkgconfig_variable('wayland_scanner')) + wayland_scanner_code_gen = generator( + wayland_scanner, + output: '@BASENAME@-protocol.c', + arguments: ['code', '@INPUT@', '@OUTPUT@'], + ) + wayland_scanner_client_header_gen = generator( + wayland_scanner, + output: '@BASENAME@-client-protocol.h', + arguments: ['client-header', '@INPUT@', '@OUTPUT@'], + ) + wayland_protocols_datadir = wayland_protocols_dep.get_pkgconfig_variable('pkgdatadir') + xdg_shell_xml = join_paths(wayland_protocols_datadir, 'stable/xdg-shell/xdg-shell.xml') + xdg_shell_sources = [ + wayland_scanner_code_gen.process(xdg_shell_xml), + wayland_scanner_client_header_gen.process(xdg_shell_xml), + ] + executable('xkbcommon-interactive-wayland', + 'tools/interactive-wayland.c', + xdg_shell_sources, + dependencies: [tools_dep, wayland_client_dep]) + endif endif # xkeyboard-config "verifier" -- 2.7.4