From 1c38c6edcd3ebc842a9375d2d1b1e1348dc9f005 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 29 Nov 2024 11:46:32 +0000 Subject: [PATCH] build: Check for socket(), socketpair() in -lsocket if necessary On older Solaris, these functions exist in -lsocket rather than in the standard C library. If we can't find them immediately, try again with -lsocket added to the dependencies. Later, use network_libs when checking for optional functions like socketpair(), so that we will detect it correctly. If socketpair() is not found, dbus compiles successfully without it, but dbus-daemon will not start because it cannot set up reload signalling. Resolves: https://gitlab.freedesktop.org/dbus/dbus/-/issues/531 Signed-off-by: Simon McVittie --- meson.build | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 09f2e3fa9..33ed5c2ef 100644 --- a/meson.build +++ b/meson.build @@ -612,6 +612,25 @@ else network_libs = [] endif +# socket(), socketpair() might be in -lsocket, for example on older Solaris +foreach function : ['socket', 'socketpair'] + if not cc.has_function( + function, + args: compile_args_c, + dependencies: network_libs, + ) + socket_lib = cc.find_library('socket', required: false) + if socket_lib.found() and cc.has_function( + function, + args: compile_args_c, + dependencies: network_libs + [socket_lib], + ) + network_libs += [socket_lib] + break + endif + endif +endforeach + if get_option('x11_autolaunch').disabled() use_x11_autolaunch = false x11 = not_found @@ -675,7 +694,14 @@ check_functions = [ foreach function : check_functions macro = 'HAVE_' + function.underscorify().to_upper() - config.set(macro, cc.has_function(function, args: compile_args_c) ? 1 : false) + config.set( + macro, + cc.has_function( + function, + args: compile_args_c, + dependencies: network_libs, + ) ? 1 : false, + ) endforeach # keep CMakeLists.txt in sync -- 2.47.3