s4-waf: added test for dlopen prototype
[ira/wip.git] / lib / replace / libreplace_network.m4
index 2af02312abbde7c7d044c1900b7f0200eff4df23..bccd77336a73f576aa71a2000794c81dd3d798ab 100644 (file)
@@ -173,7 +173,7 @@ LIBS="${LIBREPLACE_NETWORK_LIBS}"
 libreplace_SAVE_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$CPPFLAGS -I$libreplacedir"
 
-AC_CHECK_FUNCS(socketpair,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} socketpair.o"])
+AC_CHECK_FUNCS(socketpair,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} $libreplacedir/socketpair.o"])
 
 AC_CACHE_CHECK([for broken inet_ntoa],libreplace_cv_REPLACE_INET_NTOA,[
 AC_TRY_RUN([
@@ -193,14 +193,14 @@ exit(1);}],
 AC_CHECK_FUNCS(inet_ntoa,[],[libreplace_cv_REPLACE_INET_NTOA=yes])
 if test x"$libreplace_cv_REPLACE_INET_NTOA" = x"yes"; then
     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
-    LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_ntoa.o"
+    LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} $libreplacedir/inet_ntoa.o"
 fi
 
-AC_CHECK_FUNCS(inet_aton,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_aton.o"])
+AC_CHECK_FUNCS(inet_aton,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} $libreplacedir/inet_aton.o"])
 
-AC_CHECK_FUNCS(inet_ntop,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_ntop.o"])
+AC_CHECK_FUNCS(inet_ntop,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} $libreplacedir/inet_ntop.o"])
 
-AC_CHECK_FUNCS(inet_pton,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_pton.o"])
+AC_CHECK_FUNCS(inet_pton,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} $libreplacedir/inet_pton.o"])
 
 dnl test for getaddrinfo/getnameinfo
 AC_CACHE_CHECK([for getaddrinfo],libreplace_cv_HAVE_GETADDRINFO,[
@@ -226,13 +226,38 @@ ret = getnameinfo(&sa, sizeof(sa),
 
 ],
 libreplace_cv_HAVE_GETADDRINFO=yes,libreplace_cv_HAVE_GETADDRINFO=no)])
+
+if test x"$libreplace_cv_HAVE_GETADDRINFO" = x"yes"; then
+       # getaddrinfo is broken on some AIX systems
+       # see bug 5910, use our replacements if we detect
+       # a broken system.
+       AC_TRY_RUN([
+               #include <stddef.h>
+               #include <sys/types.h>
+               #include <sys/socket.h>
+               #include <netdb.h>
+               int main(int argc, const char *argv[])
+               {
+                       struct addrinfo hints = {0,};
+                       struct addrinfo *ppres;
+                       const char hostname[] = "0.0.0.0";
+                       hints.ai_socktype = SOCK_STREAM;
+                       hints.ai_family = AF_INET;
+                       hints.ai_flags =
+                               AI_NUMERICHOST|AI_PASSIVE|AI_ADDRCONFIG;
+                       return getaddrinfo(hostname, NULL, &hints, &ppres) != 0 ? 1 : 0;
+               }],
+               libreplace_cv_HAVE_GETADDRINFO=yes,
+               libreplace_cv_HAVE_GETADDRINFO=no)
+fi
+
 if test x"$libreplace_cv_HAVE_GETADDRINFO" = x"yes"; then
        AC_DEFINE(HAVE_GETADDRINFO,1,[Whether the system has getaddrinfo])
        AC_DEFINE(HAVE_GETNAMEINFO,1,[Whether the system has getnameinfo])
        AC_DEFINE(HAVE_FREEADDRINFO,1,[Whether the system has freeaddrinfo])
        AC_DEFINE(HAVE_GAI_STRERROR,1,[Whether the system has gai_strerror])
 else
-       LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} getaddrinfo.o"
+       LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} $libreplacedir/getaddrinfo.o"
 fi
 
 AC_CHECK_HEADERS([ifaddrs.h])
@@ -287,7 +312,7 @@ AC_TRY_RUN([
 if test x"$libreplace_cv_HAVE_IFACE_GETIFADDRS" = x"yes"; then
     iface=yes;AC_DEFINE(HAVE_IFACE_GETIFADDRS,1,[Whether iface getifaddrs is available])
 else
-       LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} getifaddrs.o"
+       LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} $libreplacedir/getifaddrs.o"
 fi