| 1 | # socketlib.m4 serial 3
 | 
|---|
| 2 | dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
 | 
|---|
| 3 | dnl This file is free software; the Free Software Foundation
 | 
|---|
| 4 | dnl gives unlimited permission to copy and/or distribute it,
 | 
|---|
| 5 | dnl with or without modifications, as long as this notice is preserved.
 | 
|---|
| 6 | 
 | 
|---|
| 7 | dnl gl_SOCKETLIB
 | 
|---|
| 8 | dnl Determines the library to use for socket functions.
 | 
|---|
| 9 | dnl Sets and AC_SUBSTs LIBSOCKET.
 | 
|---|
| 10 | 
 | 
|---|
| 11 | AC_DEFUN([gl_SOCKETLIB],
 | 
|---|
| 12 | [
 | 
|---|
| 13 |   gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H
 | 
|---|
| 14 |   LIBSOCKET=
 | 
|---|
| 15 |   if test $HAVE_WINSOCK2_H = 1; then
 | 
|---|
| 16 |     dnl Native Windows API (not Cygwin).
 | 
|---|
| 17 |     dnl If the function WSAStartup exists (declared in <winsock2.h> and
 | 
|---|
| 18 |     dnl defined through -lws2_32), we need to call it.
 | 
|---|
| 19 |     AC_CACHE_CHECK([for WSAStartup],
 | 
|---|
| 20 |       [gl_cv_func_wsastartup], [
 | 
|---|
| 21 |        gl_save_LIBS="$LIBS"
 | 
|---|
| 22 |        LIBS="$LIBS -lws2_32"
 | 
|---|
| 23 |        AC_LINK_IFELSE(
 | 
|---|
| 24 |          [AC_LANG_PROGRAM([[
 | 
|---|
| 25 | #ifdef HAVE_WINSOCK2_H
 | 
|---|
| 26 | # include <winsock2.h>
 | 
|---|
| 27 | #endif]], [[
 | 
|---|
| 28 |             WORD wVersionRequested = MAKEWORD(1, 1);
 | 
|---|
| 29 |             WSADATA wsaData;
 | 
|---|
| 30 |             int err = WSAStartup(wVersionRequested, &wsaData);
 | 
|---|
| 31 |             WSACleanup ();
 | 
|---|
| 32 |             ]])
 | 
|---|
| 33 |          ],
 | 
|---|
| 34 |          [gl_cv_func_wsastartup=yes],
 | 
|---|
| 35 |          [gl_cv_func_wsastartup=no])
 | 
|---|
| 36 |        LIBS="$gl_save_LIBS"
 | 
|---|
| 37 |       ])
 | 
|---|
| 38 |     if test "$gl_cv_func_wsastartup" = "yes"; then
 | 
|---|
| 39 |       AC_DEFINE([WINDOWS_SOCKETS], [1], [Define if WSAStartup is needed.])
 | 
|---|
| 40 |       LIBSOCKET='-lws2_32'
 | 
|---|
| 41 |     fi
 | 
|---|
| 42 |   else
 | 
|---|
| 43 |     dnl Unix API.
 | 
|---|
| 44 |     dnl Solaris has most socket functions in libsocket.
 | 
|---|
| 45 |     dnl Haiku has most socket functions in libnetwork.
 | 
|---|
| 46 |     dnl BeOS has most socket functions in libnet.
 | 
|---|
| 47 |     dnl On HP-UX, do NOT link with libxnet, because in 64-bit mode this would
 | 
|---|
| 48 |     dnl break code (e.g. in libraries) that invokes accept(), getpeername(),
 | 
|---|
| 49 |     dnl getsockname(), getsockopt(), or recvfrom() with a 32-bit addrlen. See
 | 
|---|
| 50 |     dnl "man xopen_networking" for details.
 | 
|---|
| 51 |     AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [
 | 
|---|
| 52 |       gl_cv_lib_socket=
 | 
|---|
| 53 |       AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
 | 
|---|
| 54 | #ifdef __cplusplus
 | 
|---|
| 55 | "C"
 | 
|---|
| 56 | #endif
 | 
|---|
| 57 | char setsockopt();]], [[setsockopt();]])],
 | 
|---|
| 58 |         [],
 | 
|---|
| 59 |         [gl_save_LIBS="$LIBS"
 | 
|---|
| 60 |          LIBS="$gl_save_LIBS -lsocket"
 | 
|---|
| 61 |          AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
 | 
|---|
| 62 | #ifdef __cplusplus
 | 
|---|
| 63 | "C"
 | 
|---|
| 64 | #endif
 | 
|---|
| 65 | char setsockopt();]], [[setsockopt();]])],
 | 
|---|
| 66 |            [gl_cv_lib_socket="-lsocket"])
 | 
|---|
| 67 |          if test -z "$gl_cv_lib_socket"; then
 | 
|---|
| 68 |            LIBS="$gl_save_LIBS -lnetwork"
 | 
|---|
| 69 |            AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
 | 
|---|
| 70 | #ifdef __cplusplus
 | 
|---|
| 71 | "C"
 | 
|---|
| 72 | #endif
 | 
|---|
| 73 | char setsockopt();]], [[setsockopt();]])],
 | 
|---|
| 74 |              [gl_cv_lib_socket="-lnetwork"])
 | 
|---|
| 75 |            if test -z "$gl_cv_lib_socket"; then
 | 
|---|
| 76 |              LIBS="$gl_save_LIBS -lnet"
 | 
|---|
| 77 |              AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
 | 
|---|
| 78 | #ifdef __cplusplus
 | 
|---|
| 79 | "C"
 | 
|---|
| 80 | #endif
 | 
|---|
| 81 | char setsockopt();]], [[setsockopt();]])],
 | 
|---|
| 82 |                [gl_cv_lib_socket="-lnet"])
 | 
|---|
| 83 |            fi
 | 
|---|
| 84 |          fi
 | 
|---|
| 85 |          LIBS="$gl_save_LIBS"
 | 
|---|
| 86 |         ])
 | 
|---|
| 87 |       if test -z "$gl_cv_lib_socket"; then
 | 
|---|
| 88 |         gl_cv_lib_socket="none needed"
 | 
|---|
| 89 |       fi
 | 
|---|
| 90 |     ])
 | 
|---|
| 91 |     if test "$gl_cv_lib_socket" != "none needed"; then
 | 
|---|
| 92 |       LIBSOCKET="$gl_cv_lib_socket"
 | 
|---|
| 93 |     fi
 | 
|---|
| 94 |   fi
 | 
|---|
| 95 |   AC_SUBST([LIBSOCKET])
 | 
|---|
| 96 | ])
 | 
|---|