diff options
Diffstat (limited to 'gl/m4/gethostname.m4')
-rw-r--r-- | gl/m4/gethostname.m4 | 90 |
1 files changed, 85 insertions, 5 deletions
diff --git a/gl/m4/gethostname.m4 b/gl/m4/gethostname.m4 index 6b6fca95..ef0b43ef 100644 --- a/gl/m4/gethostname.m4 +++ b/gl/m4/gethostname.m4 | |||
@@ -1,21 +1,101 @@ | |||
1 | # gethostname.m4 serial 5 | 1 | # gethostname.m4 serial 9 |
2 | dnl Copyright (C) 2002, 2008, 2009 Free Software Foundation, Inc. | 2 | dnl Copyright (C) 2002, 2008, 2009, 2010 Free Software Foundation, Inc. |
3 | dnl This file is free software; the Free Software Foundation | 3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | 4 | dnl gives unlimited permission to copy and/or distribute it, |
5 | dnl with or without modifications, as long as this notice is preserved. | 5 | dnl with or without modifications, as long as this notice is preserved. |
6 | 6 | ||
7 | # Ensure | ||
8 | # - the gethostname() function, | ||
9 | # - the HOST_NAME_MAX macro in <limits.h>. | ||
7 | AC_DEFUN([gl_FUNC_GETHOSTNAME], | 10 | AC_DEFUN([gl_FUNC_GETHOSTNAME], |
8 | [ | 11 | [ |
9 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | 12 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) |
10 | gl_PREREQ_SYS_H_WINSOCK2 | 13 | gl_PREREQ_SYS_H_WINSOCK2 |
11 | AC_REPLACE_FUNCS([gethostname]) | 14 | |
12 | if test $ac_cv_func_gethostname = no; then | 15 | dnl Where is gethostname() defined? |
16 | dnl - On native Windows, it is in ws2_32.dll. | ||
17 | dnl - Otherwise is is in libc. | ||
18 | GETHOSTNAME_LIB= | ||
19 | AC_CHECK_FUNCS([gethostname], , [ | ||
20 | AC_CACHE_CHECK([for gethostname in winsock2.h and -lws2_32], | ||
21 | [gl_cv_w32_gethostname], | ||
22 | [gl_cv_w32_gethostname=no | ||
23 | gl_save_LIBS="$LIBS" | ||
24 | LIBS="$LIBS -lws2_32" | ||
25 | AC_LINK_IFELSE([AC_LANG_PROGRAM([[ | ||
26 | #ifdef HAVE_WINSOCK2_H | ||
27 | #include <winsock2.h> | ||
28 | #endif | ||
29 | #include <stddef.h> | ||
30 | ]], [[gethostname(NULL, 0);]])], [gl_cv_w32_gethostname=yes]) | ||
31 | LIBS="$gl_save_LIBS" | ||
32 | ]) | ||
33 | if test "$gl_cv_w32_gethostname" = "yes"; then | ||
34 | GETHOSTNAME_LIB="-lws2_32" | ||
35 | fi | ||
36 | ]) | ||
37 | AC_SUBST([GETHOSTNAME_LIB]) | ||
38 | |||
39 | if test "$ac_cv_func_gethostname" = no; then | ||
40 | AC_LIBOBJ([gethostname]) | ||
13 | HAVE_GETHOSTNAME=0 | 41 | HAVE_GETHOSTNAME=0 |
14 | gl_PREREQ_GETHOSTNAME | 42 | gl_PREREQ_GETHOSTNAME |
15 | fi | 43 | fi |
44 | |||
45 | dnl Also provide HOST_NAME_MAX when <limits.h> lacks it. | ||
46 | dnl - On most Unix systems, use MAXHOSTNAMELEN from <sys/param.h> instead. | ||
47 | dnl - On Solaris, Cygwin, BeOS, use MAXHOSTNAMELEN from <netdb.h> instead. | ||
48 | dnl - On mingw, use 256, because | ||
49 | dnl <http://msdn.microsoft.com/en-us/library/ms738527.aspx> says: | ||
50 | dnl "if a buffer of 256 bytes is passed in the name parameter and | ||
51 | dnl the namelen parameter is set to 256, the buffer size will always | ||
52 | dnl be adequate." | ||
53 | dnl With this, there is no need to use sysconf (_SC_HOST_NAME_MAX), which | ||
54 | dnl is not a compile-time constant. | ||
55 | dnl We cannot override <limits.h> using the usual technique, because | ||
56 | dnl gl_CHECK_NEXT_HEADERS does not work for <limits.h>. Therefore retrieve | ||
57 | dnl the value of HOST_NAME_MAX at configure time. | ||
58 | AC_CHECK_HEADERS_ONCE([sys/param.h]) | ||
59 | AC_CHECK_HEADERS_ONCE([sys/socket.h]) | ||
60 | AC_CHECK_HEADERS_ONCE([netdb.h]) | ||
61 | AC_CACHE_CHECK([for HOST_NAME_MAX], [gl_cv_decl_HOST_NAME_MAX], [ | ||
62 | gl_cv_decl_HOST_NAME_MAX= | ||
63 | AC_EGREP_CPP([lucky], [ | ||
64 | #include <limits.h> | ||
65 | #ifdef HOST_NAME_MAX | ||
66 | lucky | ||
67 | #endif | ||
68 | ], [gl_cv_decl_HOST_NAME_MAX=yes]) | ||
69 | if test -z "$gl_cv_decl_HOST_NAME_MAX"; then | ||
70 | dnl It's not defined in <limits.h>. Substitute it. | ||
71 | if test "$gl_cv_w32_gethostname" = yes; then | ||
72 | dnl mingw. | ||
73 | gl_cv_decl_HOST_NAME_MAX=256 | ||
74 | else | ||
75 | _AC_COMPUTE_INT([MAXHOSTNAMELEN], [gl_cv_decl_HOST_NAME_MAX], [ | ||
76 | #include <sys/types.h> | ||
77 | #if HAVE_SYS_PARAM_H | ||
78 | # include <sys/param.h> | ||
79 | #endif | ||
80 | #if HAVE_SYS_SOCKET_H | ||
81 | # include <sys/socket.h> | ||
82 | #endif | ||
83 | #if HAVE_NETDB_H | ||
84 | # include <netdb.h> | ||
85 | #endif | ||
86 | ]) | ||
87 | fi | ||
88 | fi | ||
89 | ]) | ||
90 | if test "$gl_cv_decl_HOST_NAME_MAX" != yes; then | ||
91 | AC_DEFINE_UNQUOTED([HOST_NAME_MAX], [$gl_cv_decl_HOST_NAME_MAX], | ||
92 | [Define HOST_NAME_MAX when <limits.h> does not define it.]) | ||
93 | fi | ||
16 | ]) | 94 | ]) |
17 | 95 | ||
18 | # Prerequisites of lib/gethostname.c. | 96 | # Prerequisites of lib/gethostname.c. |
19 | AC_DEFUN([gl_PREREQ_GETHOSTNAME], [ | 97 | AC_DEFUN([gl_PREREQ_GETHOSTNAME], [ |
20 | AC_CHECK_FUNCS([uname]) | 98 | if test "$gl_cv_w32_gethostname" != "yes"; then |
99 | AC_CHECK_FUNCS([uname]) | ||
100 | fi | ||
21 | ]) | 101 | ]) |