build: Fix build and tests on macOS

This commit addresses several compatibility issues that prevented Wayland
from building and passing its test suite on macOS

Core and Compatibility changes:
- Emulate Linux behavior by explicitly setting O_NONBLOCK on connections
  (fixes blocking sendmsg issues on macOS).
- Fix compilation on platforms missing SOCK_CLOEXEC and MSG_CMSG_CLOEXEC.
- Implement wl_os_socket_peercred() using LOCAL_PEERPID for macOS.
- Ensure availability of struct itimerspec (required for POSIX Timers API).

Test suite fixes:
- Add socketpair_cloexec() wrapper to handle platforms without atomic
  SOCK_CLOEXEC support.
- Add implementation of memrchr() for platforms that do not provide it.
- Implement is_debugger_attached() for macOS to handle test timeouts.
- Fix tests to handle Mach-O binary format (instead of ELF).
- Update egl-symbols-check to support macOS *.dylib Mach-O libraries.

Build system:
- Add meson option 'xml_catalog' to allow specifying custom catalog paths.

Signed-off-by: Martin Lopatář <lopin@dataplex.cz>
This commit is contained in:
Martin Lopatář 2026-01-10 08:01:57 +01:00
parent 5a45a89a83
commit 0f7f06bd4c
16 changed files with 180 additions and 23 deletions

View file

@ -21,8 +21,16 @@ if vers.version_compare('< 2.26.0')
error('Dot (Graphviz) 2.26 or later is required for building documentation, found @0@.'.format(vers))
endif
run_env = environment()
if catalog_path != ''
if not catalog_path.startswith('/')
catalog_path = meson.project_source_root() / catalog_path
endif
run_env.set('XML_CATALOG_FILES', catalog_path)
endif
manpage_xsl = 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl'
cmd = run_command(xsltproc, '--nonet', manpage_xsl, check: false)
cmd = run_command(xsltproc, '--nonet', manpage_xsl, env: run_env, check: false)
if cmd.returncode() != 0
error('The style sheet for man pages providing "@0@" was not found.'.format(manpage_xsl))
endif

View file

@ -28,6 +28,7 @@ endforeach
publican_inputs += custom_target(
'ProtocolSpec.xml',
command: [ xsltproc, '-o', '@OUTPUT@', proto_to_docboox_xsl, '@INPUT@' ],
env: run_env,
input: wayland_protocol_xml,
output: 'ProtocolSpec.xml'
)
@ -35,6 +36,7 @@ publican_inputs += custom_target(
publican_inputs += custom_target(
'ProtocolInterfaces.xml',
command: [ xsltproc, '-o', '@OUTPUT@', proto_iface_to_docboox_xsl, '@INPUT@' ],
env: run_env,
input: wayland_protocol_xml,
output: 'ProtocolInterfaces.xml'
)
@ -45,6 +47,7 @@ publican_inputs += custom_target(
ClientAPI_combined = custom_target(
'ClientAPI-combine-doxygen-files',
command: [ xsltproc, '-o', '@OUTPUT@', '@INPUT@' ],
env: run_env,
input: [ doxygen_Client_combine_xslt, doxygen_Client_index_xml ],
output: 'ClientAPI-combined.xml'
)
@ -53,6 +56,7 @@ ClientAPI_combined = custom_target(
publican_inputs += custom_target(
'ClientAPI-doxygen-to-docbook',
command: [ xsltproc, '-o', '@OUTPUT@', '--stringparam', 'which', 'Client', to_publican_xsl, '@INPUT@' ],
env: run_env,
input: ClientAPI_combined,
output: 'ClientAPI.xml'
)
@ -60,6 +64,7 @@ publican_inputs += custom_target(
ServerAPI_combined = custom_target(
'ServerAPI-combine-doxygen-files',
command: [ xsltproc, '-o', '@OUTPUT@', '@INPUT@' ],
env: run_env,
input: [ doxygen_Server_combine_xslt, doxygen_Server_index_xml ],
output: 'ServerAPI-combined.xml'
)
@ -67,6 +72,7 @@ ServerAPI_combined = custom_target(
publican_inputs += custom_target(
'ServerAPI-doxygen-to-docbook',
command: [ xsltproc, '-o', '@OUTPUT@', '--stringparam', 'which', 'Server', to_publican_xsl, '@INPUT@' ],
env: run_env,
input: ServerAPI_combined,
output: 'ServerAPI.xml'
)
@ -88,6 +94,7 @@ foreach src : files([
merge_mapcoords_xsl,
'@INPUT@',
],
env: run_env,
input: src,
output: [name],
depends: publican_image_maps,
@ -107,6 +114,7 @@ custom_target(
'html',
'@INPUT0@'
],
env: run_env,
input: publican_inputs,
output: 'html',
build_by_default: true,