From 3c02fe5ec22ea5d1fb16573b3551ffe450c8c00c Mon Sep 17 00:00:00 2001 From: nirenjan Date: Mon, 20 Apr 2026 10:28:24 -0700 Subject: [PATCH] refactor: Rearrange files to avoid duplicate code issue Prior to this change, SonarQube complains about duplicated code in the symlinked header files. This change reworks the layout so that the installed headers all reside under the 'includes' directory, and the meson.build files are updated to reflect the new paths. --- daemon/meson.build | 16 ++++---- .../build-config.h.meson | 0 {libx52 => include/libx52}/libx52.h | 0 {libx52io => include/libx52}/libx52io.h | 0 {libx52util => include/libx52}/libx52util.h | 0 {daemon => include/libx52}/x52dcomm.h | 0 include/meson.build | 39 +++++++++++++++++++ usb-ids.h => include/usb-ids.h | 0 {vkm => include/vkm}/vkm.h | 0 libx52/libx52io.h | 1 - libx52/libx52util.h | 1 - libx52/meson.build | 1 - libx52/x52dcomm.h | 1 - libx52io/meson.build | 1 - libx52util/meson.build | 1 - meson.build | 34 ++-------------- tools/test_layout_allowlist_sync.py | 2 +- vkm/meson.build | 1 - 18 files changed, 52 insertions(+), 46 deletions(-) rename config.h.meson => include/build-config.h.meson (100%) rename {libx52 => include/libx52}/libx52.h (100%) rename {libx52io => include/libx52}/libx52io.h (100%) rename {libx52util => include/libx52}/libx52util.h (100%) rename {daemon => include/libx52}/x52dcomm.h (100%) create mode 100644 include/meson.build rename usb-ids.h => include/usb-ids.h (100%) rename {vkm => include/vkm}/vkm.h (100%) delete mode 120000 libx52/libx52io.h delete mode 120000 libx52/libx52util.h delete mode 120000 libx52/x52dcomm.h diff --git a/daemon/meson.build b/daemon/meson.build index 5e6f696..26b0fe9 100644 --- a/daemon/meson.build +++ b/daemon/meson.build @@ -6,14 +6,14 @@ libx52dcomm_sources = [ 'comm_internal.c' ] -install_headers('x52dcomm.h', subdir: meson.project_name()) +root_includes = include_directories('..') lib_libx52dcomm = library('x52dcomm', libx52dcomm_sources, dependencies: [dep_intl, dep_config_h], version: libx52dcomm_version, c_args: sym_hidden_cargs, install: true, - include_directories: includes) + include_directories: [includes, root_includes]) pkgconfig.generate(lib_libx52dcomm, name: 'x52dcomm', @@ -50,7 +50,7 @@ x52d_cflags = [] exe_x52d = executable('x52d', x52d_sources + libx52dcomm_sources, install: true, - include_directories: includes, + include_directories: [includes, root_includes], c_args: sym_hidden_cargs + x52d_cflags, dependencies: x52d_deps, link_with: x52d_linkwith) @@ -58,7 +58,7 @@ exe_x52d = executable('x52d', x52d_sources + libx52dcomm_sources, exe_x52ctl = executable('x52ctl', 'daemon_control.c', install: true, dependencies: [dep_intl, dep_config_h], - include_directories: includes, + include_directories: [includes, root_includes], link_with: lib_libx52dcomm) install_data('x52d.conf', @@ -82,7 +82,7 @@ test('daemon-communication', files('test_daemon_comm.py')[0], x52d_mouse_test_sources = ['mouse_test.c', 'mouse.c'] x52d_mouse_test = executable('x52d-mouse-test', x52d_mouse_test_sources, - include_directories: includes, + include_directories: [includes, root_includes], dependencies: [dep_pinelog, dep_cmocka, dep_intl, dep_math, dep_config_h]) test('x52d-mouse-test', x52d_mouse_test, protocol: 'tap') @@ -91,14 +91,14 @@ layout_usage_allowlist_test = executable('layout-usage-allowlist-test', 'layout_usage_allowlist_test.c', 'layout_usage_allowlist.c', build_by_default: false, - include_directories: includes, + include_directories: [includes, root_includes], dependencies: [dep_cmocka, dep_config_h]) test('layout-usage-allowlist', layout_usage_allowlist_test, protocol: 'tap') crc32_test = executable('crc32-test', 'crc32_test.c', 'crc32.c', build_by_default: false, - include_directories: includes, + include_directories: [includes, root_includes], dependencies: [dep_cmocka, dep_config_h]) test('crc32', crc32_test, protocol: 'tap') @@ -109,7 +109,7 @@ layout_load_test = executable('layout-load-test', 'layout_usage_allowlist.c', 'crc32.c', build_by_default: false, - include_directories: includes, + include_directories: [includes, root_includes], dependencies: [dep_cmocka, dep_config_h]) test('layout-load', layout_load_test, protocol: 'tap') diff --git a/config.h.meson b/include/build-config.h.meson similarity index 100% rename from config.h.meson rename to include/build-config.h.meson diff --git a/libx52/libx52.h b/include/libx52/libx52.h similarity index 100% rename from libx52/libx52.h rename to include/libx52/libx52.h diff --git a/libx52io/libx52io.h b/include/libx52/libx52io.h similarity index 100% rename from libx52io/libx52io.h rename to include/libx52/libx52io.h diff --git a/libx52util/libx52util.h b/include/libx52/libx52util.h similarity index 100% rename from libx52util/libx52util.h rename to include/libx52/libx52util.h diff --git a/daemon/x52dcomm.h b/include/libx52/x52dcomm.h similarity index 100% rename from daemon/x52dcomm.h rename to include/libx52/x52dcomm.h diff --git a/include/meson.build b/include/meson.build new file mode 100644 index 0000000..5a43b91 --- /dev/null +++ b/include/meson.build @@ -0,0 +1,39 @@ +####################################################################### +# build-config.h (Meson configuration; template is config.h.meson) +####################################################################### +sym_hidden_cargs = [] +if compiler.has_argument('-fvisibility=hidden') + sym_hidden_cargs = ['-fvisibility=hidden'] +endif +cdata = configuration_data() +cdata.set_quoted('PACKAGE', meson.project_name()) +cdata.set_quoted('PACKAGE_BUGREPORT', 'https://github.com/nirenjan/libx52/issues') +cdata.set_quoted('PACKAGE_NAME', meson.project_name()) +cdata.set_quoted('LOCALEDIR', get_option('prefix') / get_option('localedir')) +cdata.set_quoted('SYSCONFDIR', get_option('prefix') / get_option('sysconfdir')) +cdata.set_quoted('LOCALSTATEDIR', get_option('prefix') / get_option('localstatedir')) +cdata.set_quoted('DATADIR', get_option('prefix') / get_option('datadir')) +cdata.set_quoted('PACKAGE_VERSION', meson.project_version()) +cdata.set_quoted('VERSION', meson.project_version()) +cdata.set10('ENABLE_NLS', not get_option('nls').disabled()) +cdata.set10('HAVE_FUNC_ATTRIBUTE_NORETURN', compiler.has_function_attribute('noreturn')) +cdata.set10('HAVE_STRUCT_TM_TM_GMTOFF', + compiler.has_member('struct tm', 'tm_gmtoff', prefix:'#include ')) + +config_h = configure_file( + input: 'build-config.h.meson', + output: 'build-config.h', + configuration: cdata +) + +dep_config_h = declare_dependency(sources: config_h) + + +install_headers( + 'libx52/libx52.h', + 'libx52/libx52io.h', + 'libx52/libx52util.h', + 'libx52/x52dcomm.h', + subdir: 'libx52' +) + diff --git a/usb-ids.h b/include/usb-ids.h similarity index 100% rename from usb-ids.h rename to include/usb-ids.h diff --git a/vkm/vkm.h b/include/vkm/vkm.h similarity index 100% rename from vkm/vkm.h rename to include/vkm/vkm.h diff --git a/libx52/libx52io.h b/libx52/libx52io.h deleted file mode 120000 index 55b8da8..0000000 --- a/libx52/libx52io.h +++ /dev/null @@ -1 +0,0 @@ -../libx52io/libx52io.h \ No newline at end of file diff --git a/libx52/libx52util.h b/libx52/libx52util.h deleted file mode 120000 index f841f6d..0000000 --- a/libx52/libx52util.h +++ /dev/null @@ -1 +0,0 @@ -../libx52util/libx52util.h \ No newline at end of file diff --git a/libx52/meson.build b/libx52/meson.build index f11cd56..2332d99 100644 --- a/libx52/meson.build +++ b/libx52/meson.build @@ -16,7 +16,6 @@ lib_libx52 = library('x52', libx52_files, dependencies: [dep_libusb, dep_intl], include_directories: [includes]) -install_headers('libx52.h', subdir: meson.project_name()) pkgconfig.generate(lib_libx52, name: 'libx52', description: 'Linux/Unix library to control Saitek X52/X52Pro joystick extended functionality.', diff --git a/libx52/x52dcomm.h b/libx52/x52dcomm.h deleted file mode 120000 index ba01270..0000000 --- a/libx52/x52dcomm.h +++ /dev/null @@ -1 +0,0 @@ -../daemon/x52dcomm.h \ No newline at end of file diff --git a/libx52io/meson.build b/libx52io/meson.build index 80d5195..1df67ae 100644 --- a/libx52io/meson.build +++ b/libx52io/meson.build @@ -15,7 +15,6 @@ lib_libx52io = library('x52io', libx52io_files, dependencies: [dep_hidapi, dep_intl], include_directories: [includes]) -install_headers('libx52io.h', subdir: meson.project_name()) pkgconfig.generate(lib_libx52io, name: 'libx52io', description: 'Linux/Unix library to read and parse X52 input', diff --git a/libx52util/meson.build b/libx52util/meson.build index 8ffdadd..d69cb8b 100644 --- a/libx52util/meson.build +++ b/libx52util/meson.build @@ -18,7 +18,6 @@ lib_libx52util = library('x52util', util_char_map, 'char_map_lookup.c', include_directories: [includes], ) -install_headers('libx52util.h', subdir: meson.project_name()) pkgconfig.generate(lib_libx52util, name: 'libx52util', description: 'Extra utility functions to manage X52 extended functionality', diff --git a/meson.build b/meson.build index 5ce62dc..9202901 100644 --- a/meson.build +++ b/meson.build @@ -35,36 +35,7 @@ python = pymod.find_installation('python3') pyversion = python.language_version().split('.') assert(pyversion[1].to_int() >= 5, 'Require Python >= 3.5') -####################################################################### -# build-config.h (Meson configuration; template is config.h.meson) -####################################################################### compiler = meson.get_compiler('c') -sym_hidden_cargs = [] -if compiler.has_argument('-fvisibility=hidden') - sym_hidden_cargs = ['-fvisibility=hidden'] -endif -cdata = configuration_data() -cdata.set_quoted('PACKAGE', meson.project_name()) -cdata.set_quoted('PACKAGE_BUGREPORT', 'https://github.com/nirenjan/libx52/issues') -cdata.set_quoted('PACKAGE_NAME', meson.project_name()) -cdata.set_quoted('LOCALEDIR', get_option('prefix') / get_option('localedir')) -cdata.set_quoted('SYSCONFDIR', get_option('prefix') / get_option('sysconfdir')) -cdata.set_quoted('LOCALSTATEDIR', get_option('prefix') / get_option('localstatedir')) -cdata.set_quoted('DATADIR', get_option('prefix') / get_option('datadir')) -cdata.set_quoted('PACKAGE_VERSION', meson.project_version()) -cdata.set_quoted('VERSION', meson.project_version()) -cdata.set10('ENABLE_NLS', not get_option('nls').disabled()) -cdata.set10('HAVE_FUNC_ATTRIBUTE_NORETURN', compiler.has_function_attribute('noreturn')) -cdata.set10('HAVE_STRUCT_TM_TM_GMTOFF', - compiler.has_member('struct tm', 'tm_gmtoff', prefix:'#include ')) - -config_h = configure_file( - input: 'config.h.meson', - output: 'build-config.h', - configuration: cdata -) - -dep_config_h = declare_dependency(sources: config_h) ####################################################################### # Internationalization @@ -122,12 +93,15 @@ dep_pinelog = sub_pinelog.get_variable('libpinelog_dep') # Use system inih dep_inih = dependency('inih') +# Local includes + ####################################################################### # Shared libraries and programs ####################################################################### # Includes -includes = include_directories('.') +includes = include_directories('include') +subdir('include') subdir('libx52') subdir('libx52io') subdir('libx52util') diff --git a/tools/test_layout_allowlist_sync.py b/tools/test_layout_allowlist_sync.py index e621ad9..27e1ebc 100755 --- a/tools/test_layout_allowlist_sync.py +++ b/tools/test_layout_allowlist_sync.py @@ -52,7 +52,7 @@ def main(): ) def check_vkm_modifier_symbols(): - vkm = (root / "vkm" / "vkm.h").read_text(encoding="utf-8") + vkm = (root / "include" / "vkm" / "vkm.h").read_text(encoding="utf-8") for name in ( "VKM_KEY_MOD_LCTRL", "VKM_KEY_MOD_LSHIFT", diff --git a/vkm/meson.build b/vkm/meson.build index ee5623d..0229b8f 100644 --- a/vkm/meson.build +++ b/vkm/meson.build @@ -53,7 +53,6 @@ if host_machine.system() == 'linux' and dep_evdev.found() test('vkm_linux_evdev', vkm_linux_evdev_test) endif -install_headers('vkm.h', subdir: 'vkm') pkgconfig.generate(lib_vkm, name: 'vkm', description: 'Virtual keyboard/mouse interface library for injecting events into the host OS.',