libei/meson.build

257 lines
7.6 KiB
Meson
Raw Normal View History

project('libei', 'c',
2022-12-09 20:08:01 +10:00
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')
brei_proto_h_template = files('src/brei-proto.h.tmpl')
brei_proto_headers = custom_target('brei-proto-headers',
input: protocol_xml,
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@', proto_c_template])
src_libei = files(
'src/brei-shared.c',
'src/libei.c',
'src/libei-callback.c',
'src/libei-handshake.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',
) + [brei_proto_headers, 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-handshake.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',
) + [brei_proto_headers, 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
eis_demo_server = 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