project('libei', 'c', version: '0.4.1', license: 'MIT', default_options: [ 'c_std=gnu99', 'warning_level=2' ], meson_version: '>= 0.57.0') pkgconfig = import('pkgconfig') cc = meson.get_compiler('c') cflags =[ '-Wno-unused-parameter', '-Wmissing-prototypes', '-Wno-missing-field-initializers', '-Wstrict-prototypes', '-Wstrict-prototypes', '-Wlogical-op', '-Wpointer-arith', '-Wuninitialized', '-Winit-self', '-Wstrict-prototypes', '-Wimplicit-fallthrough', '-Wredundant-decls', '-Wincompatible-pointer-types', '-Wformat=2', '-Wformat-overflow=2', '-Wformat-signedness', '-Wformat-truncation=2', '-Wmissing-declarations', '-Wshift-overflow=2', '-Wstrict-overflow=2', '-Wswitch', ] if cc.get_id() == 'clang' cflags += [ # clang doesn't think just using _unref_ is a use of the variable # _unref_(foo) *bar = something_that_gives_a_ref # but we make heavy use of that in the test suite for convenience # of events we know must exist but we don't care about specifically '-Wno-unused-variable', ] endif add_project_arguments(cc.get_supported_arguments(cflags), language: 'c') inc_builddir = include_directories('.') inc_src = include_directories('src') config_h = configuration_data() config_h.set('_GNU_SOURCE', '1') config_h.set_quoted('EI_VERSION', meson.project_version()) config_h.set_quoted('EIS_VERSION', meson.project_version()) subdir('proto') src_libutil = files( 'src/util-bits.c', 'src/util-io.c', 'src/util-list.c', 'src/util-logger.c', 'src/util-memfile.c', 'src/util-sources.c', 'src/util-strings.c', ) lib_util = static_library('util', src_libutil) dep_libutil = declare_dependency(link_with: lib_util) proto_c_template = files('src/ei-proto.c.tmpl') proto_h_template = files('src/ei-proto.h.tmpl') 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@', proto_c_template]) src_libei = files( 'src/brei-shared.c', 'src/libei.c', 'src/libei-callback.c', 'src/libei-connection-setup.c', 'src/libei-connection.c', 'src/libei-device.c', 'src/libei-event.c', 'src/libei-fd.c', 'src/libei-keyboard.c', 'src/libei-log.c', 'src/libei-pingpong.c', 'src/libei-pointer.c', 'src/libei-region.c', 'src/libei-region.c', 'src/libei-seat.c', 'src/libei-socket.c', 'src/libei-touchscreen.c', ) + [ei_proto_headers, ei_proto_sources] deps_libei = [ dep_libutil, ] lib_libei = shared_library('ei', src_libei, dependencies: deps_libei, gnu_symbol_visibility: 'hidden', include_directories: ['src'], install: true ) install_headers('src/libei.h') dep_libei = declare_dependency(link_with: lib_libei, include_directories: [inc_src]) meson.override_dependency('libei', dep_libei) pkgconfig.generate(lib_libei, filebase: 'libei', name: 'libEI', description: 'Emulated Input client library', version: meson.project_version(), libraries: lib_libei, ) 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@', proto_c_template]) src_libeis = files( 'src/brei-shared.c', 'src/libeis.c', 'src/libeis-callback.c', 'src/libeis-client.c', 'src/libeis-connection-setup.c', 'src/libeis-connection.c', 'src/libeis-device.c', 'src/libeis-event.c', 'src/libeis-fd.c', 'src/libeis-keyboard.c', 'src/libeis-log.c', 'src/libeis-pingpong.c', 'src/libeis-pointer.c', 'src/libeis-region.c', 'src/libeis-seat.c', 'src/libeis-socket.c', 'src/libeis-touchscreen.c', ) + [eis_proto_headers, eis_proto_sources] lib_libeis = shared_library('eis', src_libeis, dependencies: [dep_libutil], include_directories: [inc_src], gnu_symbol_visibility: 'hidden', install: true ) install_headers('src/libeis.h') dep_libeis = declare_dependency(link_with: lib_libeis, include_directories: [inc_src]) meson.override_dependency('libeis', dep_libeis) pkgconfig.generate(lib_libeis, filebase: 'libeis', name: 'libEIS', description: 'Emulated Input server library', version: meson.project_version(), libraries: lib_libeis, ) 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 = files( 'tools/eis-demo-server.c', ) if dep_libevdev.found() src_eis_demo_server += files( '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]) executable('ei-debug-events', 'tools/ei-debug-events.c', dependencies: [dep_libutil, dep_libei, dep_libevdev], install: true) dep_systemd = dependency('libsystemd', required: get_option('liboeffis')) build_oeffis = dep_systemd.found() if build_oeffis src_liboeffis = files('src/liboeffis.c') deps_liboeffis = [dep_libutil, dep_systemd] lib_liboeffis = shared_library('oeffis', src_liboeffis, dependencies: deps_liboeffis, gnu_symbol_visibility: 'hidden', install: true ) install_headers('src/liboeffis.h') dep_liboeffis = declare_dependency(link_with: lib_liboeffis, include_directories: [inc_src]) meson.override_dependency('liboeffis', dep_liboeffis) pkgconfig.generate(lib_liboeffis, filebase: 'liboeffis', name: 'libOeffis', description: 'RemoteDesktop portal DBus helper library', version: meson.project_version(), libraries: lib_liboeffis, ) executable('oeffis-demo-tool', 'tools/oeffis-demo-tool.c', dependencies: [dep_libutil, dep_liboeffis]) endif # tests if get_option('tests') subdir('test') endif configure_file(output: 'config.h', configuration: config_h) if get_option('documentation') subdir('doc') endif