m4/getaddrinfo.m4 has some code for checking the libraries needed for getservbyname(). Since this function (and related ones: getservent() etc.) can also be useful independently of getaddrinfo, I'm extracting this test into a new module.
Compared to the code in m4/getaddrinfo.m4, - I'm no longer checking for -linet, since I'm not aware of any system having this library, and googlng also does not give a hint, - I'm no longer checking for -lxnet, since this appears to be a dummy library only, on Solaris, - I'm adding checks for -lnetwork (for Haiku) and -lnet (for BeOS). 2008-11-15 Bruno Haible <[EMAIL PROTECTED]> New module 'servent'. * modules/servent: New file. * m4/servent.m4: New file, based on code in m4/getaddrinfo.m4. ========================== modules/servent ================================ Description: Library containing getservent(), setservent(), endservent(), getservbyname(), getservbyport(), getprotoent(), setprotoent(), endprotoent(), getprotobyname(), getprotobynumber(). Files: m4/servent.m4 Depends-on: sys_socket configure.ac: gl_SERVENT Makefile.am: Include: <netdb.h> Link: $(SERVENT_LIB) License: LGPLv2+ Maintainer: Bruno Haible, Simon Josefsson ========================== m4/servent.m4 ================================== # servent.m4 serial 1 dnl Copyright (C) 2008 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. AC_DEFUN([gl_SERVENT], [ dnl Where are getservent(), setservent(), endservent(), getservbyname(), dnl getservbyport() defined? dnl Where are getprotoent(), setprotoent(), endprotoent(), getprotobyname(), dnl getprotobynumber() defined? dnl - On Solaris, they are in libsocket. Ignore libxnet. dnl - On Haiku, they are in libnetwork. dnl - On BeOS, they are in libnet. dnl - On native Windows, they are in ws2_32.dll. dnl - Otherwise they are in libc. AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H SERVENT_LIB= gl_saved_libs="$LIBS" AC_SEARCH_LIBS([getservbyname], [socket network net], [if test "$ac_cv_search_getservbyname" != "none required"; then SERVENT_LIB="$ac_cv_search_getservbyname" fi]) LIBS="$gl_saved_libs" if test -z "$SERVENT_LIB"; then AC_CHECK_FUNCS([getservbyname], , [ AC_CACHE_CHECK([for getservbyname in winsock2.h and -lws2_32], [gl_cv_w32_getservbyname], [gl_cv_w32_getservbyname=no gl_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_TRY_LINK([ #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif #include <stddef.h> ], [getservbyname(NULL,NULL);], [gl_cv_w32_getservbyname=yes]) LIBS="$gl_save_LIBS" ]) if test "$gl_cv_w32_getservbyname" = "yes"; then SERVENT_LIB="-lws2_32" fi ]) fi AC_SUBST([SERVENT_LIB]) ])