libei/meson.build
Peter Hutterer 6b3d9255cf libei: implement org.freedesktop.portal.EmulatedInput support
The current implementation of that portal has two methods: EmulateInput to
authenticate and Connect to get the fd to the EIS implementation. The portal
implementation is in charge of finding EIS and restricting it if need be.

This uses libsystemd because we can integrate that with epoll and our
libei_dispatch() method. GDBus requires a glib mainloop, so it's not really
suitable here. Given how simple this is anyway, it's easy to just do the DBus
bits in the caller and then hand the fd to ei_setup_backend_fd().

A eis-fake-portal is provided for testing, this "portal" can use the custom
portal bus name and connect the eis-demo-client to the eis-demo-server.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-25 13:35:18 +10:00

260 lines
6.8 KiB
Meson

project('libei', 'c',
version: '0.1',
license: 'MIT/Expat',
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
meson_version: '>= 0.50.0')
pkgconfig = import('pkgconfig')
cc = meson.get_compiler('c')
cppflags = ['-Wno-unused-parameter', '-fvisibility=hidden']
cflags = cppflags + ['-Wmissing-prototypes', '-Wstrict-prototypes']
add_project_arguments(cflags, language: 'c')
add_project_arguments(cppflags, language: 'cpp')
config_h = configuration_data()
config_h.set('_GNU_SOURCE', '1')
subdir('proto')
src_libutil = [
'src/util-io.h',
'src/util-io.c',
'src/util-list.h',
'src/util-list.c',
'src/util-logger.h',
'src/util-logger.c',
'src/util-macros.h',
'src/util-memfile.h',
'src/util-memfile.c',
'src/util-color.h',
'src/util-object.h',
'src/util-sources.h',
'src/util-sources.c',
'src/util-strings.c',
'src/util-strings.h',
]
lib_util = static_library('util', src_libutil)
dep_libutil = declare_dependency(link_with: lib_util)
src_libei = [
'src/brei-shared.h',
'src/brei-shared.c',
'src/libei.h',
'src/libei.c',
'src/libei-device.c',
'src/libei-log.c',
'src/libei-socket.c',
'src/libei-fd.c',
'src/libei-proto.h',
'src/libei-proto.c',
'src/libei-stubs.c',
proto_headers,
]
if get_option('portal')
dep_systemd = dependency('libsystemd')
config_h.set10('ENABLE_LIBEI_PORTAL', 1)
src_libei += [
'src/libei-portal.c',
]
else
dep_systemd = dependency('', required: false)
endif
deps_libei = [
dep_libutil,
dep_protobuf,
dep_systemd,
]
lib_libei = shared_library('ei',
src_libei,
dependencies: deps_libei,
install: true
)
install_headers('src/libei.h')
dep_libei = declare_dependency(link_with: lib_libei,
include_directories: 'src')
pkgconfig.generate(lib_libei,
filebase: 'libei',
name: 'libEI',
description: 'Emulated Input client library',
version: meson.project_version(),
libraries: lib_libei,
variables: [ 'ei_portal=' + get_option('portal').to_string() ],
)
src_libeis = [
'src/brei-shared.h',
'src/brei-shared.c',
'src/libeis.h',
'src/libeis.c',
'src/libeis-client.c',
'src/libeis-device.c',
'src/libeis-event.c',
'src/libeis-log.c',
'src/libeis-socket.c',
'src/libeis-fd.c',
'src/libeis-proto.h',
'src/libeis-proto.c',
proto_headers,
]
lib_libeis = shared_library('eis',
src_libeis,
dependencies: [dep_libutil, dep_protobuf],
install: true
)
install_headers('src/libeis.h')
dep_libeis = declare_dependency(link_with: lib_libeis,
include_directories: 'src')
pkgconfig.generate(lib_libeis,
filebase: 'libeis',
name: 'libEIS',
description: 'Emulated Input server library',
version: meson.project_version(),
libraries: lib_libeis,
)
lib_libreis = shared_library('reis',
'src/libreis.h',
'src/libreis.c',
proto_headers,
dependencies: [dep_libutil, dep_protobuf],
install: true,
include_directories: 'src',
)
install_headers('src/libreis.h')
dep_libreis = declare_dependency(link_with: lib_libreis,
include_directories: 'src')
pkgconfig.generate(lib_libreis,
filebase: 'libreis',
name: 'libREIS',
description: 'Restriction handler for Emulated Input servers',
version: meson.project_version(),
libraries: lib_libreis,
)
dep_libxkbcommon = dependency('xkbcommon', required: false)
config_h.set10('HAVE_LIBXKBCOMMON', dep_libxkbcommon.found())
executable('eis-demo-server',
'tools/eis-demo-server.c',
dependencies: [dep_libutil, dep_libeis, dep_libxkbcommon])
executable('ei-demo-client',
'tools/ei-demo-client.c',
dependencies: [dep_libutil, dep_libei, dep_libxkbcommon])
if get_option('portal')
executable('eis-fake-portal',
'tools/eis-fake-portal.c',
include_directories: 'src',
dependencies: [dep_libutil, dep_systemd])
endif
# tests
subproject('munit')
munit = dependency('munit', fallback: ['munit', 'munit_dep'])
lib_unittest = static_library('unittest',
'src/util-munit.h',
'src/util-munit.c',
dependencies: munit,
)
dep_unittest = declare_dependency(
link_with: lib_unittest,
dependencies: munit
)
test('unit-tests-untils',
executable('unit-tests-utils',
'test/unit-tests.c',
src_libutil,
include_directories: 'src',
c_args: ['-D_enable_tests_'],
dependencies: [dep_unittest]))
test('unit-tests-ei',
executable('unit-tests-ei',
'test/unit-tests.c',
src_libei,
include_directories: 'src',
c_args: ['-D_enable_tests_'],
dependencies: deps_libei + [dep_unittest]))
test('unit-tests-eis',
executable('unit-tests-eis',
'test/unit-tests.c',
src_libeis,
include_directories: 'src',
c_args: ['-D_enable_tests_'],
dependencies: [dep_unittest, dep_libutil, dep_protobuf]))
lib_eierpecken = static_library('eierpecken',
'test/eierpecken.h',
'test/eierpecken.c',
include_directories: 'src',
dependencies: [munit, dep_libutil, dep_libei, dep_libeis],
)
test('libei-integration-test',
executable('eitest',
'test/test-ei.c',
link_with: lib_eierpecken,
dependencies: [dep_unittest, dep_libei, dep_libeis]))
test('libeis-integration-test',
executable('eistest',
'test/test-eis.c',
link_with: lib_eierpecken,
dependencies: [dep_unittest, dep_libei, dep_libeis]))
valgrind = find_program('valgrind', required : false)
if valgrind.found()
add_test_setup('valgrind',
exe_wrapper : [ valgrind,
'--leak-check=full',
'--gen-suppressions=all',
'--error-exitcode=3' ],
timeout_multiplier : 100)
else
message('valgrind not found, disabling valgrind test suite')
endif
# build-test only
executable('test-build-libei',
'test/buildtest.c',
dependencies : [dep_libei],
include_directories : 'src',
c_args : ['-Werror', '-DINCLUDE_LIBEI=1'],
install : false)
executable('test-build-libeis',
'test/buildtest.c',
dependencies : [dep_libeis],
include_directories : 'src',
c_args : ['-Werror', '-DINCLUDE_LIBEIS=1'],
install : false)
executable('test-build-libreis',
'test/buildtest.c',
dependencies : [dep_libreis],
include_directories : 'src',
c_args : ['-Werror', '-DINCLUDE_LIBREIS=1'],
install : false)
configure_file(output: 'config.h', configuration: config_h)