blob: ae8f3879291f68b336734a9cae2ce0764fb34096 [file] [log] [blame]
wayland_version_h = configuration_data()
wayland_version_h.set('WAYLAND_VERSION', meson.project_version())
wayland_version_h.set('WAYLAND_VERSION_MAJOR', wayland_version[0].to_int())
wayland_version_h.set('WAYLAND_VERSION_MINOR', wayland_version[1].to_int())
wayland_version_h.set('WAYLAND_VERSION_MICRO', wayland_version[2].to_int())
configure_file(
input: 'wayland-version.h.in',
output: 'wayland-version.h',
configuration: wayland_version_h,
install: get_option('libraries'),
install_dir: join_paths(get_option('prefix'), get_option('includedir'))
)
wayland_util = static_library(
'wayland-util',
sources: 'wayland-util.c'
)
wayland_util_dep = declare_dependency(
link_with: wayland_util,
include_directories: include_directories('.')
)
if get_option('scanner')
# wayland-scanner
scanner_deps = [ dependency('expat') ]
scanner_args = [ '-include', 'config.h' ]
if get_option('dtd_validation')
scanner_deps += dependency('libxml-2.0')
scanner_args += '-DHAVE_LIBXML=1'
endif
prog_embed = find_program('embed.py', native: true)
embed_dtd = custom_target(
'wayland.dtd.h',
input: '../protocol/wayland.dtd',
output: 'wayland.dtd.h',
command: [ prog_embed, '@INPUT@', 'wayland_dtd' ],
capture: true
)
wayland_scanner_sources = [ 'scanner.c', embed_dtd ]
wayland_scanner_includes = [ root_inc, protocol_inc ]
wayland_scanner = executable(
'wayland-scanner',
wayland_scanner_sources,
c_args: scanner_args,
include_directories: wayland_scanner_includes,
dependencies: [ scanner_deps, wayland_util_dep, ],
install: true
)
pkgconfig.generate(
name: 'Wayland Scanner',
description: 'Wayland scanner',
version: meson.project_version(),
variables: [
'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name()),
'bindir=' + join_paths('${prefix}', get_option('bindir')),
'wayland_scanner=${bindir}/wayland-scanner'
],
filebase: 'wayland-scanner'
)
endif
if meson.is_cross_build() or not get_option('scanner')
scanner_dep = dependency('wayland-scanner', native: true, version: meson.project_version())
wayland_scanner_for_build = find_program(scanner_dep.get_pkgconfig_variable('wayland_scanner'))
else
wayland_scanner_for_build = wayland_scanner
endif
if get_option('libraries')
# wayland libraries
mathlib_dep = cc.find_library('m', required: false)
threads_dep = dependency('threads', required: false)
wayland_private = static_library(
'wayland-private',
sources: [
'connection.c',
'wayland-os.c'
],
dependencies: [ epoll_dep, ffi_dep, rt_dep ]
)
wayland_private_dep = declare_dependency(
link_with: wayland_private,
include_directories: include_directories('.')
)
generated_headers = [
{
'scanner_args': ['server-header'],
'output': 'wayland-server-protocol.h',
'install': true,
},
{
'scanner_args': ['server-header', '-c'],
'output': 'wayland-server-protocol-core.h',
'install': false,
},
{
'scanner_args': ['client-header'],
'output': 'wayland-client-protocol.h',
'install': true,
},
{
'scanner_args': ['client-header', '-c'],
'output': 'wayland-client-protocol-core.h',
'install': false,
},
]
foreach gen: generated_headers
scanner_args = gen['scanner_args']
output_file = gen['output']
install_file = gen['install']
install_dir = join_paths(get_option('prefix'), get_option('includedir'))
target_name = output_file.underscorify()
target = custom_target(
target_name,
command: [
wayland_scanner_for_build, '-s', scanner_args,
'@INPUT@', '@OUTPUT@'
],
input: wayland_protocol_xml,
output: output_file,
install: install_file,
install_dir: install_dir
)
set_variable(target_name, target)
endforeach
wayland_protocol_c = custom_target(
'protocol source',
command: [
wayland_scanner_for_build, '-s', 'public-code', '@INPUT@', '@OUTPUT@'
],
input: wayland_protocol_xml,
output: 'wayland-protocol.c'
)
if wayland_version[0] != '1'
# The versioning used for the shared libraries assumes that the major
# version of Wayland as a whole will increase to 2 if and only if there
# is an ABI break, at which point we should probably bump the SONAME of
# all libraries to .so.2. For more details see
# https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/177
error('We probably need to bump the SONAME of libwayland-server and -client')
endif
wayland_server = library(
'wayland-server',
sources: [
wayland_server_protocol_core_h,
wayland_server_protocol_h,
wayland_protocol_c,
'wayland-server.c',
'wayland-shm.c',
'event-loop.c'
],
# To avoid an unnecessary SONAME bump, wayland 1.x.y produces
# libwayland-server.so.0.x.y.
version: '.'.join(['0', wayland_version[1], wayland_version[2]]),
dependencies: [
epoll_dep,
ffi_dep,
wayland_private_dep,
wayland_util_dep,
mathlib_dep,
threads_dep,
rt_dep
],
include_directories: root_inc,
install: true
)
wayland_server_dep = declare_dependency(
link_with: wayland_server,
include_directories: [ root_inc, include_directories('.') ],
dependencies: [ epoll_dep, ffi_dep, mathlib_dep, threads_dep ],
sources: [
wayland_server_protocol_core_h,
wayland_server_protocol_h
]
)
pkgconfig.generate(
wayland_server,
name: 'Wayland Server',
description: 'Server side implementation of the Wayland protocol',
version: meson.project_version(),
filebase: 'wayland-server',
variables: [
'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name())
]
)
if meson.version().version_compare('>= 0.54.0')
meson.override_dependency('wayland-server', wayland_server_dep)
endif
wayland_client = library(
'wayland-client',
sources: [
wayland_client_protocol_core_h,
wayland_client_protocol_h,
wayland_protocol_c,
'wayland-client.c'
],
# To avoid an unnecessary SONAME bump, wayland 1.x.y produces
# libwayland-client.so.0.x.y.
version: '.'.join(['0', wayland_version[1], wayland_version[2]]),
dependencies: [
epoll_dep,
ffi_dep,
wayland_private_dep,
wayland_util_dep,
mathlib_dep,
threads_dep
],
include_directories: root_inc,
install: true
)
pkgconfig.generate(
wayland_client,
name: 'Wayland Client',
description: 'Wayland client side library',
version: meson.project_version(),
filebase: 'wayland-client',
variables: [
'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name())
]
)
wayland_client_dep = declare_dependency(
link_with: wayland_client,
include_directories: [ root_inc, include_directories('.') ],
sources: [
wayland_client_protocol_core_h,
wayland_client_protocol_h
]
)
if meson.version().version_compare('>= 0.54.0')
meson.override_dependency('wayland-client', wayland_client_dep)
endif
install_headers([
'wayland-util.h',
'wayland-server.h',
'wayland-server-core.h',
'wayland-client.h',
'wayland-client-core.h',
])
endif