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 <peter.hutterer@who-t.net>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
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"