Home | History | Annotate | Line # | Download | only in m4
      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 ])
     97