| dnl |
| dnl The following was written by jhawk@mit.edu |
| dnl |
| dnl AC_LIBRARY_NET: Id: net.m4,v 1.4 1997/10/25 20:49:53 jhawk Exp |
| dnl |
| dnl This test is for network applications that need socket() and |
| dnl gethostbyname() -ish functions. Under Solaris, those applications need to |
| dnl link with "-lsocket -lnsl". Under IRIX, they should *not* link with |
| dnl "-lsocket" because libsocket.a breaks a number of things (for instance: |
| dnl gethostbyname() under IRIX 5.2, and snoop sockets under most versions of |
| dnl IRIX). |
| dnl |
| dnl Unfortunately, many application developers are not aware of this, and |
| dnl mistakenly write tests that cause -lsocket to be used under IRIX. It is |
| dnl also easy to write tests that cause -lnsl to be used under operating |
| dnl systems where neither are necessary (or useful), such as SunOS 4.1.4, which |
| dnl uses -lnsl for TLI. |
| dnl |
| dnl This test exists so that every application developer does not test this in |
| dnl a different, and subtly broken fashion. |
| dnl |
| dnl It has been argued that this test should be broken up into two seperate |
| dnl tests, one for the resolver libraries, and one for the libraries necessary |
| dnl for using Sockets API. Unfortunately, the two are carefully intertwined and |
| dnl allowing the autoconf user to use them independantly potentially results in |
| dnl unfortunate ordering dependancies -- as such, such component macros would |
| dnl have to carefully use indirection and be aware if the other components were |
| dnl executed. Since other autoconf macros do not go to this trouble, and almost |
| dnl no applications use sockets without the resolver, this complexity has not |
| dnl been implemented. |
| dnl |
| dnl The check for libresolv is in case you are attempting to link statically |
| dnl and happen to have a libresolv.a lying around (and no libnsl.a). |
| dnl |
| AC_DEFUN(AC_LIBRARY_NET, [ |
| # Most operating systems have gethostbyname() in the default searched |
| # libraries (i.e. libc): |
| AC_CHECK_FUNC(gethostbyname, , |
| # Some OSes (eg. Solaris) place it in libnsl: |
| AC_CHECK_LIB(nsl, gethostbyname, , |
| # Some strange OSes (SINIX) have it in libsocket: |
| AC_CHECK_LIB(socket, gethostbyname, , |
| # Unfortunately libsocket sometimes depends on libnsl. |
| # AC_CHECK_LIB's API is essentially broken so the following |
| # ugliness is necessary: |
| AC_CHECK_LIB(socket, gethostbyname, |
| LIBS="-lsocket -lnsl $LIBS", |
| AC_CHECK_LIB(resolv, gethostbyname), |
| -lnsl) |
| ) |
| ) |
| ) |
| AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, , |
| AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))) |
| ]) |