| # socketlib.m4 | |
| # serial 4 | |
| dnl Copyright (C) 2008-2026 Free Software Foundation, Inc. | |
| dnl This file is free software; the Free Software Foundation | |
| dnl gives unlimited permission to copy and/or distribute it, | |
| dnl with or without modifications, as long as this notice is preserved. | |
| dnl This file is offered as-is, without any warranty. | |
| dnl gl_SOCKETLIB | |
| dnl Determines the library to use for socket functions. | |
| dnl Sets and AC_SUBSTs LIBSOCKET. | |
| AC_DEFUN([gl_SOCKETLIB], | |
| [ | |
| gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H | |
| LIBSOCKET= | |
| if test $HAVE_WINSOCK2_H = 1; then | |
| dnl Native Windows API (not Cygwin). | |
| dnl If the function WSAStartup exists (declared in <winsock2.h> and | |
| dnl defined through -lws2_32), we need to call it. | |
| AC_CACHE_CHECK([for WSAStartup], | |
| [gl_cv_func_wsastartup], [ | |
| gl_saved_LIBS="$LIBS" | |
| LIBS="$LIBS -lws2_32" | |
| AC_LINK_IFELSE( | |
| [AC_LANG_PROGRAM([[ | |
| #ifdef HAVE_WINSOCK2_H | |
| # include <winsock2.h> | |
| #endif]], [[ | |
| WORD wVersionRequested = MAKEWORD(1, 1); | |
| WSADATA wsaData; | |
| int err = WSAStartup(wVersionRequested, &wsaData); | |
| WSACleanup (); | |
| ]]) | |
| ], | |
| [gl_cv_func_wsastartup=yes], | |
| [gl_cv_func_wsastartup=no]) | |
| LIBS="$gl_saved_LIBS" | |
| ]) | |
| if test "$gl_cv_func_wsastartup" = "yes"; then | |
| AC_DEFINE([WINDOWS_SOCKETS], [1], [Define if WSAStartup is needed.]) | |
| LIBSOCKET='-lws2_32' | |
| fi | |
| else | |
| dnl Unix API. | |
| dnl Solaris has most socket functions in libsocket. | |
| dnl Haiku has most socket functions in libnetwork. | |
| dnl BeOS has most socket functions in libnet. | |
| dnl On HP-UX, do NOT link with libxnet, because in 64-bit mode this would | |
| dnl break code (e.g. in libraries) that invokes accept(), getpeername(), | |
| dnl getsockname(), getsockopt(), or recvfrom() with a 32-bit addrlen. See | |
| dnl "man xopen_networking" for details. | |
| AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [ | |
| gl_cv_lib_socket= | |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern | |
| #ifdef __cplusplus | |
| "C" | |
| #endif | |
| char setsockopt();]], [[setsockopt();]])], | |
| [], | |
| [gl_saved_LIBS="$LIBS" | |
| LIBS="$gl_saved_LIBS -lsocket" | |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern | |
| #ifdef __cplusplus | |
| "C" | |
| #endif | |
| char setsockopt();]], [[setsockopt();]])], | |
| [gl_cv_lib_socket="-lsocket"]) | |
| if test -z "$gl_cv_lib_socket"; then | |
| LIBS="$gl_saved_LIBS -lnetwork" | |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern | |
| #ifdef __cplusplus | |
| "C" | |
| #endif | |
| char setsockopt();]], [[setsockopt();]])], | |
| [gl_cv_lib_socket="-lnetwork"]) | |
| if test -z "$gl_cv_lib_socket"; then | |
| LIBS="$gl_saved_LIBS -lnet" | |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern | |
| #ifdef __cplusplus | |
| "C" | |
| #endif | |
| char setsockopt();]], [[setsockopt();]])], | |
| [gl_cv_lib_socket="-lnet"]) | |
| fi | |
| fi | |
| LIBS="$gl_saved_LIBS" | |
| ]) | |
| if test -z "$gl_cv_lib_socket"; then | |
| gl_cv_lib_socket="none needed" | |
| fi | |
| ]) | |
| if test "$gl_cv_lib_socket" != "none needed"; then | |
| LIBSOCKET="$gl_cv_lib_socket" | |
| fi | |
| fi | |
| AC_SUBST([LIBSOCKET]) | |
| ]) |