libei/meson.build
Peter Hutterer 2bb846696f Change to use server-created devices
This changes the protocol so that it is the EIS implementation that
creates devices within a seat.

A client now "binds" to a seat and the EIS implementation creates
devices matching the requested capabilities. A client can close a device
if it no longer wants those but otherwise everything (including pointer
ranges) is handled by the server.

This is one giant patch because changes at the protocol level cannot
easily be broken out into smaller patches. Some FIXMEs are left which
will be handled in follow-up patches, e.g. the keymap handling is
basically broken right now.

Fixes #7

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2021-07-21 11:02:54 +10:00

290 lines
7.7 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-seat.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: [ '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-seat.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())
dep_libevdev = dependency('libevdev', required: false)
config_h.set10('HAVE_LIBEVDEV', dep_libevdev.found())
src_eis_demo_server = [
'tools/eis-demo-server.h',
'tools/eis-demo-server.c',
]
if dep_libevdev.found()
src_eis_demo_server += [
'tools/eis-demo-server-uinput.c',
]
endif
executable('eis-demo-server',
src_eis_demo_server,
dependencies: [
dep_libutil,
dep_libeis,
dep_libxkbcommon,
dep_libevdev
])
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
if get_option('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-utils',
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-main.c',
'test/test-ei.c',
'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)
if add_languages('cpp', required: false)
executable('test-build-cxx',
'test/buildtest.cc',
dependencies: [dep_libei, dep_libeis],
include_directories: 'src',
install: false)
endif
endif # tests
configure_file(output: 'config.h', configuration: config_h)
if get_option('documentation')
subdir('doc')
endif