wayland/src/meson.build
Sebastian Wick c8a0996703 build: Bump to meson version 0.64.0
This version will be required in the next commit.

Bumps the CI image to get the required version from the debian package
instead of from pip.

Removes the bindir builtin directory from pkgconfig.generate() which is
deprecated since 0.62.0. It will be automatically included when
referenced.

Use `meson setup` everywhere instead of relying on deprecated automatic
detection of the setup command.

Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2025-11-27 17:39:11 +02:00

281 lines
7.4 KiB
Meson

if not (get_option('scanner') or get_option('libraries'))
error('Either -Dscanner=true or -Dlibraries=true is required')
endif
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('${pc_sysrootdir}${datarootdir}', meson.project_name()),
'wayland_scanner=${bindir}/wayland-scanner'
],
filebase: 'wayland-scanner'
)
if meson.can_run_host_binaries()
meson.override_find_program('wayland-scanner', wayland_scanner)
meson.override_dependency('wayland-scanner', declare_dependency(
variables: { 'wayland_scanner': 'wayland-scanner' },
))
endif
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_variable(pkgconfig: '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',
libraries: mathlib_dep,
variables: [
'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
'pkgdatadir=' + join_paths('${pc_sysrootdir}${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',
libraries: mathlib_dep,
variables: [
'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
'pkgdatadir=' + join_paths('${pc_sysrootdir}${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