meson.build: allow disabling libei and libeis

This is primarily a development feature because it makes it easier to
develop a new feature for just one library without having to worry
about build errors in the other library (e.g. when new protocol parts
are added).

Part-of: <https://gitlab.freedesktop.org/libinput/libei/-/merge_requests/310>
This commit is contained in:
Peter Hutterer 2024-11-28 13:20:20 +10:00
parent b3a4243924
commit 247b6acd3c
7 changed files with 258 additions and 202 deletions

View file

@ -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

View file

@ -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

View file

@ -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')

View file

@ -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')

View file

@ -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)

View file

@ -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

View file

@ -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',