]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
build: Check for socket(), socketpair() in -lsocket if necessary
authorSimon McVittie <smcv@collabora.com>
Fri, 29 Nov 2024 11:46:32 +0000 (11:46 +0000)
committerSimon McVittie <smcv@collabora.com>
Fri, 29 Nov 2024 16:10:31 +0000 (16:10 +0000)
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 <smcv@collabora.com>
meson.build

index 09f2e3fa953616d406b6fce55664f6ecd1fe4831..33ed5c2ef4d819a9849a5e9b7e9ae3b88c3ca9aa 100644 (file)
@@ -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