xref: /freebsd/contrib/unbound/acx_nlnetlabs.m4 (revision b7579f77d18196a58ff700756c84dc9a302a7f67)
1*b7579f77SDag-Erling Smørgrav# acx_nlnetlabs.m4 - common macros for configure checks
2*b7579f77SDag-Erling Smørgrav# Copyright 2009, Wouter Wijngaards, NLnet Labs.
3*b7579f77SDag-Erling Smørgrav# BSD licensed.
4*b7579f77SDag-Erling Smørgrav#
5*b7579f77SDag-Erling Smørgrav# Version 21
6*b7579f77SDag-Erling Smørgrav# 2012-02-09 Fix AHX_MEMCMP_BROKEN with undef in compat/memcmp.h.
7*b7579f77SDag-Erling Smørgrav# 2012-01-20 Fix COMPILER_FLAGS_UNBOUND for gcc 4.6.2 assigned-not-used-warns.
8*b7579f77SDag-Erling Smørgrav# 2011-12-05 Fix getaddrinfowithincludes on windows with fedora16 mingw32-gcc.
9*b7579f77SDag-Erling Smørgrav# 	     Fix ACX_MALLOC for redefined malloc error.
10*b7579f77SDag-Erling Smørgrav# 	     Fix GETADDRINFO_WITH_INCLUDES to add -lws2_32
11*b7579f77SDag-Erling Smørgrav# 2011-11-10 Fix FLTO test to not drop a.out in current directory.
12*b7579f77SDag-Erling Smørgrav# 2011-11-01 Fix FLTO test for llvm on Lion.
13*b7579f77SDag-Erling Smørgrav# 2011-08-01 Fix nonblock test (broken at v13).
14*b7579f77SDag-Erling Smørgrav# 2011-08-01 Fix autoconf 2.68 warnings
15*b7579f77SDag-Erling Smørgrav# 2011-06-23 Add ACX_CHECK_FLTO to check -flto.
16*b7579f77SDag-Erling Smørgrav# 2010-08-16 Fix FLAG_OMITTED for AS_TR_CPP changes in autoconf-2.66.
17*b7579f77SDag-Erling Smørgrav# 2010-07-02 Add check for ss_family (for minix).
18*b7579f77SDag-Erling Smørgrav# 2010-04-26 Fix to use CPPFLAGS for CHECK_COMPILER_FLAGS.
19*b7579f77SDag-Erling Smørgrav# 2010-03-01 Fix RPATH using CONFIG_COMMANDS to run at the very end.
20*b7579f77SDag-Erling Smørgrav# 2010-02-18 WITH_SSL outputs the LIBSSL_LDFLAGS, LIBS, CPPFLAGS seperate, -ldl
21*b7579f77SDag-Erling Smørgrav# 2010-02-01 added ACX_CHECK_MEMCMP_SIGNED, AHX_MEMCMP_BROKEN
22*b7579f77SDag-Erling Smørgrav# 2010-01-20 added AHX_COONFIG_STRLCAT
23*b7579f77SDag-Erling Smørgrav# 2009-07-14 U_CHAR detection improved for windows crosscompile.
24*b7579f77SDag-Erling Smørgrav#            added ACX_FUNC_MALLOC
25*b7579f77SDag-Erling Smørgrav#            fixup some #if to #ifdef
26*b7579f77SDag-Erling Smørgrav#            NONBLOCKING test for mingw crosscompile.
27*b7579f77SDag-Erling Smørgrav# 2009-07-13 added ACX_WITH_SSL_OPTIONAL
28*b7579f77SDag-Erling Smørgrav# 2009-07-03 fixup LDFLAGS for empty ssl dir.
29*b7579f77SDag-Erling Smørgrav#
30*b7579f77SDag-Erling Smørgrav# Automates some of the checking constructs.  Aims at portability for POSIX.
31*b7579f77SDag-Erling Smørgrav# Documentation for functions is below.
32*b7579f77SDag-Erling Smørgrav#
33*b7579f77SDag-Erling Smørgrav# the following macro's are provided in this file:
34*b7579f77SDag-Erling Smørgrav# (see below for details on each macro).
35*b7579f77SDag-Erling Smørgrav#
36*b7579f77SDag-Erling Smørgrav# ACX_ESCAPE_BACKSLASH		- escape backslashes in var for C-preproc.
37*b7579f77SDag-Erling Smørgrav# ACX_RSRC_VERSION		- create windows resource version number.
38*b7579f77SDag-Erling Smørgrav# ACX_CHECK_COMPILER_FLAG	- see if cc supports a flag.
39*b7579f77SDag-Erling Smørgrav# ACX_CHECK_ERROR_FLAGS		- see which flag is -werror (used below).
40*b7579f77SDag-Erling Smørgrav# ACX_CHECK_COMPILER_FLAG_NEEDED - see if flags make the code compile cleanly.
41*b7579f77SDag-Erling Smørgrav# ACX_DEPFLAG			- find cc dependency flags.
42*b7579f77SDag-Erling Smørgrav# ACX_DETERMINE_EXT_FLAGS_UNBOUND - find out which flags enable BSD and POSIX.
43*b7579f77SDag-Erling Smørgrav# ACX_CHECK_FORMAT_ATTRIBUTE	- find cc printf format syntax.
44*b7579f77SDag-Erling Smørgrav# ACX_CHECK_UNUSED_ATTRIBUTE	- find cc variable unused syntax.
45*b7579f77SDag-Erling Smørgrav# ACX_CHECK_FLTO		- see if cc supports -flto and use it if so.
46*b7579f77SDag-Erling Smørgrav# ACX_LIBTOOL_C_ONLY		- create libtool for C only, improved.
47*b7579f77SDag-Erling Smørgrav# ACX_TYPE_U_CHAR		- u_char type.
48*b7579f77SDag-Erling Smørgrav# ACX_TYPE_RLIM_T		- rlim_t type.
49*b7579f77SDag-Erling Smørgrav# ACX_TYPE_SOCKLEN_T		- socklen_t type.
50*b7579f77SDag-Erling Smørgrav# ACX_TYPE_IN_ADDR_T		- in_addr_t type.
51*b7579f77SDag-Erling Smørgrav# ACX_TYPE_IN_PORT_T		- in_port_t type.
52*b7579f77SDag-Erling Smørgrav# ACX_ARG_RPATH			- add --disable-rpath option.
53*b7579f77SDag-Erling Smørgrav# ACX_WITH_SSL			- add --with-ssl option, link -lcrypto.
54*b7579f77SDag-Erling Smørgrav# ACX_WITH_SSL_OPTIONAL		- add --with-ssl option, link -lcrypto,
55*b7579f77SDag-Erling Smørgrav#				  where --without-ssl is also accepted
56*b7579f77SDag-Erling Smørgrav# ACX_LIB_SSL			- setup to link -lssl.
57*b7579f77SDag-Erling Smørgrav# ACX_SYS_LARGEFILE		- improved sys_largefile, fseeko, >2G files.
58*b7579f77SDag-Erling Smørgrav# ACX_CHECK_GETADDRINFO_WITH_INCLUDES - find getaddrinfo, portably.
59*b7579f77SDag-Erling Smørgrav# ACX_FUNC_DEPRECATED		- see if func is deprecated.
60*b7579f77SDag-Erling Smørgrav# ACX_CHECK_NONBLOCKING_BROKEN	- see if nonblocking sockets really work.
61*b7579f77SDag-Erling Smørgrav# ACX_MKDIR_ONE_ARG		- determine mkdir(2) number of arguments.
62*b7579f77SDag-Erling Smørgrav# ACX_FUNC_IOCTLSOCKET		- find ioctlsocket, portably.
63*b7579f77SDag-Erling Smørgrav# ACX_FUNC_MALLOC		- check malloc, define replacement .
64*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_FORMAT_ATTRIBUTE	- config.h text for format.
65*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_UNUSED_ATTRIBUTE	- config.h text for unused.
66*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_FSEEKO		- define fseeko, ftello fallback.
67*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_RAND_MAX		- define RAND_MAX if needed.
68*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_MAXHOSTNAMELEN	- define MAXHOSTNAMELEN if needed.
69*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_IPV6_MIN_MTU	- define IPV6_MIN_MTU if needed.
70*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_SNPRINTF		- snprintf compat prototype
71*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_INET_PTON		- inet_pton compat prototype
72*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_INET_NTOP		- inet_ntop compat prototype
73*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_INET_ATON		- inet_aton compat prototype
74*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_MEMMOVE		- memmove compat prototype
75*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_STRLCAT		- strlcat compat prototype
76*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_STRLCPY		- strlcpy compat prototype
77*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_GMTIME_R		- gmtime_r compat prototype
78*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_W32_SLEEP		- w32 compat for sleep
79*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_W32_USLEEP		- w32 compat for usleep
80*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_W32_RANDOM		- w32 compat for random
81*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_W32_SRANDOM	- w32 compat for srandom
82*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_W32_FD_SET_T	- w32 detection of FD_SET_T.
83*b7579f77SDag-Erling Smørgrav# ACX_CFLAGS_STRIP		- strip one flag from CFLAGS
84*b7579f77SDag-Erling Smørgrav# ACX_STRIP_EXT_FLAGS		- strip extension flags from CFLAGS
85*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_FLAG_OMITTED	- define omitted flag
86*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_FLAG_EXT		- define omitted extension flag
87*b7579f77SDag-Erling Smørgrav# AHX_CONFIG_EXT_FLAGS		- define the stripped extension flags
88*b7579f77SDag-Erling Smørgrav# ACX_CHECK_MEMCMP_SIGNED	- check if memcmp uses signed characters.
89*b7579f77SDag-Erling Smørgrav# AHX_MEMCMP_BROKEN		- replace memcmp func for CHECK_MEMCMP_SIGNED.
90*b7579f77SDag-Erling Smørgrav# ACX_CHECK_SS_FAMILY           - check for sockaddr_storage.ss_family
91*b7579f77SDag-Erling Smørgrav#
92*b7579f77SDag-Erling Smørgrav
93*b7579f77SDag-Erling Smørgravdnl Escape backslashes as \\, for C:\ paths, for the C preprocessor defines.
94*b7579f77SDag-Erling Smørgravdnl for example, ACX_ESCAPE_BACKSLASH($from_var, to_var)
95*b7579f77SDag-Erling Smørgravdnl $1: the text to change.
96*b7579f77SDag-Erling Smørgravdnl $2: the result.
97*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_ESCAPE_BACKSLASH], [$2="`echo $1 | sed -e 's/\\\\/\\\\\\\\/g'`"
98*b7579f77SDag-Erling Smørgrav])
99*b7579f77SDag-Erling Smørgrav
100*b7579f77SDag-Erling Smørgravdnl Calculate comma separated windows-resource numbers from package version.
101*b7579f77SDag-Erling Smørgravdnl Picks the first three(,0) or four numbers out of the name.
102*b7579f77SDag-Erling Smørgravdnl $1: variable for the result
103*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_RSRC_VERSION],
104*b7579f77SDag-Erling Smørgrav[$1=[`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\).*$/\1,\2,\3,\4/' -e 's/^[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*\([0-9]\)[^0-9]*$/\1,\2,\3,0/' `]
105*b7579f77SDag-Erling Smørgrav])
106*b7579f77SDag-Erling Smørgrav
107*b7579f77SDag-Erling Smørgravdnl Routine to help check for compiler flags.
108*b7579f77SDag-Erling Smørgravdnl Checks if the compiler will accept the flag.
109*b7579f77SDag-Erling Smørgravdnl $1: the flag without a - in front, so g to check -g.
110*b7579f77SDag-Erling Smørgravdnl $2: executed if yes
111*b7579f77SDag-Erling Smørgravdnl $3: executed if no
112*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_COMPILER_FLAG],
113*b7579f77SDag-Erling Smørgrav[
114*b7579f77SDag-Erling SmørgravAC_REQUIRE([AC_PROG_CC])
115*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(whether $CC supports -$1)
116*b7579f77SDag-Erling Smørgravcache=`echo $1 | sed 'y%.=/+-%___p_%'`
117*b7579f77SDag-Erling SmørgravAC_CACHE_VAL(cv_prog_cc_flag_$cache,
118*b7579f77SDag-Erling Smørgrav[
119*b7579f77SDag-Erling Smørgravecho 'void f(){}' >conftest.c
120*b7579f77SDag-Erling Smørgravif test -z "`$CC $CPPFLAGS $CFLAGS -$1 -c conftest.c 2>&1`"; then
121*b7579f77SDag-Erling Smørgraveval "cv_prog_cc_flag_$cache=yes"
122*b7579f77SDag-Erling Smørgravelse
123*b7579f77SDag-Erling Smørgraveval "cv_prog_cc_flag_$cache=no"
124*b7579f77SDag-Erling Smørgravfi
125*b7579f77SDag-Erling Smørgravrm -f conftest conftest.o conftest.c
126*b7579f77SDag-Erling Smørgrav])
127*b7579f77SDag-Erling Smørgravif eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
128*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(yes)
129*b7579f77SDag-Erling Smørgrav:
130*b7579f77SDag-Erling Smørgrav$2
131*b7579f77SDag-Erling Smørgravelse
132*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(no)
133*b7579f77SDag-Erling Smørgrav:
134*b7579f77SDag-Erling Smørgrav$3
135*b7579f77SDag-Erling Smørgravfi
136*b7579f77SDag-Erling Smørgrav])
137*b7579f77SDag-Erling Smørgrav
138*b7579f77SDag-Erling Smørgravdnl setup flags for ACX_CHECK_COMPILER_FLAG_NEEDED
139*b7579f77SDag-Erling Smørgravdnl ERRFLAG: result, compiler flag to turn warnings into errors
140*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_ERROR_FLAGS],
141*b7579f77SDag-Erling Smørgrav[
142*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(Werror, [ERRFLAG="-Werror"], [ERRFLAG="-errwarn"])
143*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(Wall, [ERRFLAG="$ERRFLAG -Wall"],
144*b7579f77SDag-Erling Smørgrav                        	[ERRFLAG="$ERRFLAG -errfmt"])
145*b7579f77SDag-Erling Smørgrav])
146*b7579f77SDag-Erling Smørgrav
147*b7579f77SDag-Erling Smørgravdnl Routine to help check for needed compiler flags.
148*b7579f77SDag-Erling Smørgravdnl $1: flags for CC
149*b7579f77SDag-Erling Smørgravdnl $2: the includes and code
150*b7579f77SDag-Erling Smørgravdnl $3: if the given code only compiles with the flag, execute argument 3
151*b7579f77SDag-Erling Smørgravdnl $4: if the given code compiles without the flag, execute argument 4
152*b7579f77SDag-Erling Smørgravdnl $5: with and without flag the compile fails, execute argument 5.
153*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_COMPILER_FLAG_NEEDED],
154*b7579f77SDag-Erling Smørgrav[
155*b7579f77SDag-Erling SmørgravAC_REQUIRE([AC_PROG_CC])
156*b7579f77SDag-Erling SmørgravAC_REQUIRE([ACX_CHECK_ERROR_FLAGS])
157*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(whether we need $1 as a flag for $CC)
158*b7579f77SDag-Erling Smørgravcache=AS_TR_SH($1)
159*b7579f77SDag-Erling Smørgravdnl cache=`echo $1 | sed 'y%.=/+- %___p__%'`
160*b7579f77SDag-Erling SmørgravAC_CACHE_VAL(cv_prog_cc_flag_needed_$cache,
161*b7579f77SDag-Erling Smørgrav[
162*b7579f77SDag-Erling Smørgravecho '$2' > conftest.c
163*b7579f77SDag-Erling Smørgravecho 'void f(){}' >>conftest.c
164*b7579f77SDag-Erling Smørgravif test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
165*b7579f77SDag-Erling Smørgraveval "cv_prog_cc_flag_needed_$cache=no"
166*b7579f77SDag-Erling Smørgravelse
167*b7579f77SDag-Erling Smørgrav[
168*b7579f77SDag-Erling Smørgravif test -z "`$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`"; then
169*b7579f77SDag-Erling Smørgraveval "cv_prog_cc_flag_needed_$cache=yes"
170*b7579f77SDag-Erling Smørgravelse
171*b7579f77SDag-Erling Smørgraveval "cv_prog_cc_flag_needed_$cache=fail"
172*b7579f77SDag-Erling Smørgrav#echo 'Test with flag fails too!'
173*b7579f77SDag-Erling Smørgrav#cat conftest.c
174*b7579f77SDag-Erling Smørgrav#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1"
175*b7579f77SDag-Erling Smørgrav#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`
176*b7579f77SDag-Erling Smørgrav#exit 1
177*b7579f77SDag-Erling Smørgravfi
178*b7579f77SDag-Erling Smørgrav]
179*b7579f77SDag-Erling Smørgravfi
180*b7579f77SDag-Erling Smørgravrm -f conftest conftest.c conftest.o
181*b7579f77SDag-Erling Smørgrav])
182*b7579f77SDag-Erling Smørgravif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
183*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(yes)
184*b7579f77SDag-Erling Smørgrav:
185*b7579f77SDag-Erling Smørgrav$3
186*b7579f77SDag-Erling Smørgravelse
187*b7579f77SDag-Erling Smørgravif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
188*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(no)
189*b7579f77SDag-Erling Smørgrav#echo 'Test with flag is no!'
190*b7579f77SDag-Erling Smørgrav#cat conftest.c
191*b7579f77SDag-Erling Smørgrav#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1"
192*b7579f77SDag-Erling Smørgrav#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`
193*b7579f77SDag-Erling Smørgrav#exit 1
194*b7579f77SDag-Erling Smørgrav:
195*b7579f77SDag-Erling Smørgrav$4
196*b7579f77SDag-Erling Smørgravelse
197*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(failed)
198*b7579f77SDag-Erling Smørgrav:
199*b7579f77SDag-Erling Smørgrav$5
200*b7579f77SDag-Erling Smørgravfi
201*b7579f77SDag-Erling Smørgravfi
202*b7579f77SDag-Erling Smørgrav])
203*b7579f77SDag-Erling Smørgrav
204*b7579f77SDag-Erling Smørgravdnl Check for CC dependency flag
205*b7579f77SDag-Erling Smørgravdnl DEPFLAG: set to flag that generates dependencies.
206*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_DEPFLAG],
207*b7579f77SDag-Erling Smørgrav[
208*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([$CC dependency flag])
209*b7579f77SDag-Erling Smørgravecho 'void f(){}' >conftest.c
210*b7579f77SDag-Erling Smørgravif test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then
211*b7579f77SDag-Erling Smørgrav	DEPFLAG="-MM"
212*b7579f77SDag-Erling Smørgravelse
213*b7579f77SDag-Erling Smørgrav  if test "`$CC -xM1 conftest.c 2>&1`" = "conftest.o: conftest.c"; then
214*b7579f77SDag-Erling Smørgrav	DEPFLAG="-xM1"
215*b7579f77SDag-Erling Smørgrav  else
216*b7579f77SDag-Erling Smørgrav	DEPFLAG="-MM"  # dunno do something
217*b7579f77SDag-Erling Smørgrav  fi
218*b7579f77SDag-Erling Smørgravfi
219*b7579f77SDag-Erling SmørgravAC_MSG_RESULT($DEPFLAG)
220*b7579f77SDag-Erling Smørgravrm -f conftest.c
221*b7579f77SDag-Erling SmørgravAC_SUBST(DEPFLAG)
222*b7579f77SDag-Erling Smørgrav])
223*b7579f77SDag-Erling Smørgrav
224*b7579f77SDag-Erling Smørgravdnl Determine flags that gives POSIX and BSD functionality.
225*b7579f77SDag-Erling Smørgravdnl CFLAGS is modified for the result.
226*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_DETERMINE_EXT_FLAGS_UNBOUND],
227*b7579f77SDag-Erling Smørgrav[
228*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(std=c99, [C99FLAG="-std=c99"])
229*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(xc99, [C99FLAG="-xc99"])
230*b7579f77SDag-Erling Smørgrav
231*b7579f77SDag-Erling SmørgravAC_CHECK_HEADERS([getopt.h time.h],,, [AC_INCLUDES_DEFAULT])
232*b7579f77SDag-Erling Smørgrav
233*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE,
234*b7579f77SDag-Erling Smørgrav[
235*b7579f77SDag-Erling Smørgrav#include "confdefs.h"
236*b7579f77SDag-Erling Smørgrav#include <stdlib.h>
237*b7579f77SDag-Erling Smørgrav#include <ctype.h>
238*b7579f77SDag-Erling Smørgrav#include <sys/time.h>
239*b7579f77SDag-Erling Smørgrav#ifdef HAVE_TIME_H
240*b7579f77SDag-Erling Smørgrav#include <time.h>
241*b7579f77SDag-Erling Smørgrav#endif
242*b7579f77SDag-Erling Smørgrav#include <unistd.h>
243*b7579f77SDag-Erling Smørgrav#include <netdb.h>
244*b7579f77SDag-Erling Smørgrav#ifdef HAVE_GETOPT_H
245*b7579f77SDag-Erling Smørgrav#include <getopt.h>
246*b7579f77SDag-Erling Smørgrav#endif
247*b7579f77SDag-Erling Smørgrav
248*b7579f77SDag-Erling Smørgravint test() {
249*b7579f77SDag-Erling Smørgrav	int a;
250*b7579f77SDag-Erling Smørgrav	char **opts = NULL;
251*b7579f77SDag-Erling Smørgrav	struct timeval tv;
252*b7579f77SDag-Erling Smørgrav	char *t;
253*b7579f77SDag-Erling Smørgrav	time_t time = 0;
254*b7579f77SDag-Erling Smørgrav	char *buf = NULL;
255*b7579f77SDag-Erling Smørgrav	const char* str = NULL;
256*b7579f77SDag-Erling Smørgrav	struct msghdr msg;
257*b7579f77SDag-Erling Smørgrav	msg.msg_control = 0;
258*b7579f77SDag-Erling Smørgrav	t = ctime_r(&time, buf);
259*b7579f77SDag-Erling Smørgrav	tv.tv_usec = 10;
260*b7579f77SDag-Erling Smørgrav	srandom(32);
261*b7579f77SDag-Erling Smørgrav	a = getopt(2, opts, "a");
262*b7579f77SDag-Erling Smørgrav	a = isascii(32);
263*b7579f77SDag-Erling Smørgrav	str = gai_strerror(0);
264*b7579f77SDag-Erling Smørgrav	if(str && t && tv.tv_usec && msg.msg_control)
265*b7579f77SDag-Erling Smørgrav		a = 0;
266*b7579f77SDag-Erling Smørgrav	return a;
267*b7579f77SDag-Erling Smørgrav}
268*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE"])
269*b7579f77SDag-Erling Smørgrav
270*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE,
271*b7579f77SDag-Erling Smørgrav[
272*b7579f77SDag-Erling Smørgrav#include "confdefs.h"
273*b7579f77SDag-Erling Smørgrav#include <stdlib.h>
274*b7579f77SDag-Erling Smørgrav#include <ctype.h>
275*b7579f77SDag-Erling Smørgrav#include <sys/time.h>
276*b7579f77SDag-Erling Smørgrav#ifdef HAVE_TIME_H
277*b7579f77SDag-Erling Smørgrav#include <time.h>
278*b7579f77SDag-Erling Smørgrav#endif
279*b7579f77SDag-Erling Smørgrav#include <unistd.h>
280*b7579f77SDag-Erling Smørgrav#include <netdb.h>
281*b7579f77SDag-Erling Smørgrav#ifdef HAVE_GETOPT_H
282*b7579f77SDag-Erling Smørgrav#include <getopt.h>
283*b7579f77SDag-Erling Smørgrav#endif
284*b7579f77SDag-Erling Smørgrav
285*b7579f77SDag-Erling Smørgravint test() {
286*b7579f77SDag-Erling Smørgrav	int a;
287*b7579f77SDag-Erling Smørgrav	char **opts = NULL;
288*b7579f77SDag-Erling Smørgrav	struct timeval tv;
289*b7579f77SDag-Erling Smørgrav	char *t;
290*b7579f77SDag-Erling Smørgrav	time_t time = 0;
291*b7579f77SDag-Erling Smørgrav	char *buf = NULL;
292*b7579f77SDag-Erling Smørgrav	const char* str = NULL;
293*b7579f77SDag-Erling Smørgrav	struct msghdr msg;
294*b7579f77SDag-Erling Smørgrav	msg.msg_control = 0;
295*b7579f77SDag-Erling Smørgrav	t = ctime_r(&time, buf);
296*b7579f77SDag-Erling Smørgrav	tv.tv_usec = 10;
297*b7579f77SDag-Erling Smørgrav	srandom(32);
298*b7579f77SDag-Erling Smørgrav	a = getopt(2, opts, "a");
299*b7579f77SDag-Erling Smørgrav	a = isascii(32);
300*b7579f77SDag-Erling Smørgrav	str = gai_strerror(0);
301*b7579f77SDag-Erling Smørgrav	if(str && t && tv.tv_usec && msg.msg_control)
302*b7579f77SDag-Erling Smørgrav		a = 0;
303*b7579f77SDag-Erling Smørgrav	return a;
304*b7579f77SDag-Erling Smørgrav}
305*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE"])
306*b7579f77SDag-Erling Smørgrav
307*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG,
308*b7579f77SDag-Erling Smørgrav[
309*b7579f77SDag-Erling Smørgrav#include <stdbool.h>
310*b7579f77SDag-Erling Smørgrav#include <ctype.h>
311*b7579f77SDag-Erling Smørgravint test() {
312*b7579f77SDag-Erling Smørgrav        int a = 0;
313*b7579f77SDag-Erling Smørgrav        return a;
314*b7579f77SDag-Erling Smørgrav}
315*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS $C99FLAG"])
316*b7579f77SDag-Erling Smørgrav
317*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_BSD_SOURCE,
318*b7579f77SDag-Erling Smørgrav[
319*b7579f77SDag-Erling Smørgrav#include <ctype.h>
320*b7579f77SDag-Erling Smørgrav
321*b7579f77SDag-Erling Smørgravint test() {
322*b7579f77SDag-Erling Smørgrav        int a;
323*b7579f77SDag-Erling Smørgrav        a = isascii(32);
324*b7579f77SDag-Erling Smørgrav        return a;
325*b7579f77SDag-Erling Smørgrav}
326*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_BSD_SOURCE"])
327*b7579f77SDag-Erling Smørgrav
328*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE,
329*b7579f77SDag-Erling Smørgrav[
330*b7579f77SDag-Erling Smørgrav#include <netinet/in.h>
331*b7579f77SDag-Erling Smørgrav
332*b7579f77SDag-Erling Smørgravint test() {
333*b7579f77SDag-Erling Smørgrav        struct in6_pktinfo inf;
334*b7579f77SDag-Erling Smørgrav	int a = (int)sizeof(inf);
335*b7579f77SDag-Erling Smørgrav        return a;
336*b7579f77SDag-Erling Smørgrav}
337*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_GNU_SOURCE"])
338*b7579f77SDag-Erling Smørgrav
339*b7579f77SDag-Erling Smørgrav# check again for GNU_SOURCE for setresgid. May fail if setresgid
340*b7579f77SDag-Erling Smørgrav# is not available at all. -D_FRSRESGID is to make this check unique.
341*b7579f77SDag-Erling Smørgrav# otherwise we would get the previous cached result.
342*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE -D_FRSRESGID,
343*b7579f77SDag-Erling Smørgrav[
344*b7579f77SDag-Erling Smørgrav#include <unistd.h>
345*b7579f77SDag-Erling Smørgrav
346*b7579f77SDag-Erling Smørgravint test() {
347*b7579f77SDag-Erling Smørgrav	int a = setresgid(0,0,0);
348*b7579f77SDag-Erling Smørgrav	a = setresuid(0,0,0);
349*b7579f77SDag-Erling Smørgrav        return a;
350*b7579f77SDag-Erling Smørgrav}
351*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_GNU_SOURCE"])
352*b7579f77SDag-Erling Smørgrav
353*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_POSIX_C_SOURCE=200112,
354*b7579f77SDag-Erling Smørgrav[
355*b7579f77SDag-Erling Smørgrav#include "confdefs.h"
356*b7579f77SDag-Erling Smørgrav#ifdef HAVE_TIME_H
357*b7579f77SDag-Erling Smørgrav#include <time.h>
358*b7579f77SDag-Erling Smørgrav#endif
359*b7579f77SDag-Erling Smørgrav#include <netdb.h>
360*b7579f77SDag-Erling Smørgrav
361*b7579f77SDag-Erling Smørgravint test() {
362*b7579f77SDag-Erling Smørgrav        int a = 0;
363*b7579f77SDag-Erling Smørgrav        char *t;
364*b7579f77SDag-Erling Smørgrav        time_t time = 0;
365*b7579f77SDag-Erling Smørgrav        char *buf = NULL;
366*b7579f77SDag-Erling Smørgrav	const char* str = NULL;
367*b7579f77SDag-Erling Smørgrav        t = ctime_r(&time, buf);
368*b7579f77SDag-Erling Smørgrav	str = gai_strerror(0);
369*b7579f77SDag-Erling Smørgrav	if(t && str)
370*b7579f77SDag-Erling Smørgrav		a = 0;
371*b7579f77SDag-Erling Smørgrav        return a;
372*b7579f77SDag-Erling Smørgrav}
373*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112"])
374*b7579f77SDag-Erling Smørgrav
375*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D__EXTENSIONS__,
376*b7579f77SDag-Erling Smørgrav[
377*b7579f77SDag-Erling Smørgrav#include "confdefs.h"
378*b7579f77SDag-Erling Smørgrav#include <stdlib.h>
379*b7579f77SDag-Erling Smørgrav#include <ctype.h>
380*b7579f77SDag-Erling Smørgrav#include <sys/time.h>
381*b7579f77SDag-Erling Smørgrav#ifdef HAVE_TIME_H
382*b7579f77SDag-Erling Smørgrav#include <time.h>
383*b7579f77SDag-Erling Smørgrav#endif
384*b7579f77SDag-Erling Smørgrav#include <unistd.h>
385*b7579f77SDag-Erling Smørgrav#ifdef HAVE_GETOPT_H
386*b7579f77SDag-Erling Smørgrav#include <getopt.h>
387*b7579f77SDag-Erling Smørgrav#endif
388*b7579f77SDag-Erling Smørgrav
389*b7579f77SDag-Erling Smørgravint test() {
390*b7579f77SDag-Erling Smørgrav        int a;
391*b7579f77SDag-Erling Smørgrav        char **opts = NULL;
392*b7579f77SDag-Erling Smørgrav        struct timeval tv;
393*b7579f77SDag-Erling Smørgrav        tv.tv_usec = 10;
394*b7579f77SDag-Erling Smørgrav        srandom(32);
395*b7579f77SDag-Erling Smørgrav        a = getopt(2, opts, "a");
396*b7579f77SDag-Erling Smørgrav        a = isascii(32);
397*b7579f77SDag-Erling Smørgrav	if(tv.tv_usec)
398*b7579f77SDag-Erling Smørgrav		a = 0;
399*b7579f77SDag-Erling Smørgrav        return a;
400*b7579f77SDag-Erling Smørgrav}
401*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D__EXTENSIONS__"])
402*b7579f77SDag-Erling Smørgrav
403*b7579f77SDag-Erling Smørgrav])dnl End of ACX_DETERMINE_EXT_FLAGS_UNBOUND
404*b7579f77SDag-Erling Smørgrav
405*b7579f77SDag-Erling Smørgravdnl Check if CC supports -flto.
406*b7579f77SDag-Erling Smørgravdnl in a way that supports clang and suncc (that flag does something else,
407*b7579f77SDag-Erling Smørgravdnl but fails to link).  It sets it in CFLAGS if it works.
408*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_FLTO],
409*b7579f77SDag-Erling Smørgrav[AC_MSG_CHECKING([if $CC supports -flto])
410*b7579f77SDag-Erling SmørgravBAKCFLAGS="$CFLAGS"
411*b7579f77SDag-Erling SmørgravCFLAGS="$CFLAGS -flto"
412*b7579f77SDag-Erling SmørgravAC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
413*b7579f77SDag-Erling Smørgrav    if $CC $CFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
414*b7579f77SDag-Erling Smørgrav	CFLAGS="$BAKCFLAGS"
415*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT(no)
416*b7579f77SDag-Erling Smørgrav    else
417*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT(yes)
418*b7579f77SDag-Erling Smørgrav    fi
419*b7579f77SDag-Erling Smørgrav    rm -f conftest conftest.c conftest.o
420*b7579f77SDag-Erling Smørgrav], [CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)])
421*b7579f77SDag-Erling Smørgrav])
422*b7579f77SDag-Erling Smørgrav
423*b7579f77SDag-Erling Smørgravdnl Check the printf-format attribute (if any)
424*b7579f77SDag-Erling Smørgravdnl result in HAVE_ATTR_FORMAT.
425*b7579f77SDag-Erling Smørgravdnl Make sure you also include the AHX_CONFIG_FORMAT_ATTRIBUTE.
426*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_FORMAT_ATTRIBUTE],
427*b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
428*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "format" attribute)
429*b7579f77SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_format_attribute,
430*b7579f77SDag-Erling Smørgrav[ac_cv_c_format_attribute=no
431*b7579f77SDag-Erling SmørgravAC_TRY_COMPILE(
432*b7579f77SDag-Erling Smørgrav[#include <stdio.h>
433*b7579f77SDag-Erling Smørgravvoid f (char *format, ...) __attribute__ ((format (printf, 1, 2)));
434*b7579f77SDag-Erling Smørgravvoid (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2)));
435*b7579f77SDag-Erling Smørgrav], [
436*b7579f77SDag-Erling Smørgrav   f ("%s", "str");
437*b7579f77SDag-Erling Smørgrav],
438*b7579f77SDag-Erling Smørgrav[ac_cv_c_format_attribute="yes"],
439*b7579f77SDag-Erling Smørgrav[ac_cv_c_format_attribute="no"])
440*b7579f77SDag-Erling Smørgrav])
441*b7579f77SDag-Erling Smørgrav
442*b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_format_attribute)
443*b7579f77SDag-Erling Smørgravif test $ac_cv_c_format_attribute = yes; then
444*b7579f77SDag-Erling Smørgrav  AC_DEFINE(HAVE_ATTR_FORMAT, 1, [Whether the C compiler accepts the "format" attribute])
445*b7579f77SDag-Erling Smørgravfi
446*b7579f77SDag-Erling Smørgrav])dnl End of ACX_CHECK_FORMAT_ATTRIBUTE
447*b7579f77SDag-Erling Smørgrav
448*b7579f77SDag-Erling Smørgravdnl Setup ATTR_FORMAT config.h parts.
449*b7579f77SDag-Erling Smørgravdnl make sure you call ACX_CHECK_FORMAT_ATTRIBUTE also.
450*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FORMAT_ATTRIBUTE],
451*b7579f77SDag-Erling Smørgrav[
452*b7579f77SDag-Erling Smørgrav#ifdef HAVE_ATTR_FORMAT
453*b7579f77SDag-Erling Smørgrav#  define ATTR_FORMAT(archetype, string_index, first_to_check) \
454*b7579f77SDag-Erling Smørgrav    __attribute__ ((format (archetype, string_index, first_to_check)))
455*b7579f77SDag-Erling Smørgrav#else /* !HAVE_ATTR_FORMAT */
456*b7579f77SDag-Erling Smørgrav#  define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */
457*b7579f77SDag-Erling Smørgrav#endif /* !HAVE_ATTR_FORMAT */
458*b7579f77SDag-Erling Smørgrav])
459*b7579f77SDag-Erling Smørgrav
460*b7579f77SDag-Erling Smørgravdnl Check how to mark function arguments as unused.
461*b7579f77SDag-Erling Smørgravdnl result in HAVE_ATTR_UNUSED.
462*b7579f77SDag-Erling Smørgravdnl Make sure you include AHX_CONFIG_UNUSED_ATTRIBUTE also.
463*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_UNUSED_ATTRIBUTE],
464*b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
465*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "unused" attribute)
466*b7579f77SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_unused_attribute,
467*b7579f77SDag-Erling Smørgrav[ac_cv_c_unused_attribute=no
468*b7579f77SDag-Erling SmørgravAC_TRY_COMPILE(
469*b7579f77SDag-Erling Smørgrav[#include <stdio.h>
470*b7579f77SDag-Erling Smørgravvoid f (char *u __attribute__((unused)));
471*b7579f77SDag-Erling Smørgrav], [
472*b7579f77SDag-Erling Smørgrav   f ("x");
473*b7579f77SDag-Erling Smørgrav],
474*b7579f77SDag-Erling Smørgrav[ac_cv_c_unused_attribute="yes"],
475*b7579f77SDag-Erling Smørgrav[ac_cv_c_unused_attribute="no"])
476*b7579f77SDag-Erling Smørgrav])
477*b7579f77SDag-Erling Smørgrav
478*b7579f77SDag-Erling Smørgravdnl Setup ATTR_UNUSED config.h parts.
479*b7579f77SDag-Erling Smørgravdnl make sure you call ACX_CHECK_UNUSED_ATTRIBUTE also.
480*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_UNUSED_ATTRIBUTE],
481*b7579f77SDag-Erling Smørgrav[
482*b7579f77SDag-Erling Smørgrav#if defined(DOXYGEN)
483*b7579f77SDag-Erling Smørgrav#  define ATTR_UNUSED(x)  x
484*b7579f77SDag-Erling Smørgrav#elif defined(__cplusplus)
485*b7579f77SDag-Erling Smørgrav#  define ATTR_UNUSED(x)
486*b7579f77SDag-Erling Smørgrav#elif defined(HAVE_ATTR_UNUSED)
487*b7579f77SDag-Erling Smørgrav#  define ATTR_UNUSED(x)  x __attribute__((unused))
488*b7579f77SDag-Erling Smørgrav#else /* !HAVE_ATTR_UNUSED */
489*b7579f77SDag-Erling Smørgrav#  define ATTR_UNUSED(x)  x
490*b7579f77SDag-Erling Smørgrav#endif /* !HAVE_ATTR_UNUSED */
491*b7579f77SDag-Erling Smørgrav])
492*b7579f77SDag-Erling Smørgrav
493*b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_unused_attribute)
494*b7579f77SDag-Erling Smørgravif test $ac_cv_c_unused_attribute = yes; then
495*b7579f77SDag-Erling Smørgrav  AC_DEFINE(HAVE_ATTR_UNUSED, 1, [Whether the C compiler accepts the "unused" attribute])
496*b7579f77SDag-Erling Smørgravfi
497*b7579f77SDag-Erling Smørgrav])dnl
498*b7579f77SDag-Erling Smørgrav
499*b7579f77SDag-Erling Smørgravdnl Pre-fun for ACX_LIBTOOL_C_ONLY
500*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_LIBTOOL_C_PRE], [
501*b7579f77SDag-Erling Smørgrav# skip these tests, we do not need them.
502*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PROG_F77], [:])
503*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PROG_FC], [:])
504*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PROG_CXX], [:])
505*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PROG_CXXCPP], [:])
506*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PROG_OBJC], [:])
507*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PROG_OBJCCPP], [:])
508*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_LIBTOOL_CXX], [:])
509*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_LIBTOOL_F77], [:])
510*b7579f77SDag-Erling Smørgrav# always use ./libtool unless override from commandline (libtool=mylibtool)
511*b7579f77SDag-Erling Smørgravif test -z "$libtool"; then
512*b7579f77SDag-Erling Smørgrav	libtool="./libtool"
513*b7579f77SDag-Erling Smørgravfi
514*b7579f77SDag-Erling SmørgravAC_SUBST(libtool)
515*b7579f77SDag-Erling Smørgrav# avoid libtool max commandline length test on systems that fork slowly.
516*b7579f77SDag-Erling SmørgravAC_CANONICAL_HOST
517*b7579f77SDag-Erling Smørgravif echo "$host_os" | grep "sunos4" >/dev/null; then
518*b7579f77SDag-Erling Smørgrav	lt_cv_sys_max_cmd_len=32750;
519*b7579f77SDag-Erling Smørgravfi
520*b7579f77SDag-Erling SmørgravAC_PATH_TOOL(AR, ar, [false])
521*b7579f77SDag-Erling Smørgravif test $AR = false; then
522*b7579f77SDag-Erling Smørgrav	AC_MSG_ERROR([Cannot find 'ar', please extend PATH to include it])
523*b7579f77SDag-Erling Smørgravfi
524*b7579f77SDag-Erling Smørgrav])
525*b7579f77SDag-Erling Smørgrav
526*b7579f77SDag-Erling Smørgravdnl Perform libtool check, portably, only for C
527*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_LIBTOOL_C_ONLY], [
528*b7579f77SDag-Erling Smørgravdnl as a requirement so that is gets called before LIBTOOL
529*b7579f77SDag-Erling Smørgravdnl because libtools 'AC_REQUIRE' names are right after this one, before
530*b7579f77SDag-Erling Smørgravdnl this function contents.
531*b7579f77SDag-Erling SmørgravAC_REQUIRE([ACX_LIBTOOL_C_PRE])
532*b7579f77SDag-Erling SmørgravAC_PROG_LIBTOOL
533*b7579f77SDag-Erling Smørgrav])
534*b7579f77SDag-Erling Smørgrav
535*b7579f77SDag-Erling Smørgravdnl Detect if u_char type is defined, otherwise define it.
536*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_U_CHAR],
537*b7579f77SDag-Erling Smørgrav[AC_CHECK_TYPE([u_char], ,
538*b7579f77SDag-Erling Smørgrav	[AC_DEFINE([u_char], [unsigned char], [Define to 'unsigned char if not defined])], [
539*b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT
540*b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
541*b7579f77SDag-Erling Smørgrav#  include <winsock2.h>
542*b7579f77SDag-Erling Smørgrav#endif
543*b7579f77SDag-Erling Smørgrav]) ])
544*b7579f77SDag-Erling Smørgrav
545*b7579f77SDag-Erling Smørgravdnl Detect if rlim_t type is defined, otherwise define it.
546*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_RLIM_T],
547*b7579f77SDag-Erling Smørgrav[AC_CHECK_TYPE(rlim_t, ,
548*b7579f77SDag-Erling Smørgrav	[AC_DEFINE([rlim_t], [unsigned long], [Define to 'int' if not defined])], [
549*b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT
550*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_RESOURCE_H
551*b7579f77SDag-Erling Smørgrav#  include <sys/resource.h>
552*b7579f77SDag-Erling Smørgrav#endif
553*b7579f77SDag-Erling Smørgrav]) ])
554*b7579f77SDag-Erling Smørgrav
555*b7579f77SDag-Erling Smørgravdnl Detect if socklen_t type is defined, otherwise define it.
556*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_SOCKLEN_T],
557*b7579f77SDag-Erling Smørgrav[
558*b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(socklen_t, ,
559*b7579f77SDag-Erling Smørgrav	[AC_DEFINE([socklen_t], [int], [Define to 'int' if not defined])], [
560*b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT
561*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
562*b7579f77SDag-Erling Smørgrav#  include <sys/socket.h>
563*b7579f77SDag-Erling Smørgrav#endif
564*b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H
565*b7579f77SDag-Erling Smørgrav#  include <ws2tcpip.h>
566*b7579f77SDag-Erling Smørgrav#endif
567*b7579f77SDag-Erling Smørgrav]) ])
568*b7579f77SDag-Erling Smørgrav
569*b7579f77SDag-Erling Smørgravdnl Detect if in_addr_t type is defined, otherwise define it.
570*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_IN_ADDR_T],
571*b7579f77SDag-Erling Smørgrav[ AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [
572*b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT
573*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_TYPES_H
574*b7579f77SDag-Erling Smørgrav# include <sys/types.h>
575*b7579f77SDag-Erling Smørgrav#endif
576*b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
577*b7579f77SDag-Erling Smørgrav# include <netinet/in.h>
578*b7579f77SDag-Erling Smørgrav#endif
579*b7579f77SDag-Erling Smørgrav]) ])
580*b7579f77SDag-Erling Smørgrav
581*b7579f77SDag-Erling Smørgravdnl Detect if in_port_t type is defined, otherwise define it.
582*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_IN_PORT_T],
583*b7579f77SDag-Erling Smørgrav[ AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [
584*b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT
585*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_TYPES_H
586*b7579f77SDag-Erling Smørgrav# include <sys/types.h>
587*b7579f77SDag-Erling Smørgrav#endif
588*b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
589*b7579f77SDag-Erling Smørgrav# include <netinet/in.h>
590*b7579f77SDag-Erling Smørgrav#endif
591*b7579f77SDag-Erling Smørgrav]) ])
592*b7579f77SDag-Erling Smørgrav
593*b7579f77SDag-Erling Smørgravdnl Add option to disable the evil rpath. Check whether to use rpath or not.
594*b7579f77SDag-Erling Smørgravdnl Adds the --disable-rpath option. Uses trick to edit the ./libtool.
595*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_ARG_RPATH],
596*b7579f77SDag-Erling Smørgrav[
597*b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(rpath,
598*b7579f77SDag-Erling Smørgrav        [  --disable-rpath         disable hardcoded rpath (default=enabled)],
599*b7579f77SDag-Erling Smørgrav	enable_rpath=$enableval, enable_rpath=yes)
600*b7579f77SDag-Erling Smørgravif test "x$enable_rpath" = xno; then
601*b7579f77SDag-Erling Smørgrav	dnl AC_MSG_RESULT([Fixing libtool for -rpath problems.])
602*b7579f77SDag-Erling Smørgrav	AC_CONFIG_COMMANDS([disable-rpath], [
603*b7579f77SDag-Erling Smørgrav	sed < libtool > libtool-2 \
604*b7579f77SDag-Erling Smørgrav	's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_RPATH_SED__ "/'
605*b7579f77SDag-Erling Smørgrav	mv libtool-2 libtool
606*b7579f77SDag-Erling Smørgrav	chmod 755 libtool
607*b7579f77SDag-Erling Smørgrav	libtool="./libtool"
608*b7579f77SDag-Erling Smørgrav	])
609*b7579f77SDag-Erling Smørgravfi
610*b7579f77SDag-Erling Smørgrav])
611*b7579f77SDag-Erling Smørgrav
612*b7579f77SDag-Erling Smørgravdnl Add a -R to the RUNTIME_PATH.  Only if rpath is enabled and it is
613*b7579f77SDag-Erling Smørgravdnl an absolute path.
614*b7579f77SDag-Erling Smørgravdnl $1: the pathname to add.
615*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_RUNTIME_PATH_ADD], [
616*b7579f77SDag-Erling Smørgrav	if test "x$enable_rpath" = xyes; then
617*b7579f77SDag-Erling Smørgrav		if echo "$1" | grep "^/" >/dev/null; then
618*b7579f77SDag-Erling Smørgrav			RUNTIME_PATH="$RUNTIME_PATH -R$1"
619*b7579f77SDag-Erling Smørgrav		fi
620*b7579f77SDag-Erling Smørgrav	fi
621*b7579f77SDag-Erling Smørgrav])
622*b7579f77SDag-Erling Smørgrav
623*b7579f77SDag-Erling Smørgravdnl Common code for both ACX_WITH_SSL and ACX_WITH_SSL_OPTIONAL
624*b7579f77SDag-Erling Smørgravdnl Takes one argument; the withval checked in those 2 functions
625*b7579f77SDag-Erling Smørgravdnl sets up the environment for the given openssl path
626*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_SSL_CHECKS], [
627*b7579f77SDag-Erling Smørgrav    withval=$1
628*b7579f77SDag-Erling Smørgrav    if test x_$withval != x_no; then
629*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING(for SSL)
630*b7579f77SDag-Erling Smørgrav        if test x_$withval = x_ -o x_$withval = x_yes; then
631*b7579f77SDag-Erling Smørgrav            withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr"
632*b7579f77SDag-Erling Smørgrav        fi
633*b7579f77SDag-Erling Smørgrav        for dir in $withval; do
634*b7579f77SDag-Erling Smørgrav            ssldir="$dir"
635*b7579f77SDag-Erling Smørgrav            if test -f "$dir/include/openssl/ssl.h"; then
636*b7579f77SDag-Erling Smørgrav                found_ssl="yes"
637*b7579f77SDag-Erling Smørgrav                AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.])
638*b7579f77SDag-Erling Smørgrav                dnl assume /usr/include is already in the include-path.
639*b7579f77SDag-Erling Smørgrav                if test "$ssldir" != "/usr"; then
640*b7579f77SDag-Erling Smørgrav                        CPPFLAGS="$CPPFLAGS -I$ssldir/include"
641*b7579f77SDag-Erling Smørgrav                        LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include"
642*b7579f77SDag-Erling Smørgrav                fi
643*b7579f77SDag-Erling Smørgrav                break;
644*b7579f77SDag-Erling Smørgrav            fi
645*b7579f77SDag-Erling Smørgrav        done
646*b7579f77SDag-Erling Smørgrav        if test x_$found_ssl != x_yes; then
647*b7579f77SDag-Erling Smørgrav            AC_MSG_ERROR(Cannot find the SSL libraries in $withval)
648*b7579f77SDag-Erling Smørgrav        else
649*b7579f77SDag-Erling Smørgrav            AC_MSG_RESULT(found in $ssldir)
650*b7579f77SDag-Erling Smørgrav            HAVE_SSL=yes
651*b7579f77SDag-Erling Smørgrav            dnl assume /usr is already in the lib and dynlib paths.
652*b7579f77SDag-Erling Smørgrav            if test "$ssldir" != "/usr" -a "$ssldir" != ""; then
653*b7579f77SDag-Erling Smørgrav                LDFLAGS="$LDFLAGS -L$ssldir/lib"
654*b7579f77SDag-Erling Smørgrav                LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib"
655*b7579f77SDag-Erling Smørgrav                ACX_RUNTIME_PATH_ADD([$ssldir/lib])
656*b7579f77SDag-Erling Smørgrav            fi
657*b7579f77SDag-Erling Smørgrav
658*b7579f77SDag-Erling Smørgrav            AC_MSG_CHECKING([for HMAC_CTX_init in -lcrypto])
659*b7579f77SDag-Erling Smørgrav            LIBS="$LIBS -lcrypto"
660*b7579f77SDag-Erling Smørgrav            LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto"
661*b7579f77SDag-Erling Smørgrav            AC_TRY_LINK(, [
662*b7579f77SDag-Erling Smørgrav                int HMAC_CTX_init(void);
663*b7579f77SDag-Erling Smørgrav                (void)HMAC_CTX_init();
664*b7579f77SDag-Erling Smørgrav              ], [
665*b7579f77SDag-Erling Smørgrav                AC_MSG_RESULT(yes)
666*b7579f77SDag-Erling Smørgrav                AC_DEFINE([HAVE_HMAC_CTX_INIT], 1,
667*b7579f77SDag-Erling Smørgrav                          [If you have HMAC_CTX_init])
668*b7579f77SDag-Erling Smørgrav              ], [
669*b7579f77SDag-Erling Smørgrav                AC_MSG_RESULT(no)
670*b7579f77SDag-Erling Smørgrav                # check if -lwsock32 or -lgdi32 are needed.
671*b7579f77SDag-Erling Smørgrav                BAKLIBS="$LIBS"
672*b7579f77SDag-Erling Smørgrav                BAKSSLLIBS="$LIBSSL_LIBS"
673*b7579f77SDag-Erling Smørgrav                LIBS="$LIBS -lgdi32"
674*b7579f77SDag-Erling Smørgrav                LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32"
675*b7579f77SDag-Erling Smørgrav                AC_MSG_CHECKING([if -lcrypto needs -lgdi32])
676*b7579f77SDag-Erling Smørgrav                AC_TRY_LINK([], [
677*b7579f77SDag-Erling Smørgrav                    int HMAC_CTX_init(void);
678*b7579f77SDag-Erling Smørgrav                    (void)HMAC_CTX_init();
679*b7579f77SDag-Erling Smørgrav                  ],[
680*b7579f77SDag-Erling Smørgrav                    AC_DEFINE([HAVE_HMAC_CTX_INIT], 1,
681*b7579f77SDag-Erling Smørgrav                        [If you have HMAC_CTX_init])
682*b7579f77SDag-Erling Smørgrav                    AC_MSG_RESULT(yes)
683*b7579f77SDag-Erling Smørgrav                  ],[
684*b7579f77SDag-Erling Smørgrav                    AC_MSG_RESULT(no)
685*b7579f77SDag-Erling Smørgrav                    LIBS="$BAKLIBS"
686*b7579f77SDag-Erling Smørgrav                    LIBSSL_LIBS="$BAKSSLLIBS"
687*b7579f77SDag-Erling Smørgrav                    LIBS="$LIBS -ldl"
688*b7579f77SDag-Erling Smørgrav                    LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
689*b7579f77SDag-Erling Smørgrav                    AC_MSG_CHECKING([if -lcrypto needs -ldl])
690*b7579f77SDag-Erling Smørgrav                    AC_TRY_LINK([], [
691*b7579f77SDag-Erling Smørgrav                        int HMAC_CTX_init(void);
692*b7579f77SDag-Erling Smørgrav                        (void)HMAC_CTX_init();
693*b7579f77SDag-Erling Smørgrav                      ],[
694*b7579f77SDag-Erling Smørgrav                        AC_DEFINE([HAVE_HMAC_CTX_INIT], 1,
695*b7579f77SDag-Erling Smørgrav                            [If you have HMAC_CTX_init])
696*b7579f77SDag-Erling Smørgrav                        AC_MSG_RESULT(yes)
697*b7579f77SDag-Erling Smørgrav                      ],[
698*b7579f77SDag-Erling Smørgrav                        AC_MSG_RESULT(no)
699*b7579f77SDag-Erling Smørgrav                    AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required])
700*b7579f77SDag-Erling Smørgrav                    ])
701*b7579f77SDag-Erling Smørgrav                ])
702*b7579f77SDag-Erling Smørgrav            ])
703*b7579f77SDag-Erling Smørgrav        fi
704*b7579f77SDag-Erling Smørgrav        AC_SUBST(HAVE_SSL)
705*b7579f77SDag-Erling Smørgrav        AC_SUBST(RUNTIME_PATH)
706*b7579f77SDag-Erling Smørgrav	# openssl engine functionality needs dlopen().
707*b7579f77SDag-Erling Smørgrav	BAKLIBS="$LIBS"
708*b7579f77SDag-Erling Smørgrav	AC_SEARCH_LIBS([dlopen], [dl])
709*b7579f77SDag-Erling Smørgrav	if test "$LIBS" != "$BAKLIBS"; then
710*b7579f77SDag-Erling Smørgrav		LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
711*b7579f77SDag-Erling Smørgrav	fi
712*b7579f77SDag-Erling Smørgrav    fi
713*b7579f77SDag-Erling SmørgravAC_CHECK_HEADERS([openssl/ssl.h],,, [AC_INCLUDES_DEFAULT])
714*b7579f77SDag-Erling SmørgravAC_CHECK_HEADERS([openssl/err.h],,, [AC_INCLUDES_DEFAULT])
715*b7579f77SDag-Erling SmørgravAC_CHECK_HEADERS([openssl/rand.h],,, [AC_INCLUDES_DEFAULT])
716*b7579f77SDag-Erling Smørgrav])dnl End of ACX_SSL_CHECKS
717*b7579f77SDag-Erling Smørgrav
718*b7579f77SDag-Erling Smørgravdnl Check for SSL, where SSL is mandatory
719*b7579f77SDag-Erling Smørgravdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found
720*b7579f77SDag-Erling Smørgravdnl Setup of CPPFLAGS, CFLAGS.  Adds -lcrypto to LIBS.
721*b7579f77SDag-Erling Smørgravdnl Checks main header files of SSL.
722*b7579f77SDag-Erling Smørgravdnl
723*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_WITH_SSL],
724*b7579f77SDag-Erling Smørgrav[
725*b7579f77SDag-Erling SmørgravAC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=pathname],
726*b7579f77SDag-Erling Smørgrav                                    [enable SSL (will check /usr/local/ssl
727*b7579f77SDag-Erling Smørgrav                            /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[
728*b7579f77SDag-Erling Smørgrav        ],[
729*b7579f77SDag-Erling Smørgrav            withval="yes"
730*b7579f77SDag-Erling Smørgrav        ])
731*b7579f77SDag-Erling Smørgrav    if test x_$withval = x_no; then
732*b7579f77SDag-Erling Smørgrav	AC_MSG_ERROR([Need SSL library to do digital signature cryptography])
733*b7579f77SDag-Erling Smørgrav    fi
734*b7579f77SDag-Erling Smørgrav    ACX_SSL_CHECKS($withval)
735*b7579f77SDag-Erling Smørgrav])dnl End of ACX_WITH_SSL
736*b7579f77SDag-Erling Smørgrav
737*b7579f77SDag-Erling Smørgravdnl Check for SSL, where ssl is optional (--without-ssl is allowed)
738*b7579f77SDag-Erling Smørgravdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found
739*b7579f77SDag-Erling Smørgravdnl Setup of CPPFLAGS, CFLAGS.  Adds -lcrypto to LIBS.
740*b7579f77SDag-Erling Smørgravdnl Checks main header files of SSL.
741*b7579f77SDag-Erling Smørgravdnl
742*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_WITH_SSL_OPTIONAL],
743*b7579f77SDag-Erling Smørgrav[
744*b7579f77SDag-Erling SmørgravAC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=pathname],
745*b7579f77SDag-Erling Smørgrav                                [enable SSL (will check /usr/local/ssl
746*b7579f77SDag-Erling Smørgrav                                /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[
747*b7579f77SDag-Erling Smørgrav        ],[
748*b7579f77SDag-Erling Smørgrav            withval="yes"
749*b7579f77SDag-Erling Smørgrav        ])
750*b7579f77SDag-Erling Smørgrav    ACX_SSL_CHECKS($withval)
751*b7579f77SDag-Erling Smørgrav])dnl End of ACX_WITH_SSL_OPTIONAL
752*b7579f77SDag-Erling Smørgrav
753*b7579f77SDag-Erling Smørgravdnl Setup to use -lssl
754*b7579f77SDag-Erling Smørgravdnl To use -lcrypto, use the ACX_WITH_SSL setup (before this one).
755*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_LIB_SSL],
756*b7579f77SDag-Erling Smørgrav[
757*b7579f77SDag-Erling Smørgrav# check if libssl needs libdl
758*b7579f77SDag-Erling SmørgravBAKLIBS="$LIBS"
759*b7579f77SDag-Erling SmørgravLIBS="-lssl $LIBS"
760*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if libssl needs libdl])
761*b7579f77SDag-Erling SmørgravAC_TRY_LINK_FUNC([SSL_CTX_new], [
762*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT([no])
763*b7579f77SDag-Erling Smørgrav	LIBS="$BAKLIBS"
764*b7579f77SDag-Erling Smørgrav] , [
765*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT([yes])
766*b7579f77SDag-Erling Smørgrav	LIBS="$BAKLIBS"
767*b7579f77SDag-Erling Smørgrav	AC_SEARCH_LIBS([dlopen], [dl])
768*b7579f77SDag-Erling Smørgrav]) ])dnl End of ACX_LIB_SSL
769*b7579f77SDag-Erling Smørgrav
770*b7579f77SDag-Erling Smørgravdnl Setup to use very large files (>2Gb).
771*b7579f77SDag-Erling Smørgravdnl setups fseeko and its own
772*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_SYS_LARGEFILE],
773*b7579f77SDag-Erling Smørgrav[
774*b7579f77SDag-Erling SmørgravAC_SYS_LARGEFILE
775*b7579f77SDag-Erling Smørgravdnl try to see if an additional _LARGEFILE_SOURCE 1 is needed to get fseeko
776*b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_LARGEFILE_SOURCE=1,
777*b7579f77SDag-Erling Smørgrav[
778*b7579f77SDag-Erling Smørgrav#include <stdio.h>
779*b7579f77SDag-Erling Smørgravint test() {
780*b7579f77SDag-Erling Smørgrav        int a = fseeko(stdin, 0, 0);
781*b7579f77SDag-Erling Smørgrav        return a;
782*b7579f77SDag-Erling Smørgrav}
783*b7579f77SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE=1"])
784*b7579f77SDag-Erling Smørgrav])
785*b7579f77SDag-Erling Smørgrav
786*b7579f77SDag-Erling Smørgravdnl Check getaddrinfo.
787*b7579f77SDag-Erling Smørgravdnl Works on linux, solaris, bsd and windows(links winsock).
788*b7579f77SDag-Erling Smørgravdnl defines HAVE_GETADDRINFO, USE_WINSOCK.
789*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_GETADDRINFO_WITH_INCLUDES],
790*b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
791*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(for getaddrinfo)
792*b7579f77SDag-Erling Smørgravac_cv_func_getaddrinfo=no
793*b7579f77SDag-Erling SmørgravAC_LINK_IFELSE(
794*b7579f77SDag-Erling Smørgrav[AC_LANG_SOURCE([[
795*b7579f77SDag-Erling Smørgrav#ifdef __cplusplus
796*b7579f77SDag-Erling Smørgravextern "C"
797*b7579f77SDag-Erling Smørgrav{
798*b7579f77SDag-Erling Smørgrav#endif
799*b7579f77SDag-Erling Smørgravchar* getaddrinfo();
800*b7579f77SDag-Erling Smørgravchar* (*f) () = getaddrinfo;
801*b7579f77SDag-Erling Smørgrav#ifdef __cplusplus
802*b7579f77SDag-Erling Smørgrav}
803*b7579f77SDag-Erling Smørgrav#endif
804*b7579f77SDag-Erling Smørgravint main() {
805*b7579f77SDag-Erling Smørgrav        ;
806*b7579f77SDag-Erling Smørgrav        return 0;
807*b7579f77SDag-Erling Smørgrav}
808*b7579f77SDag-Erling Smørgrav]])],
809*b7579f77SDag-Erling Smørgravdnl this case on linux, solaris, bsd
810*b7579f77SDag-Erling Smørgrav[ac_cv_func_getaddrinfo="yes"
811*b7579f77SDag-Erling Smørgravdnl see if on windows
812*b7579f77SDag-Erling Smørgravif test "$ac_cv_header_windows_h" = "yes"; then
813*b7579f77SDag-Erling Smørgrav	AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
814*b7579f77SDag-Erling Smørgrav	USE_WINSOCK="1"
815*b7579f77SDag-Erling Smørgrav	LIBS="$LIBS -lws2_32"
816*b7579f77SDag-Erling Smørgravfi
817*b7579f77SDag-Erling Smørgrav],
818*b7579f77SDag-Erling Smørgravdnl no quick getaddrinfo, try mingw32 and winsock2 library.
819*b7579f77SDag-Erling SmørgravORIGLIBS="$LIBS"
820*b7579f77SDag-Erling SmørgravLIBS="$LIBS -lws2_32"
821*b7579f77SDag-Erling SmørgravAC_LINK_IFELSE(
822*b7579f77SDag-Erling Smørgrav[AC_LANG_PROGRAM(
823*b7579f77SDag-Erling Smørgrav[
824*b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H
825*b7579f77SDag-Erling Smørgrav#include <ws2tcpip.h>
826*b7579f77SDag-Erling Smørgrav#endif
827*b7579f77SDag-Erling Smørgrav],
828*b7579f77SDag-Erling Smørgrav[
829*b7579f77SDag-Erling Smørgrav        (void)getaddrinfo(NULL, NULL, NULL, NULL);
830*b7579f77SDag-Erling Smørgrav]
831*b7579f77SDag-Erling Smørgrav)],
832*b7579f77SDag-Erling Smørgrav[
833*b7579f77SDag-Erling Smørgravac_cv_func_getaddrinfo="yes"
834*b7579f77SDag-Erling Smørgravdnl already: LIBS="$LIBS -lws2_32"
835*b7579f77SDag-Erling SmørgravAC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
836*b7579f77SDag-Erling SmørgravUSE_WINSOCK="1"
837*b7579f77SDag-Erling Smørgrav],
838*b7579f77SDag-Erling Smørgrav[
839*b7579f77SDag-Erling Smørgravac_cv_func_getaddrinfo="no"
840*b7579f77SDag-Erling SmørgravLIBS="$ORIGLIBS"
841*b7579f77SDag-Erling Smørgrav])
842*b7579f77SDag-Erling Smørgrav)
843*b7579f77SDag-Erling Smørgrav
844*b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_func_getaddrinfo)
845*b7579f77SDag-Erling Smørgravif test $ac_cv_func_getaddrinfo = yes; then
846*b7579f77SDag-Erling Smørgrav  AC_DEFINE(HAVE_GETADDRINFO, 1, [Whether getaddrinfo is available])
847*b7579f77SDag-Erling Smørgravfi
848*b7579f77SDag-Erling Smørgrav])dnl Endof AC_CHECK_GETADDRINFO_WITH_INCLUDES
849*b7579f77SDag-Erling Smørgrav
850*b7579f77SDag-Erling Smørgravdnl check if a function is deprecated. defines DEPRECATED_func in config.h.
851*b7579f77SDag-Erling Smørgravdnl $1: function name
852*b7579f77SDag-Erling Smørgravdnl $2: C-statement that calls the function.
853*b7579f77SDag-Erling Smørgravdnl $3: includes for the program.
854*b7579f77SDag-Erling Smørgravdnl $4: executes if yes
855*b7579f77SDag-Erling Smørgravdnl $5: executes if no
856*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_FUNC_DEPRECATED],
857*b7579f77SDag-Erling Smørgrav[
858*b7579f77SDag-Erling SmørgravAC_REQUIRE([AC_PROG_CC])
859*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(if $1 is deprecated)
860*b7579f77SDag-Erling Smørgravcache=`echo $1 | sed 'y%.=/+-%___p_%'`
861*b7579f77SDag-Erling SmørgravAC_CACHE_VAL(cv_cc_deprecated_$cache,
862*b7579f77SDag-Erling Smørgrav[
863*b7579f77SDag-Erling Smørgravecho '$3' >conftest.c
864*b7579f77SDag-Erling Smørgravecho 'void f(){ $2 }' >>conftest.c
865*b7579f77SDag-Erling Smørgravif test -z "`$CC -c conftest.c 2>&1 | grep deprecated`"; then
866*b7579f77SDag-Erling Smørgraveval "cv_cc_deprecated_$cache=no"
867*b7579f77SDag-Erling Smørgravelse
868*b7579f77SDag-Erling Smørgraveval "cv_cc_deprecated_$cache=yes"
869*b7579f77SDag-Erling Smørgravfi
870*b7579f77SDag-Erling Smørgravrm -f conftest conftest.o conftest.c
871*b7579f77SDag-Erling Smørgrav])
872*b7579f77SDag-Erling Smørgravif eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then
873*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(yes)
874*b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(AS_TR_CPP([DEPRECATED_$1]), 1, [Whether $1 is deprecated])
875*b7579f77SDag-Erling Smørgrav:
876*b7579f77SDag-Erling Smørgrav$4
877*b7579f77SDag-Erling Smørgravelse
878*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(no)
879*b7579f77SDag-Erling Smørgrav:
880*b7579f77SDag-Erling Smørgrav$5
881*b7579f77SDag-Erling Smørgravfi
882*b7579f77SDag-Erling Smørgrav])dnl end of ACX_FUNC_DEPRECATED
883*b7579f77SDag-Erling Smørgrav
884*b7579f77SDag-Erling Smørgravdnl check if select and nonblocking sockets actually work.
885*b7579f77SDag-Erling Smørgravdnl Needs fork(2) and select(2).
886*b7579f77SDag-Erling Smørgravdnl defines NONBLOCKING_IS_BROKEN, and if that is true multiple reads from
887*b7579f77SDag-Erling Smørgravdnl a nonblocking socket do not work, a new call to select is necessary.
888*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_NONBLOCKING_BROKEN],
889*b7579f77SDag-Erling Smørgrav[
890*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if nonblocking sockets work])
891*b7579f77SDag-Erling Smørgravif echo $target | grep mingw32 >/dev/null; then
892*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT([no (windows)])
893*b7579f77SDag-Erling Smørgrav	AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).])
894*b7579f77SDag-Erling Smørgravelse
895*b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([
896*b7579f77SDag-Erling SmørgravAC_LANG_SOURCE([[
897*b7579f77SDag-Erling Smørgrav#include <stdio.h>
898*b7579f77SDag-Erling Smørgrav#include <string.h>
899*b7579f77SDag-Erling Smørgrav#include <stdlib.h>
900*b7579f77SDag-Erling Smørgrav#include <fcntl.h>
901*b7579f77SDag-Erling Smørgrav#include <errno.h>
902*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_TYPES_H
903*b7579f77SDag-Erling Smørgrav#include <sys/types.h>
904*b7579f77SDag-Erling Smørgrav#endif
905*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
906*b7579f77SDag-Erling Smørgrav#include <sys/socket.h>
907*b7579f77SDag-Erling Smørgrav#endif
908*b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
909*b7579f77SDag-Erling Smørgrav#include <netinet/in.h>
910*b7579f77SDag-Erling Smørgrav#endif
911*b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
912*b7579f77SDag-Erling Smørgrav#include <arpa/inet.h>
913*b7579f77SDag-Erling Smørgrav#endif
914*b7579f77SDag-Erling Smørgrav#ifdef HAVE_UNISTD_H
915*b7579f77SDag-Erling Smørgrav#include <unistd.h>
916*b7579f77SDag-Erling Smørgrav#endif
917*b7579f77SDag-Erling Smørgrav#ifdef HAVE_TIME_H
918*b7579f77SDag-Erling Smørgrav#include <time.h>
919*b7579f77SDag-Erling Smørgrav#endif
920*b7579f77SDag-Erling Smørgrav
921*b7579f77SDag-Erling Smørgravint main(void)
922*b7579f77SDag-Erling Smørgrav{
923*b7579f77SDag-Erling Smørgrav	int port;
924*b7579f77SDag-Erling Smørgrav	int sfd, cfd;
925*b7579f77SDag-Erling Smørgrav	int num = 10;
926*b7579f77SDag-Erling Smørgrav	int i, p;
927*b7579f77SDag-Erling Smørgrav	struct sockaddr_in a;
928*b7579f77SDag-Erling Smørgrav	/* test if select and nonblocking reads work well together */
929*b7579f77SDag-Erling Smørgrav	/* open port.
930*b7579f77SDag-Erling Smørgrav	   fork child to send 10 messages.
931*b7579f77SDag-Erling Smørgrav	   select to read.
932*b7579f77SDag-Erling Smørgrav	   then try to nonblocking read the 10 messages
933*b7579f77SDag-Erling Smørgrav	   then, nonblocking read must give EAGAIN
934*b7579f77SDag-Erling Smørgrav	*/
935*b7579f77SDag-Erling Smørgrav
936*b7579f77SDag-Erling Smørgrav	port = 12345 + (time(0)%32);
937*b7579f77SDag-Erling Smørgrav	sfd = socket(PF_INET, SOCK_DGRAM, 0);
938*b7579f77SDag-Erling Smørgrav	if(sfd == -1) {
939*b7579f77SDag-Erling Smørgrav		perror("socket");
940*b7579f77SDag-Erling Smørgrav		return 1;
941*b7579f77SDag-Erling Smørgrav	}
942*b7579f77SDag-Erling Smørgrav	memset(&a, 0, sizeof(a));
943*b7579f77SDag-Erling Smørgrav	a.sin_family = AF_INET;
944*b7579f77SDag-Erling Smørgrav	a.sin_port = htons(port);
945*b7579f77SDag-Erling Smørgrav	a.sin_addr.s_addr = inet_addr("127.0.0.1");
946*b7579f77SDag-Erling Smørgrav	if(bind(sfd, (struct sockaddr*)&a, sizeof(a)) < 0) {
947*b7579f77SDag-Erling Smørgrav		perror("bind");
948*b7579f77SDag-Erling Smørgrav		return 1;
949*b7579f77SDag-Erling Smørgrav	}
950*b7579f77SDag-Erling Smørgrav	if(fcntl(sfd, F_SETFL, O_NONBLOCK) == -1) {
951*b7579f77SDag-Erling Smørgrav		perror("fcntl");
952*b7579f77SDag-Erling Smørgrav		return 1;
953*b7579f77SDag-Erling Smørgrav	}
954*b7579f77SDag-Erling Smørgrav
955*b7579f77SDag-Erling Smørgrav	cfd = socket(PF_INET, SOCK_DGRAM, 0);
956*b7579f77SDag-Erling Smørgrav	if(cfd == -1) {
957*b7579f77SDag-Erling Smørgrav		perror("client socket");
958*b7579f77SDag-Erling Smørgrav		return 1;
959*b7579f77SDag-Erling Smørgrav	}
960*b7579f77SDag-Erling Smørgrav	a.sin_port = 0;
961*b7579f77SDag-Erling Smørgrav	if(bind(cfd, (struct sockaddr*)&a, sizeof(a)) < 0) {
962*b7579f77SDag-Erling Smørgrav		perror("client bind");
963*b7579f77SDag-Erling Smørgrav		return 1;
964*b7579f77SDag-Erling Smørgrav	}
965*b7579f77SDag-Erling Smørgrav	a.sin_port = htons(port);
966*b7579f77SDag-Erling Smørgrav
967*b7579f77SDag-Erling Smørgrav	/* no handler, causes exit in 10 seconds */
968*b7579f77SDag-Erling Smørgrav	alarm(10);
969*b7579f77SDag-Erling Smørgrav
970*b7579f77SDag-Erling Smørgrav	/* send and receive on the socket */
971*b7579f77SDag-Erling Smørgrav	if((p=fork()) == 0) {
972*b7579f77SDag-Erling Smørgrav		for(i=0; i<num; i++) {
973*b7579f77SDag-Erling Smørgrav			if(sendto(cfd, &i, sizeof(i), 0,
974*b7579f77SDag-Erling Smørgrav				(struct sockaddr*)&a, sizeof(a)) < 0) {
975*b7579f77SDag-Erling Smørgrav				perror("sendto");
976*b7579f77SDag-Erling Smørgrav				return 1;
977*b7579f77SDag-Erling Smørgrav			}
978*b7579f77SDag-Erling Smørgrav		}
979*b7579f77SDag-Erling Smørgrav	} else {
980*b7579f77SDag-Erling Smørgrav		/* parent */
981*b7579f77SDag-Erling Smørgrav		fd_set rset;
982*b7579f77SDag-Erling Smørgrav		int x;
983*b7579f77SDag-Erling Smørgrav		if(p == -1) {
984*b7579f77SDag-Erling Smørgrav			perror("fork");
985*b7579f77SDag-Erling Smørgrav			return 1;
986*b7579f77SDag-Erling Smørgrav		}
987*b7579f77SDag-Erling Smørgrav		FD_ZERO(&rset);
988*b7579f77SDag-Erling Smørgrav		FD_SET(sfd, &rset);
989*b7579f77SDag-Erling Smørgrav		if(select(sfd+1, &rset, NULL, NULL, NULL) < 1) {
990*b7579f77SDag-Erling Smørgrav			perror("select");
991*b7579f77SDag-Erling Smørgrav			return 1;
992*b7579f77SDag-Erling Smørgrav		}
993*b7579f77SDag-Erling Smørgrav		i = 0;
994*b7579f77SDag-Erling Smørgrav		while(i < num) {
995*b7579f77SDag-Erling Smørgrav			if(recv(sfd, &x, sizeof(x), 0) != sizeof(x)) {
996*b7579f77SDag-Erling Smørgrav				if(errno == EAGAIN)
997*b7579f77SDag-Erling Smørgrav					continue;
998*b7579f77SDag-Erling Smørgrav				perror("recv");
999*b7579f77SDag-Erling Smørgrav				return 1;
1000*b7579f77SDag-Erling Smørgrav			}
1001*b7579f77SDag-Erling Smørgrav			i++;
1002*b7579f77SDag-Erling Smørgrav		}
1003*b7579f77SDag-Erling Smørgrav		/* now we want to get EAGAIN: nonblocking goodness */
1004*b7579f77SDag-Erling Smørgrav		errno = 0;
1005*b7579f77SDag-Erling Smørgrav		recv(sfd, &x, sizeof(x), 0);
1006*b7579f77SDag-Erling Smørgrav		if(errno != EAGAIN) {
1007*b7579f77SDag-Erling Smørgrav			perror("trying to recv again");
1008*b7579f77SDag-Erling Smørgrav			return 1;
1009*b7579f77SDag-Erling Smørgrav		}
1010*b7579f77SDag-Erling Smørgrav		/* EAGAIN encountered */
1011*b7579f77SDag-Erling Smørgrav	}
1012*b7579f77SDag-Erling Smørgrav
1013*b7579f77SDag-Erling Smørgrav	close(sfd);
1014*b7579f77SDag-Erling Smørgrav	close(cfd);
1015*b7579f77SDag-Erling Smørgrav	return 0;
1016*b7579f77SDag-Erling Smørgrav}
1017*b7579f77SDag-Erling Smørgrav]])], [
1018*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT([yes])
1019*b7579f77SDag-Erling Smørgrav], [
1020*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT([no])
1021*b7579f77SDag-Erling Smørgrav	AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).])
1022*b7579f77SDag-Erling Smørgrav], [
1023*b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT([crosscompile(yes)])
1024*b7579f77SDag-Erling Smørgrav])
1025*b7579f77SDag-Erling Smørgravfi
1026*b7579f77SDag-Erling Smørgrav])dnl End of ACX_CHECK_NONBLOCKING_BROKEN
1027*b7579f77SDag-Erling Smørgrav
1028*b7579f77SDag-Erling Smørgravdnl Check if mkdir has one or two arguments.
1029*b7579f77SDag-Erling Smørgravdnl defines MKDIR_HAS_ONE_ARG
1030*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_MKDIR_ONE_ARG],
1031*b7579f77SDag-Erling Smørgrav[
1032*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([whether mkdir has one arg])
1033*b7579f77SDag-Erling SmørgravAC_TRY_COMPILE([
1034*b7579f77SDag-Erling Smørgrav#include <stdio.h>
1035*b7579f77SDag-Erling Smørgrav#include <unistd.h>
1036*b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
1037*b7579f77SDag-Erling Smørgrav#include <winsock2.h>
1038*b7579f77SDag-Erling Smørgrav#endif
1039*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_STAT_H
1040*b7579f77SDag-Erling Smørgrav#include <sys/stat.h>
1041*b7579f77SDag-Erling Smørgrav#endif
1042*b7579f77SDag-Erling Smørgrav], [
1043*b7579f77SDag-Erling Smørgrav	(void)mkdir("directory");
1044*b7579f77SDag-Erling Smørgrav],
1045*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(yes)
1046*b7579f77SDag-Erling SmørgravAC_DEFINE(MKDIR_HAS_ONE_ARG, 1, [Define if mkdir has one argument.])
1047*b7579f77SDag-Erling Smørgrav,
1048*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(no)
1049*b7579f77SDag-Erling Smørgrav)
1050*b7579f77SDag-Erling Smørgrav])dnl end of ACX_MKDIR_ONE_ARG
1051*b7579f77SDag-Erling Smørgrav
1052*b7579f77SDag-Erling Smørgravdnl Check for ioctlsocket function. works on mingw32 too.
1053*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_FUNC_IOCTLSOCKET],
1054*b7579f77SDag-Erling Smørgrav[
1055*b7579f77SDag-Erling Smørgrav# check ioctlsocket
1056*b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(for ioctlsocket)
1057*b7579f77SDag-Erling SmørgravAC_LINK_IFELSE([AC_LANG_PROGRAM([
1058*b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
1059*b7579f77SDag-Erling Smørgrav#include <winsock2.h>
1060*b7579f77SDag-Erling Smørgrav#endif
1061*b7579f77SDag-Erling Smørgrav], [
1062*b7579f77SDag-Erling Smørgrav	(void)ioctlsocket(0, 0, NULL);
1063*b7579f77SDag-Erling Smørgrav])], [
1064*b7579f77SDag-Erling SmørgravAC_MSG_RESULT(yes)
1065*b7579f77SDag-Erling SmørgravAC_DEFINE(HAVE_IOCTLSOCKET, 1, [if the function 'ioctlsocket' is available])
1066*b7579f77SDag-Erling Smørgrav],[AC_MSG_RESULT(no)])
1067*b7579f77SDag-Erling Smørgrav])dnl end of ACX_FUNC_IOCTLSOCKET
1068*b7579f77SDag-Erling Smørgrav
1069*b7579f77SDag-Erling Smørgravdnl detect malloc and provide malloc compat prototype.
1070*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1071*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_FUNC_MALLOC],
1072*b7579f77SDag-Erling Smørgrav[
1073*b7579f77SDag-Erling Smørgrav	AC_MSG_CHECKING([for GNU libc compatible malloc])
1074*b7579f77SDag-Erling Smørgrav	AC_RUN_IFELSE([AC_LANG_PROGRAM(
1075*b7579f77SDag-Erling Smørgrav[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
1076*b7579f77SDag-Erling Smørgrav#include <stdlib.h>
1077*b7579f77SDag-Erling Smørgrav#else
1078*b7579f77SDag-Erling Smørgravchar *malloc ();
1079*b7579f77SDag-Erling Smørgrav#endif
1080*b7579f77SDag-Erling Smørgrav]], [ if(malloc(0) != 0) return 1;])
1081*b7579f77SDag-Erling Smørgrav],
1082*b7579f77SDag-Erling Smørgrav	[AC_MSG_RESULT([no])
1083*b7579f77SDag-Erling Smørgrav	AC_LIBOBJ(malloc)
1084*b7579f77SDag-Erling Smørgrav	AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if  replacement function should be used.])] ,
1085*b7579f77SDag-Erling Smørgrav	[AC_MSG_RESULT([yes])
1086*b7579f77SDag-Erling Smørgrav	AC_DEFINE([HAVE_MALLOC], 1, [If have GNU libc compatible malloc])],
1087*b7579f77SDag-Erling Smørgrav	[AC_MSG_RESULT([no (crosscompile)])
1088*b7579f77SDag-Erling Smørgrav	AC_LIBOBJ(malloc)
1089*b7579f77SDag-Erling Smørgrav	AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if  replacement function should be used.])] )
1090*b7579f77SDag-Erling Smørgrav])
1091*b7579f77SDag-Erling Smørgrav
1092*b7579f77SDag-Erling Smørgravdnl Define fallback for fseeko and ftello if needed.
1093*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FSEEKO],
1094*b7579f77SDag-Erling Smørgrav[
1095*b7579f77SDag-Erling Smørgrav#ifndef HAVE_FSEEKO
1096*b7579f77SDag-Erling Smørgrav#define fseeko fseek
1097*b7579f77SDag-Erling Smørgrav#define ftello ftell
1098*b7579f77SDag-Erling Smørgrav#endif /* HAVE_FSEEKO */
1099*b7579f77SDag-Erling Smørgrav])
1100*b7579f77SDag-Erling Smørgrav
1101*b7579f77SDag-Erling Smørgravdnl Define RAND_MAX if not defined
1102*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_RAND_MAX],
1103*b7579f77SDag-Erling Smørgrav[
1104*b7579f77SDag-Erling Smørgrav#ifndef RAND_MAX
1105*b7579f77SDag-Erling Smørgrav#define RAND_MAX	2147483647
1106*b7579f77SDag-Erling Smørgrav#endif
1107*b7579f77SDag-Erling Smørgrav])
1108*b7579f77SDag-Erling Smørgrav
1109*b7579f77SDag-Erling Smørgravdnl Define MAXHOSTNAMELEN if not defined
1110*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_MAXHOSTNAMELEN],
1111*b7579f77SDag-Erling Smørgrav[
1112*b7579f77SDag-Erling Smørgrav#ifndef MAXHOSTNAMELEN
1113*b7579f77SDag-Erling Smørgrav#define MAXHOSTNAMELEN 256
1114*b7579f77SDag-Erling Smørgrav#endif
1115*b7579f77SDag-Erling Smørgrav])
1116*b7579f77SDag-Erling Smørgrav
1117*b7579f77SDag-Erling Smørgravdnl Define IPV6_MIN_MTU if not defined
1118*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_IPV6_MIN_MTU],
1119*b7579f77SDag-Erling Smørgrav[
1120*b7579f77SDag-Erling Smørgrav#ifndef IPV6_MIN_MTU
1121*b7579f77SDag-Erling Smørgrav#define IPV6_MIN_MTU 1280
1122*b7579f77SDag-Erling Smørgrav#endif /* IPV6_MIN_MTU */
1123*b7579f77SDag-Erling Smørgrav])
1124*b7579f77SDag-Erling Smørgrav
1125*b7579f77SDag-Erling Smørgravdnl provide snprintf, vsnprintf compat prototype
1126*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1127*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_SNPRINTF],
1128*b7579f77SDag-Erling Smørgrav[
1129*b7579f77SDag-Erling Smørgrav#ifndef HAVE_SNPRINTF
1130*b7579f77SDag-Erling Smørgrav#define snprintf snprintf_$1
1131*b7579f77SDag-Erling Smørgrav#define vsnprintf vsnprintf_$1
1132*b7579f77SDag-Erling Smørgrav#include <stdarg.h>
1133*b7579f77SDag-Erling Smørgravint snprintf (char *str, size_t count, const char *fmt, ...);
1134*b7579f77SDag-Erling Smørgravint vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
1135*b7579f77SDag-Erling Smørgrav#endif /* HAVE_SNPRINTF */
1136*b7579f77SDag-Erling Smørgrav])
1137*b7579f77SDag-Erling Smørgrav
1138*b7579f77SDag-Erling Smørgravdnl provide inet_pton compat prototype.
1139*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1140*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_INET_PTON],
1141*b7579f77SDag-Erling Smørgrav[
1142*b7579f77SDag-Erling Smørgrav#ifndef HAVE_INET_PTON
1143*b7579f77SDag-Erling Smørgrav#define inet_pton inet_pton_$1
1144*b7579f77SDag-Erling Smørgravint inet_pton(int af, const char* src, void* dst);
1145*b7579f77SDag-Erling Smørgrav#endif /* HAVE_INET_PTON */
1146*b7579f77SDag-Erling Smørgrav])
1147*b7579f77SDag-Erling Smørgrav
1148*b7579f77SDag-Erling Smørgravdnl provide inet_ntop compat prototype.
1149*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1150*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_INET_NTOP],
1151*b7579f77SDag-Erling Smørgrav[
1152*b7579f77SDag-Erling Smørgrav#ifndef HAVE_INET_NTOP
1153*b7579f77SDag-Erling Smørgrav#define inet_ntop inet_ntop_$1
1154*b7579f77SDag-Erling Smørgravconst char *inet_ntop(int af, const void *src, char *dst, size_t size);
1155*b7579f77SDag-Erling Smørgrav#endif
1156*b7579f77SDag-Erling Smørgrav])
1157*b7579f77SDag-Erling Smørgrav
1158*b7579f77SDag-Erling Smørgravdnl provide inet_aton compat prototype.
1159*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1160*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_INET_ATON],
1161*b7579f77SDag-Erling Smørgrav[
1162*b7579f77SDag-Erling Smørgrav#ifndef HAVE_INET_ATON
1163*b7579f77SDag-Erling Smørgrav#define inet_aton inet_aton_$1
1164*b7579f77SDag-Erling Smørgravint inet_aton(const char *cp, struct in_addr *addr);
1165*b7579f77SDag-Erling Smørgrav#endif
1166*b7579f77SDag-Erling Smørgrav])
1167*b7579f77SDag-Erling Smørgrav
1168*b7579f77SDag-Erling Smørgravdnl provide memmove compat prototype.
1169*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1170*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_MEMMOVE],
1171*b7579f77SDag-Erling Smørgrav[
1172*b7579f77SDag-Erling Smørgrav#ifndef HAVE_MEMMOVE
1173*b7579f77SDag-Erling Smørgrav#define memmove memmove_$1
1174*b7579f77SDag-Erling Smørgravvoid *memmove(void *dest, const void *src, size_t n);
1175*b7579f77SDag-Erling Smørgrav#endif
1176*b7579f77SDag-Erling Smørgrav])
1177*b7579f77SDag-Erling Smørgrav
1178*b7579f77SDag-Erling Smørgravdnl provide strlcat compat prototype.
1179*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1180*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_STRLCAT],
1181*b7579f77SDag-Erling Smørgrav[
1182*b7579f77SDag-Erling Smørgrav#ifndef HAVE_STRLCAT
1183*b7579f77SDag-Erling Smørgrav#define strlcat strlcat_$1
1184*b7579f77SDag-Erling Smørgravsize_t strlcat(char *dst, const char *src, size_t siz);
1185*b7579f77SDag-Erling Smørgrav#endif
1186*b7579f77SDag-Erling Smørgrav])
1187*b7579f77SDag-Erling Smørgrav
1188*b7579f77SDag-Erling Smørgravdnl provide strlcpy compat prototype.
1189*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1190*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_STRLCPY],
1191*b7579f77SDag-Erling Smørgrav[
1192*b7579f77SDag-Erling Smørgrav#ifndef HAVE_STRLCPY
1193*b7579f77SDag-Erling Smørgrav#define strlcpy strlcpy_$1
1194*b7579f77SDag-Erling Smørgravsize_t strlcpy(char *dst, const char *src, size_t siz);
1195*b7579f77SDag-Erling Smørgrav#endif
1196*b7579f77SDag-Erling Smørgrav])
1197*b7579f77SDag-Erling Smørgrav
1198*b7579f77SDag-Erling Smørgravdnl provide gmtime_r compat prototype.
1199*b7579f77SDag-Erling Smørgravdnl $1: unique name for compat code
1200*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_GMTIME_R],
1201*b7579f77SDag-Erling Smørgrav[
1202*b7579f77SDag-Erling Smørgrav#ifndef HAVE_GMTIME_R
1203*b7579f77SDag-Erling Smørgrav#define gmtime_r gmtime_r_$1
1204*b7579f77SDag-Erling Smørgravstruct tm *gmtime_r(const time_t *timep, struct tm *result);
1205*b7579f77SDag-Erling Smørgrav#endif
1206*b7579f77SDag-Erling Smørgrav])
1207*b7579f77SDag-Erling Smørgrav
1208*b7579f77SDag-Erling Smørgravdnl provide w32 compat definition for sleep
1209*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_SLEEP],
1210*b7579f77SDag-Erling Smørgrav[
1211*b7579f77SDag-Erling Smørgrav#ifndef HAVE_SLEEP
1212*b7579f77SDag-Erling Smørgrav#define sleep(x) Sleep((x)*1000) /* on win32 */
1213*b7579f77SDag-Erling Smørgrav#endif /* HAVE_SLEEP */
1214*b7579f77SDag-Erling Smørgrav])
1215*b7579f77SDag-Erling Smørgrav
1216*b7579f77SDag-Erling Smørgravdnl provide w32 compat definition for usleep
1217*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_USLEEP],
1218*b7579f77SDag-Erling Smørgrav[
1219*b7579f77SDag-Erling Smørgrav#ifndef HAVE_USLEEP
1220*b7579f77SDag-Erling Smørgrav#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */
1221*b7579f77SDag-Erling Smørgrav#endif /* HAVE_USLEEP */
1222*b7579f77SDag-Erling Smørgrav])
1223*b7579f77SDag-Erling Smørgrav
1224*b7579f77SDag-Erling Smørgravdnl provide w32 compat definition for random
1225*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_RANDOM],
1226*b7579f77SDag-Erling Smørgrav[
1227*b7579f77SDag-Erling Smørgrav#ifndef HAVE_RANDOM
1228*b7579f77SDag-Erling Smørgrav#define random rand /* on win32, for tests only (bad random) */
1229*b7579f77SDag-Erling Smørgrav#endif /* HAVE_RANDOM */
1230*b7579f77SDag-Erling Smørgrav])
1231*b7579f77SDag-Erling Smørgrav
1232*b7579f77SDag-Erling Smørgravdnl provide w32 compat definition for srandom
1233*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_SRANDOM],
1234*b7579f77SDag-Erling Smørgrav[
1235*b7579f77SDag-Erling Smørgrav#ifndef HAVE_SRANDOM
1236*b7579f77SDag-Erling Smørgrav#define srandom(x) srand(x) /* on win32, for tests only (bad random) */
1237*b7579f77SDag-Erling Smørgrav#endif /* HAVE_SRANDOM */
1238*b7579f77SDag-Erling Smørgrav])
1239*b7579f77SDag-Erling Smørgrav
1240*b7579f77SDag-Erling Smørgravdnl provide w32 compat definition for FD_SET_T
1241*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_FD_SET_T],
1242*b7579f77SDag-Erling Smørgrav[
1243*b7579f77SDag-Erling Smørgrav/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */
1244*b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
1245*b7579f77SDag-Erling Smørgrav#define FD_SET_T (u_int)
1246*b7579f77SDag-Erling Smørgrav#else
1247*b7579f77SDag-Erling Smørgrav#define FD_SET_T
1248*b7579f77SDag-Erling Smørgrav#endif
1249*b7579f77SDag-Erling Smørgrav])
1250*b7579f77SDag-Erling Smørgrav
1251*b7579f77SDag-Erling Smørgravdnl Remove an extension flag from CFLAGS, define replacement to be made.
1252*b7579f77SDag-Erling Smørgravdnl Used by ACX_STRIP_EXT_FLAGS.
1253*b7579f77SDag-Erling Smørgravdnl $1: the name of the flag, for example -D_GNU_SOURCE.
1254*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CFLAGS_STRIP],
1255*b7579f77SDag-Erling Smørgrav[
1256*b7579f77SDag-Erling Smørgrav  if echo $CFLAGS | grep " $1" >/dev/null 2>&1; then
1257*b7579f77SDag-Erling Smørgrav    CFLAGS="`echo $CFLAGS | sed -e 's/ $1//g'`"
1258*b7579f77SDag-Erling Smørgrav    AC_DEFINE(m4_bpatsubst(OMITTED_$1,[[-=]],_), 1, Put $1 define in config.h)
1259*b7579f77SDag-Erling Smørgrav  fi
1260*b7579f77SDag-Erling Smørgrav])
1261*b7579f77SDag-Erling Smørgrav
1262*b7579f77SDag-Erling Smørgravdnl Remove EXT flags from the CFLAGS and set them to be defined in config.h
1263*b7579f77SDag-Erling Smørgravdnl use with ACX_DETERMINE_EXT_FLAGS.
1264*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_STRIP_EXT_FLAGS],
1265*b7579f77SDag-Erling Smørgrav[
1266*b7579f77SDag-Erling Smørgrav  AC_MSG_NOTICE([Stripping extension flags...])
1267*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_GNU_SOURCE)
1268*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_BSD_SOURCE)
1269*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D__EXTENSIONS__)
1270*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_POSIX_C_SOURCE=200112)
1271*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE=600)
1272*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE_EXTENDED=1)
1273*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_ALL_SOURCE)
1274*b7579f77SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_LARGEFILE_SOURCE=1)
1275*b7579f77SDag-Erling Smørgrav]) dnl End of ACX_STRIP_EXT_FLAGS
1276*b7579f77SDag-Erling Smørgrav
1277*b7579f77SDag-Erling Smørgravdnl define one omitted flag for config.h
1278*b7579f77SDag-Erling Smørgravdnl $1: flag name. -D_GNU_SOURCE
1279*b7579f77SDag-Erling Smørgravdnl $2: replacement define. _GNU_SOURCE
1280*b7579f77SDag-Erling Smørgravdnl $3: define value, 1
1281*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FLAG_OMITTED],
1282*b7579f77SDag-Erling Smørgrav[#if defined($1) && !defined($2)
1283*b7579f77SDag-Erling Smørgrav#define $2 $3
1284*b7579f77SDag-Erling Smørgrav[#]endif ])
1285*b7579f77SDag-Erling Smørgrav
1286*b7579f77SDag-Erling Smørgravdnl Wrapper for AHX_CONFIG_FLAG_OMITTED for -D style flags
1287*b7579f77SDag-Erling Smørgravdnl $1: the -DNAME or -DNAME=value string.
1288*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FLAG_EXT],
1289*b7579f77SDag-Erling Smørgrav[AHX_CONFIG_FLAG_OMITTED(m4_bpatsubst(OMITTED_$1,[[-=]],_),m4_bpatsubst(m4_bpatsubst($1,-D,),=.*$,),m4_if(m4_bregexp($1,=),-1,1,m4_bpatsubst($1,^.*=,)))
1290*b7579f77SDag-Erling Smørgrav])
1291*b7579f77SDag-Erling Smørgrav
1292*b7579f77SDag-Erling Smørgravdnl config.h part to define omitted cflags, use with ACX_STRIP_EXT_FLAGS.
1293*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_EXT_FLAGS],
1294*b7579f77SDag-Erling Smørgrav[AHX_CONFIG_FLAG_EXT(-D_GNU_SOURCE)
1295*b7579f77SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_BSD_SOURCE)
1296*b7579f77SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D__EXTENSIONS__)
1297*b7579f77SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_POSIX_C_SOURCE=200112)
1298*b7579f77SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE=600)
1299*b7579f77SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE_EXTENDED=1)
1300*b7579f77SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_ALL_SOURCE)
1301*b7579f77SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_LARGEFILE_SOURCE=1)
1302*b7579f77SDag-Erling Smørgrav])
1303*b7579f77SDag-Erling Smørgrav
1304*b7579f77SDag-Erling Smørgravdnl check if memcmp is using signed characters and replace if so.
1305*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_MEMCMP_SIGNED],
1306*b7579f77SDag-Erling Smørgrav[AC_MSG_CHECKING([if memcmp compares unsigned])
1307*b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[
1308*b7579f77SDag-Erling Smørgrav#include <stdio.h>
1309*b7579f77SDag-Erling Smørgrav#include <stdlib.h>
1310*b7579f77SDag-Erling Smørgrav#include <string.h>
1311*b7579f77SDag-Erling Smørgravint main(void)
1312*b7579f77SDag-Erling Smørgrav{
1313*b7579f77SDag-Erling Smørgrav	char a = 255, b = 0;
1314*b7579f77SDag-Erling Smørgrav	if(memcmp(&a, &b, 1) < 0)
1315*b7579f77SDag-Erling Smørgrav		return 1;
1316*b7579f77SDag-Erling Smørgrav	return 0;
1317*b7579f77SDag-Erling Smørgrav}
1318*b7579f77SDag-Erling Smørgrav]])], [AC_MSG_RESULT([yes]) ],
1319*b7579f77SDag-Erling Smørgrav[ AC_MSG_RESULT([no])
1320*b7579f77SDag-Erling Smørgrav  AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes])
1321*b7579f77SDag-Erling Smørgrav  AC_LIBOBJ([memcmp])
1322*b7579f77SDag-Erling Smørgrav], [ AC_MSG_RESULT([cross-compile no])
1323*b7579f77SDag-Erling Smørgrav  AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes])
1324*b7579f77SDag-Erling Smørgrav  AC_LIBOBJ([memcmp])
1325*b7579f77SDag-Erling Smørgrav]) ])
1326*b7579f77SDag-Erling Smørgrav
1327*b7579f77SDag-Erling Smørgravdnl define memcmp to its replacement, pass unique id for program as arg
1328*b7579f77SDag-Erling SmørgravAC_DEFUN([AHX_MEMCMP_BROKEN], [
1329*b7579f77SDag-Erling Smørgrav#ifdef MEMCMP_IS_BROKEN
1330*b7579f77SDag-Erling Smørgrav#include "compat/memcmp.h"
1331*b7579f77SDag-Erling Smørgrav#define memcmp memcmp_$1
1332*b7579f77SDag-Erling Smørgravint memcmp(const void *x, const void *y, size_t n);
1333*b7579f77SDag-Erling Smørgrav#endif
1334*b7579f77SDag-Erling Smørgrav])
1335*b7579f77SDag-Erling Smørgrav
1336*b7579f77SDag-Erling Smørgravdnl ACX_CHECK_SS_FAMILY           - check for sockaddr_storage.ss_family
1337*b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_SS_FAMILY],
1338*b7579f77SDag-Erling Smørgrav[AC_CHECK_MEMBER([struct sockaddr_storage.ss_family], [], [
1339*b7579f77SDag-Erling Smørgrav        AC_CHECK_MEMBER([struct sockaddr_storage.__ss_family], [
1340*b7579f77SDag-Erling Smørgrav                AC_DEFINE([ss_family], [__ss_family], [Fallback member name for socket family in struct sockaddr_storage])
1341*b7579f77SDag-Erling Smørgrav        ],, [AC_INCLUDES_DEFAULT
1342*b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
1343*b7579f77SDag-Erling Smørgrav#include <netinet/in.h>
1344*b7579f77SDag-Erling Smørgrav#endif
1345*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
1346*b7579f77SDag-Erling Smørgrav#include <sys/socket.h>
1347*b7579f77SDag-Erling Smørgrav#endif
1348*b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETDB_H
1349*b7579f77SDag-Erling Smørgrav#include <netdb.h>
1350*b7579f77SDag-Erling Smørgrav#endif
1351*b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
1352*b7579f77SDag-Erling Smørgrav#include <arpa/inet.h>
1353*b7579f77SDag-Erling Smørgrav#endif
1354*b7579f77SDag-Erling Smørgrav    ])
1355*b7579f77SDag-Erling Smørgrav], [AC_INCLUDES_DEFAULT
1356*b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
1357*b7579f77SDag-Erling Smørgrav#include <netinet/in.h>
1358*b7579f77SDag-Erling Smørgrav#endif
1359*b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
1360*b7579f77SDag-Erling Smørgrav#include <sys/socket.h>
1361*b7579f77SDag-Erling Smørgrav#endif
1362*b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETDB_H
1363*b7579f77SDag-Erling Smørgrav#include <netdb.h>
1364*b7579f77SDag-Erling Smørgrav#endif
1365*b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
1366*b7579f77SDag-Erling Smørgrav#include <arpa/inet.h>
1367*b7579f77SDag-Erling Smørgrav#endif
1368*b7579f77SDag-Erling Smørgrav]) ])
1369*b7579f77SDag-Erling Smørgrav
1370*b7579f77SDag-Erling Smørgravdnl End of file
1371