bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: getaddrinfo: finding gethostbyname in mingw32


From: Simon Josefsson
Subject: Re: getaddrinfo: finding gethostbyname in mingw32
Date: Wed, 18 Jan 2006 15:06:04 +0100
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux)

Bruno Haible <address@hidden> writes:

> Simon Josefsson wrote:
>> My problem is getting
>> AC_SEARCH_LIBS to find functions in the mingw32 libraries.  It seems a
>> __stdcall is required in the prototype to make it link correctly.
>
> The prototype with __stdcall must be contained in a public include file,
> no? (<winsock2.h>, included by your <sys/socket.h> substitute.)

Right.

> It seems you will have to write a test that
>   1) tries to use gethostbyname() with the #include and no additional 
> libraries,
>   2) same thing with -lwsock32,
> and set some LIB* or *_LDFLAGS variable, depending on the result.
> Look how AM_ICONV_LINK (in gethostbyname.m4) does it; something like
> this:

Yes, I agree, and I have tested something similar.  The following
works:

  AC_SEARCH_LIBS(gethostbyname, [inet nsl])
...
  if test "$ac_cv_search_gethostbyname" = "no"; then
    save_LIBS="$LIBS"
    LIBS="$LIBS -lwsock32"
    AC_MSG_CHECKING([whether we need -lwsock32])
    AC_LINK_IFELSE([
      AC_LANG_PROGRAM([[
#include <ws2tcpip.h>
]], [gethostbyname ("foo");])],
      need_wsock32=yes, need_wsock32=no)
    AC_MSG_RESULT($need_wsock32)
    LIBS="$save_LIBS"
    if test "$need_wsock32" = "yes"; then
      LIBS="$LIBS -lwsock32"
    fi
  fi

However, it seems rather ugly.  I was hoping to be able to connect to
the AC_SEARCH_LIB logic somehow, so that it would do this
automatically.  I want to be able to add the #include <ws2tcpip.h> to
the AC_SEARCH_LIB generated header.

But since the above seem to work, I think I'll move on unless someone
can come up with something cleaner.

Thanks!

>   AC_CACHE_CHECK(for gethostbyname, gl_cv_func_gethostbyname, [
>     gl_cv_func_gethostbyname=no
>     gl_cv_lib_gethostbyname=no
>     AC_TRY_LINK([
> #if HAVE_SYS_SOCKET_H
> # include <sys/socket.h>
> #elif HAVE_WINSOCK2_H
> # include <winsock2.h>
> #endif],
>       [gethostbyname("");],
>       gl_cv_func_gethostbyname=yes)
>     if test "$gl_cv_func_gethostbyname" != yes; then
>       am_save_LIBS="$LIBS"
>       LIBS="$LIBS -lwsock32"
>       AC_TRY_LINK([
> #if HAVE_SYS_SOCKET_H
> # include <sys/socket.h>
> #elif HAVE_WINSOCK2_H
> # include <winsock2.h>
> #endif],
>         [gethostbyname("");],
>         gl_cv_lib_gethostbyname=yes
>         gl_cv_func_gethostbyname=yes)
>       LIBS="$am_save_LIBS"
>     fi
>   ])
>
> Bruno




reply via email to

[Prev in Thread] Current Thread [Next in Thread]