From 449ed2b8e83121ac8c322f15ca494ee7e4c4331a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 13 Jul 2020 12:28:43 +1000 Subject: [PATCH] tools: drop getopt vs getopt_long differentiation On all platforms we build on where getopt.h is available, getopt_long is also available. Only Windows doesn't have either but that's no reason for us to differentiate between the two. If we need to special-case getopt vs getopt_long, it's probably better to implement our own cross-platform version of it and use that. Fixes #161 Signed-off-by: Peter Hutterer --- meson.build | 48 +++++++++++++++++++++--------------------------- tools/xkbcli.c | 4 ---- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/meson.build b/meson.build index fac5c6b..01afcc6 100644 --- a/meson.build +++ b/meson.build @@ -123,12 +123,8 @@ 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') -if have_getopt_long - configh_data.set10('HAVE_GETOPT_LONG', true) -endif # Silence some security & deprecation warnings on MSVC # for some unix/C functions we use. @@ -531,7 +527,7 @@ executable('fuzz-compose', 'fuzz/compose/target.c', dependencies: test_dep) man_pages = [] # Tools -build_tools = have_getopt +build_tools = have_getopt_long if build_tools libxkbcommon_tools_internal = static_library( 'tools-internal', @@ -549,30 +545,28 @@ if build_tools dependencies: tools_dep, install: true) man_pages += 'tools/xkbcli.1.ronn' - if have_getopt_long - executable('xkbcli-compile-keymap', - 'tools/compile-keymap.c', + executable('xkbcli-compile-keymap', + 'tools/compile-keymap.c', + dependencies: tools_dep, + install: true, + install_dir: dir_libexec) + man_pages += 'tools/xkbcli-compile-keymap.1.ronn' + configh_data.set10('HAVE_XKBCLI_COMPILE_KEYMAP', true) + executable('xkbcli-how-to-type', + 'tools/how-to-type.c', + dependencies: tools_dep, + install: true, + install_dir: dir_libexec) + man_pages += 'tools/xkbcli-how-to-type.1.ronn' + configh_data.set10('HAVE_XKBCLI_HOW_TO_TYPE', true) + if cc.has_header('linux/input.h') + executable('xkbcli-interactive-evdev', + 'tools/interactive-evdev.c', dependencies: tools_dep, install: true, install_dir: dir_libexec) - man_pages += 'tools/xkbcli-compile-keymap.1.ronn' - configh_data.set10('HAVE_XKBCLI_COMPILE_KEYMAP', true) - executable('xkbcli-how-to-type', - 'tools/how-to-type.c', - dependencies: tools_dep, - install: true, - install_dir: dir_libexec) - man_pages += 'tools/xkbcli-how-to-type.1.ronn' - configh_data.set10('HAVE_XKBCLI_HOW_TO_TYPE', true) - if cc.has_header('linux/input.h') - executable('xkbcli-interactive-evdev', - 'tools/interactive-evdev.c', - dependencies: tools_dep, - install: true, - install_dir: dir_libexec) - configh_data.set10('HAVE_XKBCLI_INTERACTIVE_EVDEV', true) - man_pages += 'tools/xkbcli-interactive-evdev.1.ronn' - endif + configh_data.set10('HAVE_XKBCLI_INTERACTIVE_EVDEV', true) + man_pages += 'tools/xkbcli-interactive-evdev.1.ronn' endif if get_option('enable-x11') x11_tools_dep = declare_dependency( @@ -627,7 +621,7 @@ if build_tools configh_data.set10('HAVE_XKBCLI_INTERACTIVE_WAYLAND', true) endif - if have_getopt_long and get_option('enable-xkbregistry') + if get_option('enable-xkbregistry') configh_data.set10('HAVE_XKBCLI_LIST', true) executable('xkbcli-list', 'tools/registry-list.c', diff --git a/tools/xkbcli.c b/tools/xkbcli.c index fe6b6b5..78a9aa5 100644 --- a/tools/xkbcli.c +++ b/tools/xkbcli.c @@ -82,7 +82,6 @@ main(int argc, char **argv) while (1) { int c; -#if HAVE_GETOPT_LONG static struct option opts[] = { { "help", no_argument, 0, OPT_HELP }, { "version", no_argument, 0, OPT_VERSION }, @@ -90,9 +89,6 @@ main(int argc, char **argv) }; c = getopt_long(argc, argv, "+hV", opts, &option_index); -#else - c = getopt(argc, argv, "+hV"); -#endif if (c == -1) break;