diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a280a75..1b90a5f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -253,6 +253,17 @@ build-no-doxygen@fedora:40: before_script: - dnf remove -y doxygen +build-disable-features@fedora:40: + extends: + - .fedora-build@template + parallel: + matrix: + - FEATURE: libei + - FEATURE: libeis + - FEATURE: liboeffis + variables: + MESON_ARGS: '-D${FEATURE}=disabled' + valgrind@fedora:40: extends: - .fedora-build@template diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template index 7386b6a..a95f9d1 100644 --- a/.gitlab-ci/ci.template +++ b/.gitlab-ci/ci.template @@ -253,6 +253,17 @@ build-no-doxygen@{{distro.name}}:{{version}}: before_script: - dnf remove -y doxygen +build-disable-features@{{distro.name}}:{{version}}: + extends: + - .{{distro.name}}-build@template + parallel: + matrix: + - FEATURE: libei + - FEATURE: libeis + - FEATURE: liboeffis + variables: + MESON_ARGS: '-D${FEATURE}=disabled' + valgrind@{{distro.name}}:{{version}}: extends: - .{{distro.name}}-build@template diff --git a/meson.build b/meson.build index e615e3b..08170a8 100644 --- a/meson.build +++ b/meson.build @@ -101,6 +101,11 @@ if not get_option('liboeffis').disabled() else dep_sdbus = dependency('', required: false) endif + +build_oeffis = dep_sdbus.found() +build_libeis = not get_option('libeis').disabled() +build_libei = not get_option('libei').disabled() + config_h.set10('HAVE_LIBSYSTEMD', dep_sdbus.found() and dep_sdbus.name() == 'libsystemd') config_h.set10('HAVE_LIBELOGIND', dep_sdbus.found() and dep_sdbus.name() == 'libelogind') config_h.set10('HAVE_BASU', dep_sdbus.found() and dep_sdbus.name() == 'basu') diff --git a/meson_options.txt b/meson_options.txt index d93ee0f..d13deda 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -2,3 +2,5 @@ option('documentation', type: 'array', value: [], choices: ['api', 'protocol'], option('sd-bus-provider', type: 'combo', choices: ['auto', 'libsystemd', 'libelogind', 'basu'], value: 'auto', description: 'Provider of the sd-bus library') option('tests', type: 'feature', value: 'auto', description: 'Enable/disable tests') option('liboeffis', type: 'feature', value: 'auto', description: 'Build liboeffis.so') +option('libeis', type: 'feature', value: 'auto', description: 'Build libeis.so') +option('libei', type: 'feature', value: 'auto', description: 'Build libei.so') diff --git a/src/meson.build b/src/meson.build index e10e821..2c4f9e7 100644 --- a/src/meson.build +++ b/src/meson.build @@ -27,125 +27,127 @@ brei_proto_headers = custom_target('brei-proto-headers', output: ['brei-proto.h'], command: [scanner, '--component=brei', '--output=@OUTPUT@', '@INPUT@', brei_proto_h_template]) -ei_proto_headers = custom_target('ei-proto-headers', - input: protocol_xml, - output: ['ei-proto.h'], - command: [scanner, '--component=ei', '--output=@OUTPUT@', '@INPUT@', proto_h_template]) -ei_proto_sources = custom_target('ei-proto-sources', - input: protocol_xml, - output: ['ei-proto.c'], - command: [scanner, '--component=ei', '--output=@OUTPUT@', '@INPUT@', - '--jinja-extra-data={"headerfile": "ei-proto.h"}', proto_c_template]) -src_libei = files( - 'brei-shared.c', - 'libei.c', - 'libei-button.c', - 'libei-callback.c', - 'libei-connection.c', - 'libei-device.c', - 'libei-event.c', - 'libei-fd.c', - 'libei-handshake.c', - 'libei-keyboard.c', - 'libei-log.c', - 'libei-pingpong.c', - 'libei-pointer-absolute.c', - 'libei-pointer.c', - 'libei-region.c', - 'libei-region.c', - 'libei-scroll.c', - 'libei-seat.c', - 'libei-socket.c', - 'libei-touchscreen.c', -) + [brei_proto_headers, ei_proto_headers, ei_proto_sources] +if build_libei + ei_proto_headers = custom_target('ei-proto-headers', + input: protocol_xml, + output: ['ei-proto.h'], + command: [scanner, '--component=ei', '--output=@OUTPUT@', '@INPUT@', proto_h_template]) + ei_proto_sources = custom_target('ei-proto-sources', + input: protocol_xml, + output: ['ei-proto.c'], + command: [scanner, '--component=ei', '--output=@OUTPUT@', '@INPUT@', + '--jinja-extra-data={"headerfile": "ei-proto.h"}', proto_c_template]) + src_libei = files( + 'brei-shared.c', + 'libei.c', + 'libei-button.c', + 'libei-callback.c', + 'libei-connection.c', + 'libei-device.c', + 'libei-event.c', + 'libei-fd.c', + 'libei-handshake.c', + 'libei-keyboard.c', + 'libei-log.c', + 'libei-pingpong.c', + 'libei-pointer-absolute.c', + 'libei-pointer.c', + 'libei-region.c', + 'libei-region.c', + 'libei-scroll.c', + 'libei-seat.c', + 'libei-socket.c', + 'libei-touchscreen.c', + ) + [brei_proto_headers, ei_proto_headers, ei_proto_sources] -deps_libei = [ - dep_libutil, -] + deps_libei = [ + dep_libutil, + ] -lib_libei = library('ei', - src_libei, - dependencies: deps_libei, - include_directories: [inc_builddir], - gnu_symbol_visibility: 'hidden', - version: soname, - install: true -) -libei_headers = files('libei.h') -install_headers(libei_headers, subdir: libei_api_dir) + lib_libei = library('ei', + src_libei, + dependencies: deps_libei, + include_directories: [inc_builddir], + gnu_symbol_visibility: 'hidden', + version: soname, + install: true + ) + libei_headers = files('libei.h') + install_headers(libei_headers, subdir: libei_api_dir) -dep_libei = declare_dependency(link_with: lib_libei, - include_directories: [inc_src]) -meson.override_dependency('libei', dep_libei) + dep_libei = declare_dependency(link_with: lib_libei, + include_directories: [inc_src]) + meson.override_dependency('libei', dep_libei) -pkgconfig.generate(lib_libei, - filebase: 'libei-@0@'.format(libei_api_version), - name: 'libEI', - description: 'Emulated Input client library', - subdirs: libei_api_dir, - version: meson.project_version(), - libraries: lib_libei, -) + pkgconfig.generate(lib_libei, + filebase: 'libei-@0@'.format(libei_api_version), + name: 'libEI', + description: 'Emulated Input client library', + subdirs: libei_api_dir, + version: meson.project_version(), + libraries: lib_libei, + ) +endif -eis_proto_headers = custom_target('eis-proto-headers', - input: protocol_xml, - output: ['eis-proto.h'], - command: [scanner, '--component=eis', '--output=@OUTPUT@', '@INPUT@', proto_h_template]) -eis_proto_sources = custom_target('eis-proto-sources', - input: protocol_xml, - output: ['eis-proto.c'], - command: [scanner, '--component=eis', '--output=@OUTPUT@', '@INPUT@', - '--jinja-extra-data={"headerfile": "eis-proto.h"}', proto_c_template]) +if build_libeis + eis_proto_headers = custom_target('eis-proto-headers', + input: protocol_xml, + output: ['eis-proto.h'], + command: [scanner, '--component=eis', '--output=@OUTPUT@', '@INPUT@', proto_h_template]) + eis_proto_sources = custom_target('eis-proto-sources', + input: protocol_xml, + output: ['eis-proto.c'], + command: [scanner, '--component=eis', '--output=@OUTPUT@', '@INPUT@', + '--jinja-extra-data={"headerfile": "eis-proto.h"}', proto_c_template]) -src_libeis = files( - 'brei-shared.c', - 'libeis-button.c', - 'libeis-callback.c', - 'libeis-client.c', - 'libeis-connection.c', - 'libeis-device.c', - 'libeis-event.c', - 'libeis-fd.c', - 'libeis-handshake.c', - 'libeis-keyboard.c', - 'libeis-log.c', - 'libeis-pingpong.c', - 'libeis-pointer-absolute.c', - 'libeis-pointer.c', - 'libeis-region.c', - 'libeis-scroll.c', - 'libeis-seat.c', - 'libeis-socket.c', - 'libeis-touchscreen.c', - 'libeis.c', -) + [brei_proto_headers, eis_proto_headers, eis_proto_sources] + src_libeis = files( + 'brei-shared.c', + 'libeis-button.c', + 'libeis-callback.c', + 'libeis-client.c', + 'libeis-connection.c', + 'libeis-device.c', + 'libeis-event.c', + 'libeis-fd.c', + 'libeis-handshake.c', + 'libeis-keyboard.c', + 'libeis-log.c', + 'libeis-pingpong.c', + 'libeis-pointer-absolute.c', + 'libeis-pointer.c', + 'libeis-region.c', + 'libeis-scroll.c', + 'libeis-seat.c', + 'libeis-socket.c', + 'libeis-touchscreen.c', + 'libeis.c', + ) + [brei_proto_headers, eis_proto_headers, eis_proto_sources] -lib_libeis = library('eis', - src_libeis, - dependencies: [dep_libutil], - include_directories: [inc_builddir], - gnu_symbol_visibility: 'hidden', - version: soname, - install: true -) -libeis_headers = files('libeis.h') -install_headers(libeis_headers, subdir: libei_api_dir) + lib_libeis = library('eis', + src_libeis, + dependencies: [dep_libutil], + include_directories: [inc_builddir], + gnu_symbol_visibility: 'hidden', + version: soname, + install: true + ) + libeis_headers = files('libeis.h') + install_headers(libeis_headers, subdir: libei_api_dir) -dep_libeis = declare_dependency(link_with: lib_libeis, - include_directories: [inc_src]) -meson.override_dependency('libeis', dep_libeis) + dep_libeis = declare_dependency(link_with: lib_libeis, + include_directories: [inc_src]) + meson.override_dependency('libeis', dep_libeis) -pkgconfig.generate(lib_libeis, - filebase: 'libeis-@0@'.format(libei_api_version), - name: 'libEIS', - description: 'Emulated Input server library', - subdirs: libei_api_dir, - version: meson.project_version(), - libraries: lib_libeis, -) + pkgconfig.generate(lib_libeis, + filebase: 'libeis-@0@'.format(libei_api_version), + name: 'libEIS', + description: 'Emulated Input server library', + subdirs: libei_api_dir, + version: meson.project_version(), + libraries: lib_libeis, + ) +endif -build_oeffis = dep_sdbus.found() -summary({'liboeffis': build_oeffis}, section: 'Conditional Features') if build_oeffis src_liboeffis = files('liboeffis.c') deps_liboeffis = [dep_libutil, dep_sdbus] @@ -175,3 +177,9 @@ if build_oeffis ) endif + +summary({ + 'liboeffis': build_oeffis, + 'libei': build_libei, + 'libeis': build_libeis, +}, section: 'Conditional Features', bool_yn: true) diff --git a/test/meson.build b/test/meson.build index a74af5a..59165b1 100644 --- a/test/meson.build +++ b/test/meson.build @@ -27,23 +27,27 @@ test('unit-tests-utils', dependencies: [dep_unittest, dep_math, dep_epoll]), args: ['--log-visible', 'debug']) -test('unit-tests-ei', - executable('unit-tests-ei', - 'unit-tests.c', - src_libei, - include_directories: [inc_src, inc_builddir], - c_args: ['-D_enable_tests_'], - dependencies: deps_libei + [dep_unittest]), - args: ['--log-visible', 'debug']) +if build_libei + test('unit-tests-ei', + executable('unit-tests-ei', + 'unit-tests.c', + src_libei, + include_directories: [inc_src, inc_builddir], + c_args: ['-D_enable_tests_'], + dependencies: deps_libei + [dep_unittest]), + args: ['--log-visible', 'debug']) +endif -test('unit-tests-eis', - executable('unit-tests-eis', - 'unit-tests.c', - src_libeis, - include_directories: [inc_src, inc_builddir], - c_args: ['-D_enable_tests_'], - dependencies: [dep_unittest, dep_libutil]), - args: ['--log-visible', 'debug']) +if build_libeis + test('unit-tests-eis', + executable('unit-tests-eis', + 'unit-tests.c', + src_libeis, + include_directories: [inc_src, inc_builddir], + c_args: ['-D_enable_tests_'], + dependencies: [dep_unittest, dep_libutil]), + args: ['--log-visible', 'debug']) +endif if build_oeffis test('unit-tests-oeffis', @@ -56,32 +60,34 @@ if build_oeffis args: ['--log-visible', 'debug']) endif -lib_eierpecken = static_library('eierpecken', - 'eierpecken.h', - 'eierpecken.c', - include_directories: [inc_src, inc_builddir], - dependencies: [munit, dep_libutil, dep_libei, dep_libeis], -) +if build_libei and build_libeis + lib_eierpecken = static_library('eierpecken', + 'eierpecken.h', + 'eierpecken.c', + include_directories: [inc_src, inc_builddir], + dependencies: [munit, dep_libutil, dep_libei, dep_libeis], + ) -eierpecken = executable('eierpecken', - 'test-ei-device.c', - 'test-ei-seat.c', - 'test-ei.c', - 'test-eis.c', - 'test-main.c', - link_with: lib_eierpecken, - include_directories: [inc_builddir], - dependencies: [dep_unittest, dep_libei, dep_libeis]) + eierpecken = executable('eierpecken', + 'test-ei-device.c', + 'test-ei-seat.c', + 'test-ei.c', + 'test-eis.c', + 'test-main.c', + link_with: lib_eierpecken, + include_directories: [inc_builddir], + dependencies: [dep_unittest, dep_libei, dep_libeis]) -test('eierpecken', - eierpecken, - args: ['--log-visible', 'debug', '--enable-sigalarm'], - suite: 'sigalrm') + test('eierpecken', + eierpecken, + args: ['--log-visible', 'debug', '--enable-sigalarm'], + suite: 'sigalrm') -test('eierpecken-no-sigalrm', - eierpecken, - args: ['--log-visible', 'debug'], - suite: 'nosigalrm') + test('eierpecken-no-sigalrm', + eierpecken, + args: ['--log-visible', 'debug'], + suite: 'nosigalrm') +endif valgrind = find_program('valgrind', required : false) if valgrind.found() @@ -96,34 +102,43 @@ else message('valgrind not found, disabling valgrind test suite') endif -# build-test only -executable('test-build-libei', - 'buildtest.c', - dependencies : [dep_libei], - include_directories : [inc_src], - c_args : ['-Werror', '-DINCLUDE_LIBEI=1'], - install : false) +if build_libei + # build-test only + executable('test-build-libei', + 'buildtest.c', + dependencies : [dep_libei], + include_directories : [inc_src], + c_args : ['-Werror', '-DINCLUDE_LIBEI=1'], + install : false) +endif -executable('test-build-libeis', - 'buildtest.c', - dependencies : [dep_libeis], - include_directories : [inc_src], - c_args : ['-Werror', '-DINCLUDE_LIBEIS=1'], - install : false) +if build_libeis + executable('test-build-libeis', + 'buildtest.c', + dependencies : [dep_libeis], + include_directories : [inc_src], + c_args : ['-Werror', '-DINCLUDE_LIBEIS=1'], + install : false) +endif if add_languages('cpp', required: false) - executable('test-build-cxx-libei', - 'buildtest.cc', - dependencies: [dep_libei], - include_directories: [inc_src], - c_args : ['-Werror', '-DINCLUDE_LIBEI=1'], - install: false) - executable('test-build-cxx-libeis', - 'buildtest.cc', - dependencies: [dep_libeis], - include_directories: [inc_src], - c_args : ['-Werror', '-DINCLUDE_LIBEIS=1'], - install: false) + if build_libei + executable('test-build-cxx-libei', + 'buildtest.cc', + dependencies: [dep_libei], + include_directories: [inc_src], + c_args : ['-Werror', '-DINCLUDE_LIBEI=1'], + install: false) + endif + + if build_libeis + executable('test-build-cxx-libeis', + 'buildtest.cc', + dependencies: [dep_libeis], + include_directories: [inc_src], + c_args : ['-Werror', '-DINCLUDE_LIBEIS=1'], + install: false) + endif endif # Python-based tests @@ -144,7 +159,7 @@ python = pymod.find_installation('python3', pytest = find_program('pytest-3', 'pytest', required: get_option('tests')) pytest_args = ['--verbose', '--log-level=DEBUG'] -enable_pytest = python.found() and pytest.found() +enable_pytest = python.found() and pytest.found() and build_libeis if enable_pytest # pytest xdist is nice because it significantly speeds up our diff --git a/tools/meson.build b/tools/meson.build index 60025d3..e859713 100644 --- a/tools/meson.build +++ b/tools/meson.build @@ -1,35 +1,39 @@ -src_eis_demo_server = files( - 'eis-demo-server.c', -) -if dep_libevdev.found() - src_eis_demo_server += files( - 'eis-demo-server-uinput.c', +if build_libeis + src_eis_demo_server = files( + 'eis-demo-server.c', + ) + if dep_libevdev.found() + src_eis_demo_server += files( + 'eis-demo-server-uinput.c', + ) + endif + + eis_demo_server = executable('eis-demo-server', + src_eis_demo_server, + dependencies: [ + dep_libutil, + dep_libeis, + dep_libxkbcommon, + dep_libevdev + ], + include_directories: [inc_builddir], ) endif -eis_demo_server = executable('eis-demo-server', - src_eis_demo_server, - dependencies: [ - dep_libutil, - dep_libeis, - dep_libxkbcommon, - dep_libevdev - ], - include_directories: [inc_builddir], -) +if build_libei + executable('ei-demo-client', + 'ei-demo-client.c', + dependencies: [dep_libutil, dep_libei, dep_libxkbcommon], + include_directories: [inc_builddir], + ) -executable('ei-demo-client', - 'ei-demo-client.c', - dependencies: [dep_libutil, dep_libei, dep_libxkbcommon], - include_directories: [inc_builddir], -) - -executable('ei-debug-events', - 'ei-debug-events.c', - dependencies: [dep_libutil, dep_libei, dep_libevdev], - include_directories: [inc_builddir], - install: true -) + executable('ei-debug-events', + 'ei-debug-events.c', + dependencies: [dep_libutil, dep_libei, dep_libevdev], + include_directories: [inc_builddir], + install: true + ) +endif if build_oeffis executable('oeffis-demo-tool',