xref: /openbsd-src/usr.sbin/nsd/acx_nlnetlabs.m4 (revision bf87c3c07c3ad89262e2b8cae09f17e70aa9e1ee)
162ac0c33Sjakob# acx_nlnetlabs.m4 - common macros for configure checks
2044f85deSsthen# Copyright 2009, Wouter Wijngaards, NLnet Labs.
362ac0c33Sjakob# BSD licensed.
462ac0c33Sjakob#
5*bf87c3c0Sflorian# Version 48
6*bf87c3c0Sflorian# 2024-01-16 fix to add -l:libssp.a to -lcrypto link check.
7*bf87c3c0Sflorian#	     and check for getaddrinfo with only header.
8*bf87c3c0Sflorian# 2024-01-15 fix to add crypt32 to -lcrypto link check when checking for gdi32.
93efee2e1Sflorian# 2023-05-04 fix to remove unused whitespace.
103efee2e1Sflorian# 2023-01-26 fix -Wstrict-prototypes.
11de04d855Ssthen# 2022-09-01 fix checking if nonblocking sockets work on OpenBSD.
12a904e103Sflorian# 2021-08-17 fix sed script in ssldir split handling.
13a904e103Sflorian# 2021-08-17 fix for openssl to detect split version, with ssldir_include
14a904e103Sflorian# 	     and ssldir_lib output directories.
15a904e103Sflorian# 2021-07-30 fix for openssl use of lib64 directory.
16063644e9Sflorian# 2021-06-14 fix nonblocking test to use host instead of target for mingw test.
17063644e9Sflorian# 2021-05-17 fix nonblocking socket test from grep on mingw32 to mingw for
18063644e9Sflorian# 	     64bit compatibility.
198d298c9fSsthen# 2021-03-24 fix ACX_FUNC_DEPRECATED to use CPPFLAGS and CFLAGS.
208d298c9fSsthen# 2021-01-05 fix defun for aclocal
218d298c9fSsthen# 2021-01-05 autoconf 2.70 autoupdate and fixes, no AC_TRY_COMPILE
223b24e79eSsthen# 2020-08-24 Use EVP_sha256 instead of HMAC_Update (for openssl-3.0.0).
23275a8d89Sflorian# 2016-03-21 Check -ldl -pthread for libcrypto for ldns and openssl 1.1.0.
24275a8d89Sflorian# 2016-03-21 Use HMAC_Update instead of HMAC_CTX_Init (for openssl-1.1.0).
25275a8d89Sflorian# 2016-01-04 -D_DEFAULT_SOURCE defined with -D_BSD_SOURCE for Linux glibc 2.20
26275a8d89Sflorian# 2015-12-11 FLTO check for new OSX, clang.
273126abd5Ssthen# 2015-11-18 spelling check fix.
283126abd5Ssthen# 2015-11-05 ACX_SSL_CHECKS no longer adds -ldl needlessly.
29a65f413bSsthen# 2015-08-28 ACX_CHECK_PIE and ACX_CHECK_RELRO_NOW added.
30c939baa4Ssthen# 2015-03-17 AHX_CONFIG_REALLOCARRAY added
31d3fecca9Ssthen# 2013-09-19 FLTO help text improved.
32d3fecca9Ssthen# 2013-07-18 Enable ACX_CHECK_COMPILER_FLAG to test for -Wstrict-prototypes
3312455795Ssthen# 2013-06-25 FLTO has --disable-flto option.
3412455795Ssthen# 2013-05-03 Update W32_SLEEP for newer mingw that links but not defines it.
3512455795Ssthen# 2013-03-22 Fix ACX_RSRC_VERSION for long version numbers.
36aee1b7aaSsthen# 2012-02-09 Fix AHX_MEMCMP_BROKEN with undef in compat/memcmp.h.
37044f85deSsthen# 2012-01-20 Fix COMPILER_FLAGS_UNBOUND for gcc 4.6.2 assigned-not-used-warns.
38044f85deSsthen# 2011-12-05 Fix getaddrinfowithincludes on windows with fedora16 mingw32-gcc.
39044f85deSsthen# 	     Fix ACX_MALLOC for redefined malloc error.
40044f85deSsthen# 	     Fix GETADDRINFO_WITH_INCLUDES to add -lws2_32
41044f85deSsthen# 2011-11-10 Fix FLTO test to not drop a.out in current directory.
42044f85deSsthen# 2011-11-01 Fix FLTO test for llvm on Lion.
43044f85deSsthen# 2011-08-01 Fix nonblock test (broken at v13).
44044f85deSsthen# 2011-08-01 Fix autoconf 2.68 warnings
45044f85deSsthen# 2011-06-23 Add ACX_CHECK_FLTO to check -flto.
46044f85deSsthen# 2010-08-16 Fix FLAG_OMITTED for AS_TR_CPP changes in autoconf-2.66.
47d65f3523Sjakob# 2010-07-02 Add check for ss_family (for minix).
48d65f3523Sjakob# 2010-04-26 Fix to use CPPFLAGS for CHECK_COMPILER_FLAGS.
49a8b34139Sjakob# 2010-03-01 Fix RPATH using CONFIG_COMMANDS to run at the very end.
503126abd5Ssthen# 2010-02-18 WITH_SSL outputs the LIBSSL_LDFLAGS, LIBS, CPPFLAGS separate, -ldl
51a8b34139Sjakob# 2010-02-01 added ACX_CHECK_MEMCMP_SIGNED, AHX_MEMCMP_BROKEN
52a8b34139Sjakob# 2010-01-20 added AHX_COONFIG_STRLCAT
53a8b34139Sjakob# 2009-07-14 U_CHAR detection improved for windows crosscompile.
54a8b34139Sjakob#            added ACX_FUNC_MALLOC
55a8b34139Sjakob#            fixup some #if to #ifdef
56a8b34139Sjakob#            NONBLOCKING test for mingw crosscompile.
57a8b34139Sjakob# 2009-07-13 added ACX_WITH_SSL_OPTIONAL
58a8b34139Sjakob# 2009-07-03 fixup LDFLAGS for empty ssl dir.
5962ac0c33Sjakob#
6062ac0c33Sjakob# Automates some of the checking constructs.  Aims at portability for POSIX.
6162ac0c33Sjakob# Documentation for functions is below.
6262ac0c33Sjakob#
6362ac0c33Sjakob# the following macro's are provided in this file:
6462ac0c33Sjakob# (see below for details on each macro).
6562ac0c33Sjakob#
6662ac0c33Sjakob# ACX_ESCAPE_BACKSLASH		- escape backslashes in var for C-preproc.
6762ac0c33Sjakob# ACX_RSRC_VERSION		- create windows resource version number.
6862ac0c33Sjakob# ACX_CHECK_COMPILER_FLAG	- see if cc supports a flag.
6962ac0c33Sjakob# ACX_CHECK_ERROR_FLAGS		- see which flag is -werror (used below).
7062ac0c33Sjakob# ACX_CHECK_COMPILER_FLAG_NEEDED - see if flags make the code compile cleanly.
7162ac0c33Sjakob# ACX_DEPFLAG			- find cc dependency flags.
7262ac0c33Sjakob# ACX_DETERMINE_EXT_FLAGS_UNBOUND - find out which flags enable BSD and POSIX.
7362ac0c33Sjakob# ACX_CHECK_FORMAT_ATTRIBUTE	- find cc printf format syntax.
7462ac0c33Sjakob# ACX_CHECK_UNUSED_ATTRIBUTE	- find cc variable unused syntax.
75044f85deSsthen# ACX_CHECK_FLTO		- see if cc supports -flto and use it if so.
7662ac0c33Sjakob# ACX_LIBTOOL_C_ONLY		- create libtool for C only, improved.
7762ac0c33Sjakob# ACX_TYPE_U_CHAR		- u_char type.
7862ac0c33Sjakob# ACX_TYPE_RLIM_T		- rlim_t type.
7962ac0c33Sjakob# ACX_TYPE_SOCKLEN_T		- socklen_t type.
8062ac0c33Sjakob# ACX_TYPE_IN_ADDR_T		- in_addr_t type.
8162ac0c33Sjakob# ACX_TYPE_IN_PORT_T		- in_port_t type.
8262ac0c33Sjakob# ACX_ARG_RPATH			- add --disable-rpath option.
8362ac0c33Sjakob# ACX_WITH_SSL			- add --with-ssl option, link -lcrypto.
84a8b34139Sjakob# ACX_WITH_SSL_OPTIONAL		- add --with-ssl option, link -lcrypto,
85a8b34139Sjakob#				  where --without-ssl is also accepted
8662ac0c33Sjakob# ACX_LIB_SSL			- setup to link -lssl.
8762ac0c33Sjakob# ACX_SYS_LARGEFILE		- improved sys_largefile, fseeko, >2G files.
8862ac0c33Sjakob# ACX_CHECK_GETADDRINFO_WITH_INCLUDES - find getaddrinfo, portably.
8962ac0c33Sjakob# ACX_FUNC_DEPRECATED		- see if func is deprecated.
9062ac0c33Sjakob# ACX_CHECK_NONBLOCKING_BROKEN	- see if nonblocking sockets really work.
9162ac0c33Sjakob# ACX_MKDIR_ONE_ARG		- determine mkdir(2) number of arguments.
9262ac0c33Sjakob# ACX_FUNC_IOCTLSOCKET		- find ioctlsocket, portably.
93a8b34139Sjakob# ACX_FUNC_MALLOC		- check malloc, define replacement .
9462ac0c33Sjakob# AHX_CONFIG_FORMAT_ATTRIBUTE	- config.h text for format.
9562ac0c33Sjakob# AHX_CONFIG_UNUSED_ATTRIBUTE	- config.h text for unused.
9662ac0c33Sjakob# AHX_CONFIG_FSEEKO		- define fseeko, ftello fallback.
9762ac0c33Sjakob# AHX_CONFIG_RAND_MAX		- define RAND_MAX if needed.
9862ac0c33Sjakob# AHX_CONFIG_MAXHOSTNAMELEN	- define MAXHOSTNAMELEN if needed.
9962ac0c33Sjakob# AHX_CONFIG_IPV6_MIN_MTU	- define IPV6_MIN_MTU if needed.
10062ac0c33Sjakob# AHX_CONFIG_SNPRINTF		- snprintf compat prototype
10162ac0c33Sjakob# AHX_CONFIG_INET_PTON		- inet_pton compat prototype
10262ac0c33Sjakob# AHX_CONFIG_INET_NTOP		- inet_ntop compat prototype
10362ac0c33Sjakob# AHX_CONFIG_INET_ATON		- inet_aton compat prototype
10462ac0c33Sjakob# AHX_CONFIG_MEMMOVE		- memmove compat prototype
105a8b34139Sjakob# AHX_CONFIG_STRLCAT		- strlcat compat prototype
10662ac0c33Sjakob# AHX_CONFIG_STRLCPY		- strlcpy compat prototype
10762ac0c33Sjakob# AHX_CONFIG_GMTIME_R		- gmtime_r compat prototype
10862ac0c33Sjakob# AHX_CONFIG_W32_SLEEP		- w32 compat for sleep
10962ac0c33Sjakob# AHX_CONFIG_W32_USLEEP		- w32 compat for usleep
11062ac0c33Sjakob# AHX_CONFIG_W32_RANDOM		- w32 compat for random
11162ac0c33Sjakob# AHX_CONFIG_W32_SRANDOM	- w32 compat for srandom
11262ac0c33Sjakob# AHX_CONFIG_W32_FD_SET_T	- w32 detection of FD_SET_T.
11362ac0c33Sjakob# ACX_CFLAGS_STRIP		- strip one flag from CFLAGS
11462ac0c33Sjakob# ACX_STRIP_EXT_FLAGS		- strip extension flags from CFLAGS
11562ac0c33Sjakob# AHX_CONFIG_FLAG_OMITTED	- define omitted flag
11662ac0c33Sjakob# AHX_CONFIG_FLAG_EXT		- define omitted extension flag
11762ac0c33Sjakob# AHX_CONFIG_EXT_FLAGS		- define the stripped extension flags
118a8b34139Sjakob# ACX_CHECK_MEMCMP_SIGNED	- check if memcmp uses signed characters.
119a8b34139Sjakob# AHX_MEMCMP_BROKEN		- replace memcmp func for CHECK_MEMCMP_SIGNED.
120d65f3523Sjakob# ACX_CHECK_SS_FAMILY           - check for sockaddr_storage.ss_family
121a65f413bSsthen# ACX_CHECK_PIE			- add --enable-pie option and check if works
122a65f413bSsthen# ACX_CHECK_RELRO_NOW		- add --enable-relro-now option and check it
12362ac0c33Sjakob#
12462ac0c33Sjakob
12562ac0c33Sjakobdnl Escape backslashes as \\, for C:\ paths, for the C preprocessor defines.
12662ac0c33Sjakobdnl for example, ACX_ESCAPE_BACKSLASH($from_var, to_var)
12762ac0c33Sjakobdnl $1: the text to change.
12862ac0c33Sjakobdnl $2: the result.
12962ac0c33SjakobAC_DEFUN([ACX_ESCAPE_BACKSLASH], [$2="`echo $1 | sed -e 's/\\\\/\\\\\\\\/g'`"
13062ac0c33Sjakob])
13162ac0c33Sjakob
13262ac0c33Sjakobdnl Calculate comma separated windows-resource numbers from package version.
13362ac0c33Sjakobdnl Picks the first three(,0) or four numbers out of the name.
13462ac0c33Sjakobdnl $1: variable for the result
13562ac0c33SjakobAC_DEFUN([ACX_RSRC_VERSION],
13612455795Ssthen[$1=[`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^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]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9]*$/\1,\2,\3,0/' `]
13762ac0c33Sjakob])
13862ac0c33Sjakob
13962ac0c33Sjakobdnl Routine to help check for compiler flags.
14062ac0c33Sjakobdnl Checks if the compiler will accept the flag.
14162ac0c33Sjakobdnl $1: the flag without a - in front, so g to check -g.
14262ac0c33Sjakobdnl $2: executed if yes
14362ac0c33Sjakobdnl $3: executed if no
14462ac0c33SjakobAC_DEFUN([ACX_CHECK_COMPILER_FLAG],
14562ac0c33Sjakob[
14662ac0c33SjakobAC_REQUIRE([AC_PROG_CC])
14762ac0c33SjakobAC_MSG_CHECKING(whether $CC supports -$1)
14862ac0c33Sjakobcache=`echo $1 | sed 'y%.=/+-%___p_%'`
14962ac0c33SjakobAC_CACHE_VAL(cv_prog_cc_flag_$cache,
15062ac0c33Sjakob[
151d3fecca9Ssthenecho 'void f(void){}' >conftest.c
152d65f3523Sjakobif test -z "`$CC $CPPFLAGS $CFLAGS -$1 -c conftest.c 2>&1`"; then
15362ac0c33Sjakobeval "cv_prog_cc_flag_$cache=yes"
15462ac0c33Sjakobelse
15562ac0c33Sjakobeval "cv_prog_cc_flag_$cache=no"
15662ac0c33Sjakobfi
15762ac0c33Sjakobrm -f conftest conftest.o conftest.c
15862ac0c33Sjakob])
15962ac0c33Sjakobif eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
16062ac0c33SjakobAC_MSG_RESULT(yes)
16162ac0c33Sjakob:
16262ac0c33Sjakob$2
16362ac0c33Sjakobelse
16462ac0c33SjakobAC_MSG_RESULT(no)
16562ac0c33Sjakob:
16662ac0c33Sjakob$3
16762ac0c33Sjakobfi
16862ac0c33Sjakob])
16962ac0c33Sjakob
17062ac0c33Sjakobdnl setup flags for ACX_CHECK_COMPILER_FLAG_NEEDED
17162ac0c33Sjakobdnl ERRFLAG: result, compiler flag to turn warnings into errors
17262ac0c33SjakobAC_DEFUN([ACX_CHECK_ERROR_FLAGS],
17362ac0c33Sjakob[
17462ac0c33SjakobACX_CHECK_COMPILER_FLAG(Werror, [ERRFLAG="-Werror"], [ERRFLAG="-errwarn"])
17562ac0c33SjakobACX_CHECK_COMPILER_FLAG(Wall, [ERRFLAG="$ERRFLAG -Wall"],
17662ac0c33Sjakob                        	[ERRFLAG="$ERRFLAG -errfmt"])
17762ac0c33Sjakob])
17862ac0c33Sjakob
17962ac0c33Sjakobdnl Routine to help check for needed compiler flags.
18062ac0c33Sjakobdnl $1: flags for CC
18162ac0c33Sjakobdnl $2: the includes and code
18262ac0c33Sjakobdnl $3: if the given code only compiles with the flag, execute argument 3
18362ac0c33Sjakobdnl $4: if the given code compiles without the flag, execute argument 4
18462ac0c33Sjakobdnl $5: with and without flag the compile fails, execute argument 5.
18562ac0c33SjakobAC_DEFUN([ACX_CHECK_COMPILER_FLAG_NEEDED],
18662ac0c33Sjakob[
18762ac0c33SjakobAC_REQUIRE([AC_PROG_CC])
18862ac0c33SjakobAC_REQUIRE([ACX_CHECK_ERROR_FLAGS])
18962ac0c33SjakobAC_MSG_CHECKING(whether we need $1 as a flag for $CC)
19062ac0c33Sjakobcache=AS_TR_SH($1)
19162ac0c33Sjakobdnl cache=`echo $1 | sed 'y%.=/+- %___p__%'`
19262ac0c33SjakobAC_CACHE_VAL(cv_prog_cc_flag_needed_$cache,
19362ac0c33Sjakob[
19462ac0c33Sjakobecho '$2' > conftest.c
1953efee2e1Sflorianecho 'void f(void){}' >>conftest.c
196d65f3523Sjakobif test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
19762ac0c33Sjakobeval "cv_prog_cc_flag_needed_$cache=no"
19862ac0c33Sjakobelse
19962ac0c33Sjakob[
200d65f3523Sjakobif test -z "`$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`"; then
20162ac0c33Sjakobeval "cv_prog_cc_flag_needed_$cache=yes"
20262ac0c33Sjakobelse
20362ac0c33Sjakobeval "cv_prog_cc_flag_needed_$cache=fail"
20462ac0c33Sjakob#echo 'Test with flag fails too!'
20562ac0c33Sjakob#cat conftest.c
206d65f3523Sjakob#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1"
207d65f3523Sjakob#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`
20862ac0c33Sjakob#exit 1
20962ac0c33Sjakobfi
21062ac0c33Sjakob]
21162ac0c33Sjakobfi
21262ac0c33Sjakobrm -f conftest conftest.c conftest.o
21362ac0c33Sjakob])
21462ac0c33Sjakobif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
21562ac0c33SjakobAC_MSG_RESULT(yes)
21662ac0c33Sjakob:
21762ac0c33Sjakob$3
21862ac0c33Sjakobelse
21962ac0c33Sjakobif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
22062ac0c33SjakobAC_MSG_RESULT(no)
22162ac0c33Sjakob#echo 'Test with flag is no!'
22262ac0c33Sjakob#cat conftest.c
223d65f3523Sjakob#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1"
224d65f3523Sjakob#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`
22562ac0c33Sjakob#exit 1
22662ac0c33Sjakob:
22762ac0c33Sjakob$4
22862ac0c33Sjakobelse
22962ac0c33SjakobAC_MSG_RESULT(failed)
23062ac0c33Sjakob:
23162ac0c33Sjakob$5
23262ac0c33Sjakobfi
23362ac0c33Sjakobfi
23462ac0c33Sjakob])
23562ac0c33Sjakob
23662ac0c33Sjakobdnl Check for CC dependency flag
23762ac0c33Sjakobdnl DEPFLAG: set to flag that generates dependencies.
23862ac0c33SjakobAC_DEFUN([ACX_DEPFLAG],
23962ac0c33Sjakob[
24062ac0c33SjakobAC_MSG_CHECKING([$CC dependency flag])
2413efee2e1Sflorianecho 'void f(void){}' >conftest.c
24262ac0c33Sjakobif test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then
24362ac0c33Sjakob	DEPFLAG="-MM"
24462ac0c33Sjakobelse
24562ac0c33Sjakob  if test "`$CC -xM1 conftest.c 2>&1`" = "conftest.o: conftest.c"; then
24662ac0c33Sjakob	DEPFLAG="-xM1"
24762ac0c33Sjakob  else
24862ac0c33Sjakob	DEPFLAG="-MM"  # dunno do something
24962ac0c33Sjakob  fi
25062ac0c33Sjakobfi
25162ac0c33SjakobAC_MSG_RESULT($DEPFLAG)
25262ac0c33Sjakobrm -f conftest.c
25362ac0c33SjakobAC_SUBST(DEPFLAG)
25462ac0c33Sjakob])
25562ac0c33Sjakob
25662ac0c33Sjakobdnl Determine flags that gives POSIX and BSD functionality.
25762ac0c33Sjakobdnl CFLAGS is modified for the result.
25862ac0c33SjakobAC_DEFUN([ACX_DETERMINE_EXT_FLAGS_UNBOUND],
25962ac0c33Sjakob[
26062ac0c33SjakobACX_CHECK_COMPILER_FLAG(std=c99, [C99FLAG="-std=c99"])
26162ac0c33SjakobACX_CHECK_COMPILER_FLAG(xc99, [C99FLAG="-xc99"])
26262ac0c33Sjakob
26362ac0c33SjakobAC_CHECK_HEADERS([getopt.h time.h],,, [AC_INCLUDES_DEFAULT])
26462ac0c33Sjakob
265275a8d89SflorianACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE,
26662ac0c33Sjakob[
26762ac0c33Sjakob#include "confdefs.h"
26862ac0c33Sjakob#include <stdlib.h>
26962ac0c33Sjakob#include <ctype.h>
27062ac0c33Sjakob#include <sys/time.h>
27162ac0c33Sjakob#ifdef HAVE_TIME_H
27262ac0c33Sjakob#include <time.h>
27362ac0c33Sjakob#endif
27462ac0c33Sjakob#include <unistd.h>
27562ac0c33Sjakob#include <netdb.h>
27662ac0c33Sjakob#ifdef HAVE_GETOPT_H
27762ac0c33Sjakob#include <getopt.h>
27862ac0c33Sjakob#endif
27962ac0c33Sjakob
2803efee2e1Sflorianint test(void) {
28162ac0c33Sjakob	int a;
28262ac0c33Sjakob	char **opts = NULL;
28362ac0c33Sjakob	struct timeval tv;
28462ac0c33Sjakob	char *t;
28562ac0c33Sjakob	time_t time = 0;
28662ac0c33Sjakob	char *buf = NULL;
28762ac0c33Sjakob	const char* str = NULL;
28862ac0c33Sjakob	struct msghdr msg;
28962ac0c33Sjakob	msg.msg_control = 0;
29062ac0c33Sjakob	t = ctime_r(&time, buf);
29162ac0c33Sjakob	tv.tv_usec = 10;
29262ac0c33Sjakob	srandom(32);
29362ac0c33Sjakob	a = getopt(2, opts, "a");
29462ac0c33Sjakob	a = isascii(32);
29562ac0c33Sjakob	str = gai_strerror(0);
296044f85deSsthen	if(str && t && tv.tv_usec && msg.msg_control)
297044f85deSsthen		a = 0;
29862ac0c33Sjakob	return a;
29962ac0c33Sjakob}
300275a8d89Sflorian], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE"])
30162ac0c33Sjakob
302275a8d89SflorianACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE,
30362ac0c33Sjakob[
30462ac0c33Sjakob#include "confdefs.h"
30562ac0c33Sjakob#include <stdlib.h>
30662ac0c33Sjakob#include <ctype.h>
30762ac0c33Sjakob#include <sys/time.h>
30862ac0c33Sjakob#ifdef HAVE_TIME_H
30962ac0c33Sjakob#include <time.h>
31062ac0c33Sjakob#endif
31162ac0c33Sjakob#include <unistd.h>
31262ac0c33Sjakob#include <netdb.h>
31362ac0c33Sjakob#ifdef HAVE_GETOPT_H
31462ac0c33Sjakob#include <getopt.h>
31562ac0c33Sjakob#endif
31662ac0c33Sjakob
3173efee2e1Sflorianint test(void) {
31862ac0c33Sjakob	int a;
31962ac0c33Sjakob	char **opts = NULL;
32062ac0c33Sjakob	struct timeval tv;
32162ac0c33Sjakob	char *t;
32262ac0c33Sjakob	time_t time = 0;
32362ac0c33Sjakob	char *buf = NULL;
32462ac0c33Sjakob	const char* str = NULL;
32562ac0c33Sjakob	struct msghdr msg;
32662ac0c33Sjakob	msg.msg_control = 0;
32762ac0c33Sjakob	t = ctime_r(&time, buf);
32862ac0c33Sjakob	tv.tv_usec = 10;
32962ac0c33Sjakob	srandom(32);
33062ac0c33Sjakob	a = getopt(2, opts, "a");
33162ac0c33Sjakob	a = isascii(32);
33262ac0c33Sjakob	str = gai_strerror(0);
333044f85deSsthen	if(str && t && tv.tv_usec && msg.msg_control)
334044f85deSsthen		a = 0;
33562ac0c33Sjakob	return a;
33662ac0c33Sjakob}
337275a8d89Sflorian], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE"])
33862ac0c33Sjakob
33962ac0c33SjakobACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG,
34062ac0c33Sjakob[
34162ac0c33Sjakob#include <stdbool.h>
34262ac0c33Sjakob#include <ctype.h>
3433efee2e1Sflorianint test(void) {
34462ac0c33Sjakob        int a = 0;
34562ac0c33Sjakob        return a;
34662ac0c33Sjakob}
34762ac0c33Sjakob], [CFLAGS="$CFLAGS $C99FLAG"])
34862ac0c33Sjakob
349275a8d89SflorianACX_CHECK_COMPILER_FLAG_NEEDED(-D_BSD_SOURCE -D_DEFAULT_SOURCE,
35062ac0c33Sjakob[
35162ac0c33Sjakob#include <ctype.h>
35262ac0c33Sjakob
3533efee2e1Sflorianint test(void) {
35462ac0c33Sjakob        int a;
35562ac0c33Sjakob        a = isascii(32);
35662ac0c33Sjakob        return a;
35762ac0c33Sjakob}
358275a8d89Sflorian], [CFLAGS="$CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE"])
35962ac0c33Sjakob
36062ac0c33SjakobACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE,
36162ac0c33Sjakob[
36262ac0c33Sjakob#include <netinet/in.h>
36362ac0c33Sjakob
3643efee2e1Sflorianint test(void) {
36562ac0c33Sjakob        struct in6_pktinfo inf;
36662ac0c33Sjakob	int a = (int)sizeof(inf);
36762ac0c33Sjakob        return a;
36862ac0c33Sjakob}
36962ac0c33Sjakob], [CFLAGS="$CFLAGS -D_GNU_SOURCE"])
37062ac0c33Sjakob
37162ac0c33Sjakob# check again for GNU_SOURCE for setresgid. May fail if setresgid
37262ac0c33Sjakob# is not available at all. -D_FRSRESGID is to make this check unique.
37362ac0c33Sjakob# otherwise we would get the previous cached result.
37462ac0c33SjakobACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE -D_FRSRESGID,
37562ac0c33Sjakob[
37662ac0c33Sjakob#include <unistd.h>
37762ac0c33Sjakob
3783efee2e1Sflorianint test(void) {
37962ac0c33Sjakob	int a = setresgid(0,0,0);
38062ac0c33Sjakob	a = setresuid(0,0,0);
38162ac0c33Sjakob        return a;
38262ac0c33Sjakob}
38362ac0c33Sjakob], [CFLAGS="$CFLAGS -D_GNU_SOURCE"])
38462ac0c33Sjakob
38562ac0c33SjakobACX_CHECK_COMPILER_FLAG_NEEDED(-D_POSIX_C_SOURCE=200112,
38662ac0c33Sjakob[
38762ac0c33Sjakob#include "confdefs.h"
38862ac0c33Sjakob#ifdef HAVE_TIME_H
38962ac0c33Sjakob#include <time.h>
39062ac0c33Sjakob#endif
39162ac0c33Sjakob#include <netdb.h>
39262ac0c33Sjakob
3933efee2e1Sflorianint test(void) {
39462ac0c33Sjakob        int a = 0;
39562ac0c33Sjakob        char *t;
39662ac0c33Sjakob        time_t time = 0;
39762ac0c33Sjakob        char *buf = NULL;
39862ac0c33Sjakob	const char* str = NULL;
39962ac0c33Sjakob        t = ctime_r(&time, buf);
40062ac0c33Sjakob	str = gai_strerror(0);
401044f85deSsthen	if(t && str)
402044f85deSsthen		a = 0;
40362ac0c33Sjakob        return a;
40462ac0c33Sjakob}
40562ac0c33Sjakob], [CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112"])
40662ac0c33Sjakob
40762ac0c33SjakobACX_CHECK_COMPILER_FLAG_NEEDED(-D__EXTENSIONS__,
40862ac0c33Sjakob[
40962ac0c33Sjakob#include "confdefs.h"
41062ac0c33Sjakob#include <stdlib.h>
41162ac0c33Sjakob#include <ctype.h>
41262ac0c33Sjakob#include <sys/time.h>
41362ac0c33Sjakob#ifdef HAVE_TIME_H
41462ac0c33Sjakob#include <time.h>
41562ac0c33Sjakob#endif
41662ac0c33Sjakob#include <unistd.h>
41762ac0c33Sjakob#ifdef HAVE_GETOPT_H
41862ac0c33Sjakob#include <getopt.h>
41962ac0c33Sjakob#endif
42062ac0c33Sjakob
4213efee2e1Sflorianint test(void) {
42262ac0c33Sjakob        int a;
42362ac0c33Sjakob        char **opts = NULL;
42462ac0c33Sjakob        struct timeval tv;
42562ac0c33Sjakob        tv.tv_usec = 10;
42662ac0c33Sjakob        srandom(32);
42762ac0c33Sjakob        a = getopt(2, opts, "a");
42862ac0c33Sjakob        a = isascii(32);
429044f85deSsthen	if(tv.tv_usec)
430044f85deSsthen		a = 0;
43162ac0c33Sjakob        return a;
43262ac0c33Sjakob}
43362ac0c33Sjakob], [CFLAGS="$CFLAGS -D__EXTENSIONS__"])
43462ac0c33Sjakob
43562ac0c33Sjakob])dnl End of ACX_DETERMINE_EXT_FLAGS_UNBOUND
43662ac0c33Sjakob
437044f85deSsthendnl Check if CC supports -flto.
438044f85deSsthendnl in a way that supports clang and suncc (that flag does something else,
439044f85deSsthendnl but fails to link).  It sets it in CFLAGS if it works.
44012455795SsthenAC_DEFUN([ACX_CHECK_FLTO], [
441d3fecca9Ssthen    AC_ARG_ENABLE([flto], AS_HELP_STRING([--disable-flto], [Disable link-time optimization (gcc specific option)]))
44212455795Ssthen    AS_IF([test "x$enable_flto" != "xno"], [
44312455795Ssthen        AC_MSG_CHECKING([if $CC supports -flto])
444044f85deSsthen        BAKCFLAGS="$CFLAGS"
445044f85deSsthen        CFLAGS="$CFLAGS -flto"
446044f85deSsthen        AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
447275a8d89Sflorian            if $CC $CFLAGS -o conftest conftest.c 2>&1 | $GREP -e "warning: no debug symbols in executable" -e "warning: object" >/dev/null; then
448044f85deSsthen                CFLAGS="$BAKCFLAGS"
449044f85deSsthen                AC_MSG_RESULT(no)
450044f85deSsthen            else
451044f85deSsthen                AC_MSG_RESULT(yes)
452044f85deSsthen            fi
453044f85deSsthen            rm -f conftest conftest.c conftest.o
454044f85deSsthen        ], [CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)])
455044f85deSsthen    ])
45612455795Ssthen])
457044f85deSsthen
45862ac0c33Sjakobdnl Check the printf-format attribute (if any)
45962ac0c33Sjakobdnl result in HAVE_ATTR_FORMAT.
46062ac0c33Sjakobdnl Make sure you also include the AHX_CONFIG_FORMAT_ATTRIBUTE.
46162ac0c33SjakobAC_DEFUN([ACX_CHECK_FORMAT_ATTRIBUTE],
46262ac0c33Sjakob[AC_REQUIRE([AC_PROG_CC])
46362ac0c33SjakobAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "format" attribute)
46462ac0c33SjakobAC_CACHE_VAL(ac_cv_c_format_attribute,
46562ac0c33Sjakob[ac_cv_c_format_attribute=no
4668d298c9fSsthenAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
46762ac0c33Sjakobvoid f (char *format, ...) __attribute__ ((format (printf, 1, 2)));
46862ac0c33Sjakobvoid (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2)));
4698d298c9fSsthen]], [[
47062ac0c33Sjakob   f ("%s", "str");
4718d298c9fSsthen]])],[ac_cv_c_format_attribute="yes"],[ac_cv_c_format_attribute="no"])
47262ac0c33Sjakob])
47362ac0c33Sjakob
47462ac0c33SjakobAC_MSG_RESULT($ac_cv_c_format_attribute)
47562ac0c33Sjakobif test $ac_cv_c_format_attribute = yes; then
47662ac0c33Sjakob  AC_DEFINE(HAVE_ATTR_FORMAT, 1, [Whether the C compiler accepts the "format" attribute])
47762ac0c33Sjakobfi
47862ac0c33Sjakob])dnl End of ACX_CHECK_FORMAT_ATTRIBUTE
47962ac0c33Sjakob
48062ac0c33Sjakobdnl Setup ATTR_FORMAT config.h parts.
48162ac0c33Sjakobdnl make sure you call ACX_CHECK_FORMAT_ATTRIBUTE also.
48262ac0c33SjakobAC_DEFUN([AHX_CONFIG_FORMAT_ATTRIBUTE],
48362ac0c33Sjakob[
48462ac0c33Sjakob#ifdef HAVE_ATTR_FORMAT
48562ac0c33Sjakob#  define ATTR_FORMAT(archetype, string_index, first_to_check) \
48662ac0c33Sjakob    __attribute__ ((format (archetype, string_index, first_to_check)))
48762ac0c33Sjakob#else /* !HAVE_ATTR_FORMAT */
48862ac0c33Sjakob#  define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */
48962ac0c33Sjakob#endif /* !HAVE_ATTR_FORMAT */
49062ac0c33Sjakob])
49162ac0c33Sjakob
49262ac0c33Sjakobdnl Check how to mark function arguments as unused.
49362ac0c33Sjakobdnl result in HAVE_ATTR_UNUSED.
49462ac0c33Sjakobdnl Make sure you include AHX_CONFIG_UNUSED_ATTRIBUTE also.
49562ac0c33SjakobAC_DEFUN([ACX_CHECK_UNUSED_ATTRIBUTE],
49662ac0c33Sjakob[AC_REQUIRE([AC_PROG_CC])
49762ac0c33SjakobAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "unused" attribute)
49862ac0c33SjakobAC_CACHE_VAL(ac_cv_c_unused_attribute,
49962ac0c33Sjakob[ac_cv_c_unused_attribute=no
5008d298c9fSsthenAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
50162ac0c33Sjakobvoid f (char *u __attribute__((unused)));
5028d298c9fSsthen]], [[
50362ac0c33Sjakob   f ("x");
5048d298c9fSsthen]])],[ac_cv_c_unused_attribute="yes"],[ac_cv_c_unused_attribute="no"])
50562ac0c33Sjakob])
50662ac0c33Sjakob
50762ac0c33Sjakobdnl Setup ATTR_UNUSED config.h parts.
50862ac0c33Sjakobdnl make sure you call ACX_CHECK_UNUSED_ATTRIBUTE also.
50962ac0c33SjakobAC_DEFUN([AHX_CONFIG_UNUSED_ATTRIBUTE],
51062ac0c33Sjakob[
51162ac0c33Sjakob#if defined(DOXYGEN)
51262ac0c33Sjakob#  define ATTR_UNUSED(x)  x
51362ac0c33Sjakob#elif defined(__cplusplus)
51462ac0c33Sjakob#  define ATTR_UNUSED(x)
51562ac0c33Sjakob#elif defined(HAVE_ATTR_UNUSED)
51662ac0c33Sjakob#  define ATTR_UNUSED(x)  x __attribute__((unused))
51762ac0c33Sjakob#else /* !HAVE_ATTR_UNUSED */
51862ac0c33Sjakob#  define ATTR_UNUSED(x)  x
51962ac0c33Sjakob#endif /* !HAVE_ATTR_UNUSED */
52062ac0c33Sjakob])
52162ac0c33Sjakob
52262ac0c33SjakobAC_MSG_RESULT($ac_cv_c_unused_attribute)
52362ac0c33Sjakobif test $ac_cv_c_unused_attribute = yes; then
52462ac0c33Sjakob  AC_DEFINE(HAVE_ATTR_UNUSED, 1, [Whether the C compiler accepts the "unused" attribute])
52562ac0c33Sjakobfi
52662ac0c33Sjakob])dnl
52762ac0c33Sjakob
52862ac0c33Sjakobdnl Pre-fun for ACX_LIBTOOL_C_ONLY
52962ac0c33SjakobAC_DEFUN([ACX_LIBTOOL_C_PRE], [
53062ac0c33Sjakob# skip these tests, we do not need them.
53162ac0c33SjakobAC_DEFUN([AC_PROG_F77], [:])
53262ac0c33SjakobAC_DEFUN([AC_PROG_FC], [:])
53362ac0c33SjakobAC_DEFUN([AC_PROG_CXX], [:])
53462ac0c33SjakobAC_DEFUN([AC_PROG_CXXCPP], [:])
53562ac0c33SjakobAC_DEFUN([AC_PROG_OBJC], [:])
53662ac0c33SjakobAC_DEFUN([AC_PROG_OBJCCPP], [:])
53762ac0c33SjakobAC_DEFUN([AC_LIBTOOL_CXX], [:])
53862ac0c33SjakobAC_DEFUN([AC_LIBTOOL_F77], [:])
53962ac0c33Sjakob# always use ./libtool unless override from commandline (libtool=mylibtool)
54062ac0c33Sjakobif test -z "$libtool"; then
54162ac0c33Sjakob	libtool="./libtool"
54262ac0c33Sjakobfi
54362ac0c33SjakobAC_SUBST(libtool)
54462ac0c33Sjakob# avoid libtool max commandline length test on systems that fork slowly.
54562ac0c33SjakobAC_CANONICAL_HOST
54662ac0c33Sjakobif echo "$host_os" | grep "sunos4" >/dev/null; then
54762ac0c33Sjakob	lt_cv_sys_max_cmd_len=32750;
54862ac0c33Sjakobfi
54962ac0c33SjakobAC_PATH_TOOL(AR, ar, [false])
55062ac0c33Sjakobif test $AR = false; then
55162ac0c33Sjakob	AC_MSG_ERROR([Cannot find 'ar', please extend PATH to include it])
55262ac0c33Sjakobfi
55362ac0c33Sjakob])
55462ac0c33Sjakob
55562ac0c33Sjakobdnl Perform libtool check, portably, only for C
55662ac0c33SjakobAC_DEFUN([ACX_LIBTOOL_C_ONLY], [
55762ac0c33Sjakobdnl as a requirement so that is gets called before LIBTOOL
55862ac0c33Sjakobdnl because libtools 'AC_REQUIRE' names are right after this one, before
55962ac0c33Sjakobdnl this function contents.
56062ac0c33SjakobAC_REQUIRE([ACX_LIBTOOL_C_PRE])
5618d298c9fSsthenLT_INIT
56262ac0c33Sjakob])
56362ac0c33Sjakob
56462ac0c33Sjakobdnl Detect if u_char type is defined, otherwise define it.
56562ac0c33SjakobAC_DEFUN([ACX_TYPE_U_CHAR],
566a8b34139Sjakob[AC_CHECK_TYPE([u_char], ,
567a8b34139Sjakob	[AC_DEFINE([u_char], [unsigned char], [Define to 'unsigned char if not defined])], [
568a8b34139SjakobAC_INCLUDES_DEFAULT
569a8b34139Sjakob#ifdef HAVE_WINSOCK2_H
570a8b34139Sjakob#  include <winsock2.h>
571a8b34139Sjakob#endif
572a8b34139Sjakob]) ])
57362ac0c33Sjakob
57462ac0c33Sjakobdnl Detect if rlim_t type is defined, otherwise define it.
57562ac0c33SjakobAC_DEFUN([ACX_TYPE_RLIM_T],
57662ac0c33Sjakob[AC_CHECK_TYPE(rlim_t, ,
57762ac0c33Sjakob	[AC_DEFINE([rlim_t], [unsigned long], [Define to 'int' if not defined])], [
57862ac0c33SjakobAC_INCLUDES_DEFAULT
579a8b34139Sjakob#ifdef HAVE_SYS_RESOURCE_H
58062ac0c33Sjakob#  include <sys/resource.h>
58162ac0c33Sjakob#endif
58262ac0c33Sjakob]) ])
58362ac0c33Sjakob
58462ac0c33Sjakobdnl Detect if socklen_t type is defined, otherwise define it.
58562ac0c33SjakobAC_DEFUN([ACX_TYPE_SOCKLEN_T],
58662ac0c33Sjakob[
58762ac0c33SjakobAC_CHECK_TYPE(socklen_t, ,
58862ac0c33Sjakob	[AC_DEFINE([socklen_t], [int], [Define to 'int' if not defined])], [
58962ac0c33SjakobAC_INCLUDES_DEFAULT
590a8b34139Sjakob#ifdef HAVE_SYS_SOCKET_H
59162ac0c33Sjakob#  include <sys/socket.h>
59262ac0c33Sjakob#endif
593a8b34139Sjakob#ifdef HAVE_WS2TCPIP_H
594a8b34139Sjakob#  include <ws2tcpip.h>
595a8b34139Sjakob#endif
59662ac0c33Sjakob]) ])
59762ac0c33Sjakob
598a8b34139Sjakobdnl Detect if in_addr_t type is defined, otherwise define it.
59962ac0c33SjakobAC_DEFUN([ACX_TYPE_IN_ADDR_T],
60062ac0c33Sjakob[ AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [
60162ac0c33SjakobAC_INCLUDES_DEFAULT
602a8b34139Sjakob#ifdef HAVE_SYS_TYPES_H
60362ac0c33Sjakob# include <sys/types.h>
60462ac0c33Sjakob#endif
605a8b34139Sjakob#ifdef HAVE_NETINET_IN_H
60662ac0c33Sjakob# include <netinet/in.h>
60762ac0c33Sjakob#endif
60862ac0c33Sjakob]) ])
60962ac0c33Sjakob
610a8b34139Sjakobdnl Detect if in_port_t type is defined, otherwise define it.
61162ac0c33SjakobAC_DEFUN([ACX_TYPE_IN_PORT_T],
61262ac0c33Sjakob[ AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [
61362ac0c33SjakobAC_INCLUDES_DEFAULT
614a8b34139Sjakob#ifdef HAVE_SYS_TYPES_H
61562ac0c33Sjakob# include <sys/types.h>
61662ac0c33Sjakob#endif
617a8b34139Sjakob#ifdef HAVE_NETINET_IN_H
61862ac0c33Sjakob# include <netinet/in.h>
61962ac0c33Sjakob#endif
62062ac0c33Sjakob]) ])
62162ac0c33Sjakob
62262ac0c33Sjakobdnl Add option to disable the evil rpath. Check whether to use rpath or not.
62362ac0c33Sjakobdnl Adds the --disable-rpath option. Uses trick to edit the ./libtool.
62462ac0c33SjakobAC_DEFUN([ACX_ARG_RPATH],
62562ac0c33Sjakob[
62662ac0c33SjakobAC_ARG_ENABLE(rpath,
62762ac0c33Sjakob        [  --disable-rpath         disable hardcoded rpath (default=enabled)],
62862ac0c33Sjakob	enable_rpath=$enableval, enable_rpath=yes)
62962ac0c33Sjakobif test "x$enable_rpath" = xno; then
630a8b34139Sjakob	dnl AC_MSG_RESULT([Fixing libtool for -rpath problems.])
631a8b34139Sjakob	AC_CONFIG_COMMANDS([disable-rpath], [
63262ac0c33Sjakob	sed < libtool > libtool-2 \
63362ac0c33Sjakob	's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_RPATH_SED__ "/'
63462ac0c33Sjakob	mv libtool-2 libtool
63562ac0c33Sjakob	chmod 755 libtool
63662ac0c33Sjakob	libtool="./libtool"
637a8b34139Sjakob	])
63862ac0c33Sjakobfi
63962ac0c33Sjakob])
64062ac0c33Sjakob
64162ac0c33Sjakobdnl Add a -R to the RUNTIME_PATH.  Only if rpath is enabled and it is
64262ac0c33Sjakobdnl an absolute path.
64362ac0c33Sjakobdnl $1: the pathname to add.
64462ac0c33SjakobAC_DEFUN([ACX_RUNTIME_PATH_ADD], [
64562ac0c33Sjakob	if test "x$enable_rpath" = xyes; then
64662ac0c33Sjakob		if echo "$1" | grep "^/" >/dev/null; then
64762ac0c33Sjakob			RUNTIME_PATH="$RUNTIME_PATH -R$1"
64862ac0c33Sjakob		fi
64962ac0c33Sjakob	fi
65062ac0c33Sjakob])
65162ac0c33Sjakob
652a8b34139Sjakobdnl Common code for both ACX_WITH_SSL and ACX_WITH_SSL_OPTIONAL
653a8b34139Sjakobdnl Takes one argument; the withval checked in those 2 functions
654a8b34139Sjakobdnl sets up the environment for the given openssl path
655a8b34139SjakobAC_DEFUN([ACX_SSL_CHECKS], [
656a8b34139Sjakob    withval=$1
65762ac0c33Sjakob    if test x_$withval != x_no; then
65862ac0c33Sjakob        AC_MSG_CHECKING(for SSL)
659a904e103Sflorian	if test -n "$withval"; then
660a904e103Sflorian		dnl look for openssl install with different version, eg.
661a904e103Sflorian		dnl in /usr/include/openssl11/openssl/ssl.h
662a904e103Sflorian		dnl and /usr/lib64/openssl11/libssl.so
663a904e103Sflorian		dnl with the --with-ssl=/usr/include/openssl11
664a904e103Sflorian		if test ! -f "$withval/include/openssl/ssl.h" -a -f "$withval/openssl/ssl.h"; then
665a904e103Sflorian			ssldir="$withval"
666a904e103Sflorian			found_ssl="yes"
667a904e103Sflorian			withval=""
668a904e103Sflorian			ssldir_include="$ssldir"
669a904e103Sflorian			dnl find the libdir
670a904e103Sflorian			ssldir_lib=`echo $ssldir | sed -e 's/include/lib/'`
671a904e103Sflorian			if test -f "$ssldir_lib/libssl.a" -o -f "$ssldir_lib/libssl.so"; then
672a904e103Sflorian				: # found here
673a904e103Sflorian			else
674a904e103Sflorian				ssldir_lib=`echo $ssldir | sed -e 's/include/lib64/'`
675a904e103Sflorian				if test -f "$ssldir_lib/libssl.a" -o -f "$ssldir_lib/libssl.so"; then
676a904e103Sflorian					: # found here
677a904e103Sflorian				else
678a904e103Sflorian					AC_MSG_ERROR([Could not find openssl lib file, $ssldir_lib/libssl.[so,a], pass like "/usr/local" or "/usr/include/openssl11"])
679a904e103Sflorian				fi
680a904e103Sflorian			fi
681a904e103Sflorian		fi
682a904e103Sflorian	fi
68362ac0c33Sjakob        if test x_$withval = x_ -o x_$withval = x_yes; then
68462ac0c33Sjakob            withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr"
68562ac0c33Sjakob        fi
68662ac0c33Sjakob        for dir in $withval; do
68762ac0c33Sjakob            ssldir="$dir"
68862ac0c33Sjakob            if test -f "$dir/include/openssl/ssl.h"; then
68962ac0c33Sjakob                found_ssl="yes"
690a904e103Sflorian		ssldir_include="$ssldir/include"
691a904e103Sflorian		if test ! -d "$ssldir/lib" -a -d "$ssldir/lib64"; then
692a904e103Sflorian			ssldir_lib="$ssldir/lib64"
693a904e103Sflorian		else
694a904e103Sflorian			ssldir_lib="$ssldir/lib"
69562ac0c33Sjakob		fi
69662ac0c33Sjakob                break;
69762ac0c33Sjakob            fi
69862ac0c33Sjakob        done
69962ac0c33Sjakob        if test x_$found_ssl != x_yes; then
70062ac0c33Sjakob            AC_MSG_ERROR(Cannot find the SSL libraries in $withval)
70162ac0c33Sjakob        else
70262ac0c33Sjakob            AC_MSG_RESULT(found in $ssldir)
703a904e103Sflorian            AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.])
70462ac0c33Sjakob            HAVE_SSL=yes
705a904e103Sflorian	    dnl assume /usr is already in the include, lib and dynlib paths.
706a904e103Sflorian            if test "$ssldir" != "/usr"; then
707a904e103Sflorian		    CPPFLAGS="$CPPFLAGS -I$ssldir_include"
708a904e103Sflorian		    LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir_include"
709a904e103Sflorian		    LDFLAGS="$LDFLAGS -L$ssldir_lib"
710a904e103Sflorian		    LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir_lib"
711a904e103Sflorian	    	    ACX_RUNTIME_PATH_ADD([$ssldir_lib])
71262ac0c33Sjakob	    fi
71362ac0c33Sjakob
7143b24e79eSsthen            AC_MSG_CHECKING([for EVP_sha256 in -lcrypto])
71562ac0c33Sjakob            LIBS="$LIBS -lcrypto"
716a8b34139Sjakob            LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto"
7178d298c9fSsthen            AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7183b24e79eSsthen                int EVP_sha256(void);
7193b24e79eSsthen                (void)EVP_sha256();
7208d298c9fSsthen              ]])],[
72162ac0c33Sjakob                AC_MSG_RESULT(yes)
7223b24e79eSsthen                AC_DEFINE([HAVE_EVP_SHA256], 1,
7233b24e79eSsthen                          [If you have EVP_sha256])
72462ac0c33Sjakob              ],[
72562ac0c33Sjakob                AC_MSG_RESULT(no)
72662ac0c33Sjakob                # check if -lwsock32 or -lgdi32 are needed.
72762ac0c33Sjakob                BAKLIBS="$LIBS"
728a8b34139Sjakob                BAKSSLLIBS="$LIBSSL_LIBS"
7293b24e79eSsthen		LIBS="$LIBS -lgdi32 -lws2_32"
7303b24e79eSsthen		LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32"
73162ac0c33Sjakob                AC_MSG_CHECKING([if -lcrypto needs -lgdi32])
7328d298c9fSsthen                AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7333b24e79eSsthen                    int EVP_sha256(void);
7343b24e79eSsthen                    (void)EVP_sha256();
7358d298c9fSsthen                  ]])],[
7363b24e79eSsthen                    AC_DEFINE([HAVE_EVP_SHA256], 1,
7373b24e79eSsthen                        [If you have EVP_sha256])
73862ac0c33Sjakob                    AC_MSG_RESULT(yes)
73962ac0c33Sjakob                  ],[
74062ac0c33Sjakob                    AC_MSG_RESULT(no)
74162ac0c33Sjakob                    LIBS="$BAKLIBS"
742a8b34139Sjakob                    LIBSSL_LIBS="$BAKSSLLIBS"
743*bf87c3c0Sflorian
744*bf87c3c0Sflorian		    LIBS="$LIBS -lgdi32 -lws2_32 -lcrypt32"
745*bf87c3c0Sflorian		    LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32 -lcrypt32"
746*bf87c3c0Sflorian                    AC_MSG_CHECKING([if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32])
747*bf87c3c0Sflorian		    AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
748*bf87c3c0Sflorian			int EVP_sha256(void);
749*bf87c3c0Sflorian			(void)EVP_sha256();
750*bf87c3c0Sflorian		      ]])],[
751*bf87c3c0Sflorian			AC_DEFINE([HAVE_EVP_SHA256], 1,
752*bf87c3c0Sflorian			    [If you have EVP_sha256])
753*bf87c3c0Sflorian			AC_MSG_RESULT(yes)
754*bf87c3c0Sflorian		      ],[
755*bf87c3c0Sflorian			AC_MSG_RESULT(no)
756*bf87c3c0Sflorian			LIBS="$BAKLIBS"
757*bf87c3c0Sflorian			LIBSSL_LIBS="$BAKSSLLIBS"
758*bf87c3c0Sflorian
759*bf87c3c0Sflorian			LIBS="$LIBS -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a"
760*bf87c3c0Sflorian			LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a"
761*bf87c3c0Sflorian			AC_MSG_CHECKING([if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a])
762*bf87c3c0Sflorian			AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
763*bf87c3c0Sflorian			    int EVP_sha256(void);
764*bf87c3c0Sflorian			    (void)EVP_sha256();
765*bf87c3c0Sflorian			  ]])],[
766*bf87c3c0Sflorian			    AC_DEFINE([HAVE_EVP_SHA256], 1,
767*bf87c3c0Sflorian				[If you have EVP_sha256])
768*bf87c3c0Sflorian			    AC_MSG_RESULT(yes)
769*bf87c3c0Sflorian			  ],[
770*bf87c3c0Sflorian			    AC_MSG_RESULT(no)
771*bf87c3c0Sflorian			    LIBS="$BAKLIBS"
772*bf87c3c0Sflorian			    LIBSSL_LIBS="$BAKSSLLIBS"
773*bf87c3c0Sflorian
77462ac0c33Sjakob			    LIBS="$LIBS -ldl"
775a8b34139Sjakob			    LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
77662ac0c33Sjakob			    AC_MSG_CHECKING([if -lcrypto needs -ldl])
7778d298c9fSsthen			    AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7783b24e79eSsthen				int EVP_sha256(void);
7793b24e79eSsthen				(void)EVP_sha256();
7808d298c9fSsthen			      ]])],[
7813b24e79eSsthen				AC_DEFINE([HAVE_EVP_SHA256], 1,
7823b24e79eSsthen				    [If you have EVP_sha256])
783275a8d89Sflorian				AC_MSG_RESULT(yes)
784275a8d89Sflorian			      ],[
785275a8d89Sflorian				AC_MSG_RESULT(no)
786275a8d89Sflorian				LIBS="$BAKLIBS"
787275a8d89Sflorian				LIBSSL_LIBS="$BAKSSLLIBS"
788275a8d89Sflorian				LIBS="$LIBS -ldl -pthread"
789275a8d89Sflorian				LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
790275a8d89Sflorian				AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread])
7918d298c9fSsthen				AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7923b24e79eSsthen				    int EVP_sha256(void);
7933b24e79eSsthen				    (void)EVP_sha256();
7948d298c9fSsthen				  ]])],[
7953b24e79eSsthen				    AC_DEFINE([HAVE_EVP_SHA256], 1,
7963b24e79eSsthen					[If you have EVP_sha256])
79762ac0c33Sjakob				    AC_MSG_RESULT(yes)
79862ac0c33Sjakob				  ],[
79962ac0c33Sjakob				    AC_MSG_RESULT(no)
80062ac0c33Sjakob				    AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required])
80162ac0c33Sjakob				])
80262ac0c33Sjakob			    ])
80362ac0c33Sjakob			])
804275a8d89Sflorian		    ])
805*bf87c3c0Sflorian                ])
806*bf87c3c0Sflorian            ])
80762ac0c33Sjakob        fi
80862ac0c33Sjakob        AC_SUBST(HAVE_SSL)
80962ac0c33Sjakob        AC_SUBST(RUNTIME_PATH)
81062ac0c33Sjakob    fi
81162ac0c33SjakobAC_CHECK_HEADERS([openssl/ssl.h],,, [AC_INCLUDES_DEFAULT])
81262ac0c33SjakobAC_CHECK_HEADERS([openssl/err.h],,, [AC_INCLUDES_DEFAULT])
81362ac0c33SjakobAC_CHECK_HEADERS([openssl/rand.h],,, [AC_INCLUDES_DEFAULT])
814a8b34139Sjakob])dnl End of ACX_SSL_CHECKS
815a8b34139Sjakob
816a8b34139Sjakobdnl Check for SSL, where SSL is mandatory
817a8b34139Sjakobdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found
818a8b34139Sjakobdnl Setup of CPPFLAGS, CFLAGS.  Adds -lcrypto to LIBS.
819a8b34139Sjakobdnl Checks main header files of SSL.
820a8b34139Sjakobdnl
821a8b34139SjakobAC_DEFUN([ACX_WITH_SSL],
822a8b34139Sjakob[
8238d298c9fSsthenAC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl
824a904e103Sflorian                            /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr or specify like /usr/include/openssl11)]),[
825a8b34139Sjakob        ],[
826a8b34139Sjakob            withval="yes"
827a8b34139Sjakob        ])
828a8b34139Sjakob    if test x_$withval = x_no; then
829a8b34139Sjakob	AC_MSG_ERROR([Need SSL library to do digital signature cryptography])
830a8b34139Sjakob    fi
831a8b34139Sjakob    ACX_SSL_CHECKS($withval)
83262ac0c33Sjakob])dnl End of ACX_WITH_SSL
83362ac0c33Sjakob
834a8b34139Sjakobdnl Check for SSL, where ssl is optional (--without-ssl is allowed)
835a8b34139Sjakobdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found
836a8b34139Sjakobdnl Setup of CPPFLAGS, CFLAGS.  Adds -lcrypto to LIBS.
837a8b34139Sjakobdnl Checks main header files of SSL.
838a8b34139Sjakobdnl
839a8b34139SjakobAC_DEFUN([ACX_WITH_SSL_OPTIONAL],
840a8b34139Sjakob[
8418d298c9fSsthenAC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl
842a904e103Sflorian                                /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr or specify like /usr/include/openssl11)]),[
843a8b34139Sjakob        ],[
844a8b34139Sjakob            withval="yes"
845a8b34139Sjakob        ])
846a8b34139Sjakob    ACX_SSL_CHECKS($withval)
847a8b34139Sjakob])dnl End of ACX_WITH_SSL_OPTIONAL
848a8b34139Sjakob
84962ac0c33Sjakobdnl Setup to use -lssl
85062ac0c33Sjakobdnl To use -lcrypto, use the ACX_WITH_SSL setup (before this one).
85162ac0c33SjakobAC_DEFUN([ACX_LIB_SSL],
85262ac0c33Sjakob[
85362ac0c33Sjakob# check if libssl needs libdl
85462ac0c33SjakobBAKLIBS="$LIBS"
85562ac0c33SjakobLIBS="-lssl $LIBS"
85662ac0c33SjakobAC_MSG_CHECKING([if libssl needs libdl])
85762ac0c33SjakobAC_TRY_LINK_FUNC([SSL_CTX_new], [
85862ac0c33Sjakob	AC_MSG_RESULT([no])
85962ac0c33Sjakob	LIBS="$BAKLIBS"
86062ac0c33Sjakob] , [
86162ac0c33Sjakob	AC_MSG_RESULT([yes])
86262ac0c33Sjakob	LIBS="$BAKLIBS"
86362ac0c33Sjakob	AC_SEARCH_LIBS([dlopen], [dl])
86462ac0c33Sjakob]) ])dnl End of ACX_LIB_SSL
86562ac0c33Sjakob
86662ac0c33Sjakobdnl Setup to use very large files (>2Gb).
86762ac0c33Sjakobdnl setups fseeko and its own
86862ac0c33SjakobAC_DEFUN([ACX_SYS_LARGEFILE],
86962ac0c33Sjakob[
87062ac0c33SjakobAC_SYS_LARGEFILE
87162ac0c33Sjakobdnl try to see if an additional _LARGEFILE_SOURCE 1 is needed to get fseeko
87262ac0c33SjakobACX_CHECK_COMPILER_FLAG_NEEDED(-D_LARGEFILE_SOURCE=1,
87362ac0c33Sjakob[
87462ac0c33Sjakob#include <stdio.h>
8753efee2e1Sflorianint test(void) {
87662ac0c33Sjakob        int a = fseeko(stdin, 0, 0);
87762ac0c33Sjakob        return a;
87862ac0c33Sjakob}
87962ac0c33Sjakob], [CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE=1"])
88062ac0c33Sjakob])
88162ac0c33Sjakob
88262ac0c33Sjakobdnl Check getaddrinfo.
88362ac0c33Sjakobdnl Works on linux, solaris, bsd and windows(links winsock).
88462ac0c33Sjakobdnl defines HAVE_GETADDRINFO, USE_WINSOCK.
88562ac0c33SjakobAC_DEFUN([ACX_CHECK_GETADDRINFO_WITH_INCLUDES],
88662ac0c33Sjakob[AC_REQUIRE([AC_PROG_CC])
88762ac0c33SjakobAC_MSG_CHECKING(for getaddrinfo)
88862ac0c33Sjakobac_cv_func_getaddrinfo=no
88962ac0c33SjakobAC_LINK_IFELSE(
890044f85deSsthen[AC_LANG_SOURCE([[
89162ac0c33Sjakob#ifdef __cplusplus
89262ac0c33Sjakobextern "C"
89362ac0c33Sjakob{
89462ac0c33Sjakob#endif
89562ac0c33Sjakobchar* getaddrinfo();
89662ac0c33Sjakobchar* (*f) () = getaddrinfo;
89762ac0c33Sjakob#ifdef __cplusplus
89862ac0c33Sjakob}
89962ac0c33Sjakob#endif
9003efee2e1Sflorianint main(void) {
90162ac0c33Sjakob        ;
90262ac0c33Sjakob        return 0;
90362ac0c33Sjakob}
904044f85deSsthen]])],
90562ac0c33Sjakobdnl this case on linux, solaris, bsd
906044f85deSsthen[ac_cv_func_getaddrinfo="yes"
907044f85deSsthendnl see if on windows
908044f85deSsthenif test "$ac_cv_header_windows_h" = "yes"; then
909044f85deSsthen	AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
910044f85deSsthen	USE_WINSOCK="1"
911*bf87c3c0Sflorian	if echo "$LIBS" | grep 'lws2_32' >/dev/null; then
9123b24e79eSsthen		:
9133b24e79eSsthen	else
914044f85deSsthen		LIBS="$LIBS -lws2_32"
915044f85deSsthen	fi
9163b24e79eSsthenfi
917044f85deSsthen],
91862ac0c33Sjakobdnl no quick getaddrinfo, try mingw32 and winsock2 library.
919*bf87c3c0Sfloriandnl perhaps getaddrinfo needs only the include
920*bf87c3c0SflorianAC_LINK_IFELSE(
921*bf87c3c0Sflorian[AC_LANG_PROGRAM(
922*bf87c3c0Sflorian[
923*bf87c3c0Sflorian#ifdef HAVE_WS2TCPIP_H
924*bf87c3c0Sflorian#include <ws2tcpip.h>
925*bf87c3c0Sflorian#endif
926*bf87c3c0Sflorian],
927*bf87c3c0Sflorian[
928*bf87c3c0Sflorian        (void)getaddrinfo(NULL, NULL, NULL, NULL);
929*bf87c3c0Sflorian]
930*bf87c3c0Sflorian)],
931*bf87c3c0Sflorian[
932*bf87c3c0Sflorianac_cv_func_getaddrinfo="yes"
933*bf87c3c0SflorianAC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
934*bf87c3c0SflorianUSE_WINSOCK="1"
935*bf87c3c0Sflorian],
936*bf87c3c0Sflorian
93762ac0c33SjakobORIGLIBS="$LIBS"
93862ac0c33SjakobLIBS="$LIBS -lws2_32"
93962ac0c33SjakobAC_LINK_IFELSE(
940044f85deSsthen[AC_LANG_PROGRAM(
94162ac0c33Sjakob[
94262ac0c33Sjakob#ifdef HAVE_WS2TCPIP_H
94362ac0c33Sjakob#include <ws2tcpip.h>
94462ac0c33Sjakob#endif
94562ac0c33Sjakob],
94662ac0c33Sjakob[
94762ac0c33Sjakob        (void)getaddrinfo(NULL, NULL, NULL, NULL);
94862ac0c33Sjakob]
949044f85deSsthen)],
95062ac0c33Sjakob[
95162ac0c33Sjakobac_cv_func_getaddrinfo="yes"
95262ac0c33Sjakobdnl already: LIBS="$LIBS -lws2_32"
95362ac0c33SjakobAC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
95462ac0c33SjakobUSE_WINSOCK="1"
95562ac0c33Sjakob],
95662ac0c33Sjakob[
95762ac0c33Sjakobac_cv_func_getaddrinfo="no"
95862ac0c33SjakobLIBS="$ORIGLIBS"
95962ac0c33Sjakob])
96062ac0c33Sjakob)
961*bf87c3c0Sflorian)
96262ac0c33Sjakob
96362ac0c33SjakobAC_MSG_RESULT($ac_cv_func_getaddrinfo)
96462ac0c33Sjakobif test $ac_cv_func_getaddrinfo = yes; then
96562ac0c33Sjakob  AC_DEFINE(HAVE_GETADDRINFO, 1, [Whether getaddrinfo is available])
96662ac0c33Sjakobfi
96762ac0c33Sjakob])dnl Endof AC_CHECK_GETADDRINFO_WITH_INCLUDES
96862ac0c33Sjakob
96962ac0c33Sjakobdnl check if a function is deprecated. defines DEPRECATED_func in config.h.
97062ac0c33Sjakobdnl $1: function name
97162ac0c33Sjakobdnl $2: C-statement that calls the function.
97262ac0c33Sjakobdnl $3: includes for the program.
97362ac0c33Sjakobdnl $4: executes if yes
97462ac0c33Sjakobdnl $5: executes if no
97562ac0c33SjakobAC_DEFUN([ACX_FUNC_DEPRECATED],
97662ac0c33Sjakob[
97762ac0c33SjakobAC_REQUIRE([AC_PROG_CC])
97862ac0c33SjakobAC_MSG_CHECKING(if $1 is deprecated)
97962ac0c33Sjakobcache=`echo $1 | sed 'y%.=/+-%___p_%'`
98062ac0c33SjakobAC_CACHE_VAL(cv_cc_deprecated_$cache,
98162ac0c33Sjakob[
98262ac0c33Sjakobecho '$3' >conftest.c
9833efee2e1Sflorianecho 'void f(void){ $2 }' >>conftest.c
9848d298c9fSsthenif test -z "`$CC $CPPFLAGS $CFLAGS -c conftest.c 2>&1 | grep -e deprecated -e unavailable`"; then
98562ac0c33Sjakobeval "cv_cc_deprecated_$cache=no"
98662ac0c33Sjakobelse
98762ac0c33Sjakobeval "cv_cc_deprecated_$cache=yes"
98862ac0c33Sjakobfi
98962ac0c33Sjakobrm -f conftest conftest.o conftest.c
99062ac0c33Sjakob])
99162ac0c33Sjakobif eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then
99262ac0c33SjakobAC_MSG_RESULT(yes)
99362ac0c33SjakobAC_DEFINE_UNQUOTED(AS_TR_CPP([DEPRECATED_$1]), 1, [Whether $1 is deprecated])
99462ac0c33Sjakob:
99562ac0c33Sjakob$4
99662ac0c33Sjakobelse
99762ac0c33SjakobAC_MSG_RESULT(no)
99862ac0c33Sjakob:
99962ac0c33Sjakob$5
100062ac0c33Sjakobfi
100162ac0c33Sjakob])dnl end of ACX_FUNC_DEPRECATED
100262ac0c33Sjakob
100362ac0c33Sjakobdnl check if select and nonblocking sockets actually work.
100462ac0c33Sjakobdnl Needs fork(2) and select(2).
100562ac0c33Sjakobdnl defines NONBLOCKING_IS_BROKEN, and if that is true multiple reads from
100662ac0c33Sjakobdnl a nonblocking socket do not work, a new call to select is necessary.
100762ac0c33SjakobAC_DEFUN([ACX_CHECK_NONBLOCKING_BROKEN],
100862ac0c33Sjakob[
100962ac0c33SjakobAC_MSG_CHECKING([if nonblocking sockets work])
1010063644e9Sflorianif echo $host | grep mingw >/dev/null; then
1011a8b34139Sjakob	AC_MSG_RESULT([no (windows)])
1012a8b34139Sjakob	AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).])
1013a8b34139Sjakobelse
1014044f85deSsthenAC_RUN_IFELSE([
1015044f85deSsthenAC_LANG_SOURCE([[
101662ac0c33Sjakob#include <stdio.h>
101762ac0c33Sjakob#include <string.h>
101862ac0c33Sjakob#include <stdlib.h>
101962ac0c33Sjakob#include <fcntl.h>
102062ac0c33Sjakob#include <errno.h>
102162ac0c33Sjakob#ifdef HAVE_SYS_TYPES_H
102262ac0c33Sjakob#include <sys/types.h>
102362ac0c33Sjakob#endif
1024de04d855Ssthen#ifdef HAVE_SYS_SELECT_H
1025de04d855Ssthen#include <sys/select.h>
1026de04d855Ssthen#endif
102762ac0c33Sjakob#ifdef HAVE_SYS_SOCKET_H
102862ac0c33Sjakob#include <sys/socket.h>
102962ac0c33Sjakob#endif
103062ac0c33Sjakob#ifdef HAVE_NETINET_IN_H
103162ac0c33Sjakob#include <netinet/in.h>
103262ac0c33Sjakob#endif
103362ac0c33Sjakob#ifdef HAVE_ARPA_INET_H
103462ac0c33Sjakob#include <arpa/inet.h>
103562ac0c33Sjakob#endif
103662ac0c33Sjakob#ifdef HAVE_UNISTD_H
103762ac0c33Sjakob#include <unistd.h>
103862ac0c33Sjakob#endif
103962ac0c33Sjakob#ifdef HAVE_TIME_H
104062ac0c33Sjakob#include <time.h>
104162ac0c33Sjakob#endif
1042044f85deSsthen
1043044f85deSsthenint main(void)
1044044f85deSsthen{
104562ac0c33Sjakob	int port;
104662ac0c33Sjakob	int sfd, cfd;
104762ac0c33Sjakob	int num = 10;
104862ac0c33Sjakob	int i, p;
104962ac0c33Sjakob	struct sockaddr_in a;
105062ac0c33Sjakob	/* test if select and nonblocking reads work well together */
105162ac0c33Sjakob	/* open port.
105262ac0c33Sjakob	   fork child to send 10 messages.
105362ac0c33Sjakob	   select to read.
105462ac0c33Sjakob	   then try to nonblocking read the 10 messages
105562ac0c33Sjakob	   then, nonblocking read must give EAGAIN
105662ac0c33Sjakob	*/
105762ac0c33Sjakob
105862ac0c33Sjakob	port = 12345 + (time(0)%32);
105962ac0c33Sjakob	sfd = socket(PF_INET, SOCK_DGRAM, 0);
106062ac0c33Sjakob	if(sfd == -1) {
106162ac0c33Sjakob		perror("socket");
106262ac0c33Sjakob		return 1;
106362ac0c33Sjakob	}
106462ac0c33Sjakob	memset(&a, 0, sizeof(a));
106562ac0c33Sjakob	a.sin_family = AF_INET;
106662ac0c33Sjakob	a.sin_port = htons(port);
106762ac0c33Sjakob	a.sin_addr.s_addr = inet_addr("127.0.0.1");
106862ac0c33Sjakob	if(bind(sfd, (struct sockaddr*)&a, sizeof(a)) < 0) {
106962ac0c33Sjakob		perror("bind");
107062ac0c33Sjakob		return 1;
107162ac0c33Sjakob	}
107262ac0c33Sjakob	if(fcntl(sfd, F_SETFL, O_NONBLOCK) == -1) {
107362ac0c33Sjakob		perror("fcntl");
107462ac0c33Sjakob		return 1;
107562ac0c33Sjakob	}
107662ac0c33Sjakob
107762ac0c33Sjakob	cfd = socket(PF_INET, SOCK_DGRAM, 0);
107862ac0c33Sjakob	if(cfd == -1) {
107962ac0c33Sjakob		perror("client socket");
108062ac0c33Sjakob		return 1;
108162ac0c33Sjakob	}
108262ac0c33Sjakob	a.sin_port = 0;
108362ac0c33Sjakob	if(bind(cfd, (struct sockaddr*)&a, sizeof(a)) < 0) {
108462ac0c33Sjakob		perror("client bind");
108562ac0c33Sjakob		return 1;
108662ac0c33Sjakob	}
108762ac0c33Sjakob	a.sin_port = htons(port);
108862ac0c33Sjakob
108962ac0c33Sjakob	/* no handler, causes exit in 10 seconds */
109062ac0c33Sjakob	alarm(10);
109162ac0c33Sjakob
109262ac0c33Sjakob	/* send and receive on the socket */
109362ac0c33Sjakob	if((p=fork()) == 0) {
109462ac0c33Sjakob		for(i=0; i<num; i++) {
109562ac0c33Sjakob			if(sendto(cfd, &i, sizeof(i), 0,
109662ac0c33Sjakob				(struct sockaddr*)&a, sizeof(a)) < 0) {
109762ac0c33Sjakob				perror("sendto");
109862ac0c33Sjakob				return 1;
109962ac0c33Sjakob			}
110062ac0c33Sjakob		}
110162ac0c33Sjakob	} else {
110262ac0c33Sjakob		/* parent */
110362ac0c33Sjakob		fd_set rset;
110462ac0c33Sjakob		int x;
110562ac0c33Sjakob		if(p == -1) {
110662ac0c33Sjakob			perror("fork");
110762ac0c33Sjakob			return 1;
110862ac0c33Sjakob		}
110962ac0c33Sjakob		FD_ZERO(&rset);
111062ac0c33Sjakob		FD_SET(sfd, &rset);
111162ac0c33Sjakob		if(select(sfd+1, &rset, NULL, NULL, NULL) < 1) {
111262ac0c33Sjakob			perror("select");
111362ac0c33Sjakob			return 1;
111462ac0c33Sjakob		}
111562ac0c33Sjakob		i = 0;
111662ac0c33Sjakob		while(i < num) {
111762ac0c33Sjakob			if(recv(sfd, &x, sizeof(x), 0) != sizeof(x)) {
111862ac0c33Sjakob				if(errno == EAGAIN)
111962ac0c33Sjakob					continue;
112062ac0c33Sjakob				perror("recv");
112162ac0c33Sjakob				return 1;
112262ac0c33Sjakob			}
112362ac0c33Sjakob			i++;
112462ac0c33Sjakob		}
112562ac0c33Sjakob		/* now we want to get EAGAIN: nonblocking goodness */
112662ac0c33Sjakob		errno = 0;
112762ac0c33Sjakob		recv(sfd, &x, sizeof(x), 0);
112862ac0c33Sjakob		if(errno != EAGAIN) {
112962ac0c33Sjakob			perror("trying to recv again");
113062ac0c33Sjakob			return 1;
113162ac0c33Sjakob		}
113262ac0c33Sjakob		/* EAGAIN encountered */
113362ac0c33Sjakob	}
113462ac0c33Sjakob
113562ac0c33Sjakob	close(sfd);
113662ac0c33Sjakob	close(cfd);
1137044f85deSsthen	return 0;
1138044f85deSsthen}
1139044f85deSsthen]])], [
114062ac0c33Sjakob	AC_MSG_RESULT([yes])
114162ac0c33Sjakob], [
114262ac0c33Sjakob	AC_MSG_RESULT([no])
114362ac0c33Sjakob	AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).])
114462ac0c33Sjakob], [
114562ac0c33Sjakob	AC_MSG_RESULT([crosscompile(yes)])
114662ac0c33Sjakob])
1147a8b34139Sjakobfi
114862ac0c33Sjakob])dnl End of ACX_CHECK_NONBLOCKING_BROKEN
114962ac0c33Sjakob
115062ac0c33Sjakobdnl Check if mkdir has one or two arguments.
115162ac0c33Sjakobdnl defines MKDIR_HAS_ONE_ARG
115262ac0c33SjakobAC_DEFUN([ACX_MKDIR_ONE_ARG],
115362ac0c33Sjakob[
115462ac0c33SjakobAC_MSG_CHECKING([whether mkdir has one arg])
11558d298c9fSsthenAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
115662ac0c33Sjakob#include <stdio.h>
115762ac0c33Sjakob#include <unistd.h>
115862ac0c33Sjakob#ifdef HAVE_WINSOCK2_H
115962ac0c33Sjakob#include <winsock2.h>
116062ac0c33Sjakob#endif
116162ac0c33Sjakob#ifdef HAVE_SYS_STAT_H
116262ac0c33Sjakob#include <sys/stat.h>
116362ac0c33Sjakob#endif
11648d298c9fSsthen]], [[
116562ac0c33Sjakob	(void)mkdir("directory");
11668d298c9fSsthen]])],[AC_MSG_RESULT(yes)
116762ac0c33SjakobAC_DEFINE(MKDIR_HAS_ONE_ARG, 1, [Define if mkdir has one argument.])
11688d298c9fSsthen],[AC_MSG_RESULT(no)
11698d298c9fSsthen])
117062ac0c33Sjakob])dnl end of ACX_MKDIR_ONE_ARG
117162ac0c33Sjakob
117262ac0c33Sjakobdnl Check for ioctlsocket function. works on mingw32 too.
117362ac0c33SjakobAC_DEFUN([ACX_FUNC_IOCTLSOCKET],
117462ac0c33Sjakob[
117562ac0c33Sjakob# check ioctlsocket
117662ac0c33SjakobAC_MSG_CHECKING(for ioctlsocket)
1177044f85deSsthenAC_LINK_IFELSE([AC_LANG_PROGRAM([
117862ac0c33Sjakob#ifdef HAVE_WINSOCK2_H
117962ac0c33Sjakob#include <winsock2.h>
118062ac0c33Sjakob#endif
118162ac0c33Sjakob], [
118262ac0c33Sjakob	(void)ioctlsocket(0, 0, NULL);
1183044f85deSsthen])], [
118462ac0c33SjakobAC_MSG_RESULT(yes)
118562ac0c33SjakobAC_DEFINE(HAVE_IOCTLSOCKET, 1, [if the function 'ioctlsocket' is available])
118662ac0c33Sjakob],[AC_MSG_RESULT(no)])
118762ac0c33Sjakob])dnl end of ACX_FUNC_IOCTLSOCKET
118862ac0c33Sjakob
1189a8b34139Sjakobdnl detect malloc and provide malloc compat prototype.
1190a8b34139Sjakobdnl $1: unique name for compat code
1191a8b34139SjakobAC_DEFUN([ACX_FUNC_MALLOC],
1192a8b34139Sjakob[
1193044f85deSsthen	AC_MSG_CHECKING([for GNU libc compatible malloc])
1194044f85deSsthen	AC_RUN_IFELSE([AC_LANG_PROGRAM(
1195044f85deSsthen[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
1196044f85deSsthen#include <stdlib.h>
1197044f85deSsthen#else
1198044f85deSsthenchar *malloc ();
1199044f85deSsthen#endif
1200044f85deSsthen]], [ if(malloc(0) != 0) return 1;])
1201044f85deSsthen],
1202044f85deSsthen	[AC_MSG_RESULT([no])
1203044f85deSsthen	AC_LIBOBJ(malloc)
1204044f85deSsthen	AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if  replacement function should be used.])] ,
1205044f85deSsthen	[AC_MSG_RESULT([yes])
1206044f85deSsthen	AC_DEFINE([HAVE_MALLOC], 1, [If have GNU libc compatible malloc])],
1207044f85deSsthen	[AC_MSG_RESULT([no (crosscompile)])
1208044f85deSsthen	AC_LIBOBJ(malloc)
1209044f85deSsthen	AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if  replacement function should be used.])] )
1210a8b34139Sjakob])
1211a8b34139Sjakob
121262ac0c33Sjakobdnl Define fallback for fseeko and ftello if needed.
121362ac0c33SjakobAC_DEFUN([AHX_CONFIG_FSEEKO],
121462ac0c33Sjakob[
121562ac0c33Sjakob#ifndef HAVE_FSEEKO
121662ac0c33Sjakob#define fseeko fseek
121762ac0c33Sjakob#define ftello ftell
121862ac0c33Sjakob#endif /* HAVE_FSEEKO */
121962ac0c33Sjakob])
122062ac0c33Sjakob
122162ac0c33Sjakobdnl Define RAND_MAX if not defined
122262ac0c33SjakobAC_DEFUN([AHX_CONFIG_RAND_MAX],
122362ac0c33Sjakob[
122462ac0c33Sjakob#ifndef RAND_MAX
122562ac0c33Sjakob#define RAND_MAX	2147483647
122662ac0c33Sjakob#endif
122762ac0c33Sjakob])
122862ac0c33Sjakob
122962ac0c33Sjakobdnl Define MAXHOSTNAMELEN if not defined
123062ac0c33SjakobAC_DEFUN([AHX_CONFIG_MAXHOSTNAMELEN],
123162ac0c33Sjakob[
123262ac0c33Sjakob#ifndef MAXHOSTNAMELEN
123362ac0c33Sjakob#define MAXHOSTNAMELEN 256
123462ac0c33Sjakob#endif
123562ac0c33Sjakob])
123662ac0c33Sjakob
123762ac0c33Sjakobdnl Define IPV6_MIN_MTU if not defined
123862ac0c33SjakobAC_DEFUN([AHX_CONFIG_IPV6_MIN_MTU],
123962ac0c33Sjakob[
124062ac0c33Sjakob#ifndef IPV6_MIN_MTU
124162ac0c33Sjakob#define IPV6_MIN_MTU 1280
124262ac0c33Sjakob#endif /* IPV6_MIN_MTU */
124362ac0c33Sjakob])
124462ac0c33Sjakob
124562ac0c33Sjakobdnl provide snprintf, vsnprintf compat prototype
124662ac0c33Sjakobdnl $1: unique name for compat code
124762ac0c33SjakobAC_DEFUN([AHX_CONFIG_SNPRINTF],
124862ac0c33Sjakob[
124962ac0c33Sjakob#ifndef HAVE_SNPRINTF
125062ac0c33Sjakob#define snprintf snprintf_$1
125162ac0c33Sjakob#define vsnprintf vsnprintf_$1
125262ac0c33Sjakob#include <stdarg.h>
125362ac0c33Sjakobint snprintf (char *str, size_t count, const char *fmt, ...);
125462ac0c33Sjakobint vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
125562ac0c33Sjakob#endif /* HAVE_SNPRINTF */
125662ac0c33Sjakob])
125762ac0c33Sjakob
125862ac0c33Sjakobdnl provide inet_pton compat prototype.
125962ac0c33Sjakobdnl $1: unique name for compat code
126062ac0c33SjakobAC_DEFUN([AHX_CONFIG_INET_PTON],
126162ac0c33Sjakob[
126262ac0c33Sjakob#ifndef HAVE_INET_PTON
126362ac0c33Sjakob#define inet_pton inet_pton_$1
126462ac0c33Sjakobint inet_pton(int af, const char* src, void* dst);
126562ac0c33Sjakob#endif /* HAVE_INET_PTON */
126662ac0c33Sjakob])
126762ac0c33Sjakob
126862ac0c33Sjakobdnl provide inet_ntop compat prototype.
126962ac0c33Sjakobdnl $1: unique name for compat code
127062ac0c33SjakobAC_DEFUN([AHX_CONFIG_INET_NTOP],
127162ac0c33Sjakob[
127262ac0c33Sjakob#ifndef HAVE_INET_NTOP
127362ac0c33Sjakob#define inet_ntop inet_ntop_$1
127462ac0c33Sjakobconst char *inet_ntop(int af, const void *src, char *dst, size_t size);
127562ac0c33Sjakob#endif
127662ac0c33Sjakob])
127762ac0c33Sjakob
127862ac0c33Sjakobdnl provide inet_aton compat prototype.
127962ac0c33Sjakobdnl $1: unique name for compat code
128062ac0c33SjakobAC_DEFUN([AHX_CONFIG_INET_ATON],
128162ac0c33Sjakob[
128262ac0c33Sjakob#ifndef HAVE_INET_ATON
128362ac0c33Sjakob#define inet_aton inet_aton_$1
128462ac0c33Sjakobint inet_aton(const char *cp, struct in_addr *addr);
128562ac0c33Sjakob#endif
128662ac0c33Sjakob])
128762ac0c33Sjakob
128862ac0c33Sjakobdnl provide memmove compat prototype.
128962ac0c33Sjakobdnl $1: unique name for compat code
129062ac0c33SjakobAC_DEFUN([AHX_CONFIG_MEMMOVE],
129162ac0c33Sjakob[
129262ac0c33Sjakob#ifndef HAVE_MEMMOVE
129362ac0c33Sjakob#define memmove memmove_$1
129462ac0c33Sjakobvoid *memmove(void *dest, const void *src, size_t n);
129562ac0c33Sjakob#endif
129662ac0c33Sjakob])
129762ac0c33Sjakob
1298a8b34139Sjakobdnl provide strlcat compat prototype.
1299a8b34139Sjakobdnl $1: unique name for compat code
1300a8b34139SjakobAC_DEFUN([AHX_CONFIG_STRLCAT],
1301a8b34139Sjakob[
1302a8b34139Sjakob#ifndef HAVE_STRLCAT
1303a8b34139Sjakob#define strlcat strlcat_$1
1304a8b34139Sjakobsize_t strlcat(char *dst, const char *src, size_t siz);
1305a8b34139Sjakob#endif
1306a8b34139Sjakob])
1307a8b34139Sjakob
130862ac0c33Sjakobdnl provide strlcpy compat prototype.
130962ac0c33Sjakobdnl $1: unique name for compat code
131062ac0c33SjakobAC_DEFUN([AHX_CONFIG_STRLCPY],
131162ac0c33Sjakob[
131262ac0c33Sjakob#ifndef HAVE_STRLCPY
131362ac0c33Sjakob#define strlcpy strlcpy_$1
131462ac0c33Sjakobsize_t strlcpy(char *dst, const char *src, size_t siz);
131562ac0c33Sjakob#endif
131662ac0c33Sjakob])
131762ac0c33Sjakob
131862ac0c33Sjakobdnl provide gmtime_r compat prototype.
131962ac0c33Sjakobdnl $1: unique name for compat code
132062ac0c33SjakobAC_DEFUN([AHX_CONFIG_GMTIME_R],
132162ac0c33Sjakob[
132262ac0c33Sjakob#ifndef HAVE_GMTIME_R
132362ac0c33Sjakob#define gmtime_r gmtime_r_$1
132462ac0c33Sjakobstruct tm *gmtime_r(const time_t *timep, struct tm *result);
132562ac0c33Sjakob#endif
132662ac0c33Sjakob])
132762ac0c33Sjakob
1328c939baa4Ssthendnl provide reallocarray compat prototype.
1329c939baa4Ssthendnl $1: unique name for compat code
1330c939baa4SsthenAC_DEFUN([AHX_CONFIG_REALLOCARRAY],
1331c939baa4Ssthen[
1332c939baa4Ssthen#ifndef HAVE_REALLOCARRAY
1333c939baa4Ssthen#define reallocarray reallocarray$1
1334c939baa4Ssthenvoid* reallocarray(void *ptr, size_t nmemb, size_t size);
1335c939baa4Ssthen#endif
1336c939baa4Ssthen])
1337c939baa4Ssthen
133862ac0c33Sjakobdnl provide w32 compat definition for sleep
133962ac0c33SjakobAC_DEFUN([AHX_CONFIG_W32_SLEEP],
134062ac0c33Sjakob[
134112455795Ssthen#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H)
134262ac0c33Sjakob#define sleep(x) Sleep((x)*1000) /* on win32 */
134362ac0c33Sjakob#endif /* HAVE_SLEEP */
134462ac0c33Sjakob])
134562ac0c33Sjakob
134662ac0c33Sjakobdnl provide w32 compat definition for usleep
134762ac0c33SjakobAC_DEFUN([AHX_CONFIG_W32_USLEEP],
134862ac0c33Sjakob[
134962ac0c33Sjakob#ifndef HAVE_USLEEP
135062ac0c33Sjakob#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */
135162ac0c33Sjakob#endif /* HAVE_USLEEP */
135262ac0c33Sjakob])
135362ac0c33Sjakob
135462ac0c33Sjakobdnl provide w32 compat definition for random
135562ac0c33SjakobAC_DEFUN([AHX_CONFIG_W32_RANDOM],
135662ac0c33Sjakob[
135762ac0c33Sjakob#ifndef HAVE_RANDOM
135862ac0c33Sjakob#define random rand /* on win32, for tests only (bad random) */
135962ac0c33Sjakob#endif /* HAVE_RANDOM */
136062ac0c33Sjakob])
136162ac0c33Sjakob
136262ac0c33Sjakobdnl provide w32 compat definition for srandom
136362ac0c33SjakobAC_DEFUN([AHX_CONFIG_W32_SRANDOM],
136462ac0c33Sjakob[
136562ac0c33Sjakob#ifndef HAVE_SRANDOM
136662ac0c33Sjakob#define srandom(x) srand(x) /* on win32, for tests only (bad random) */
136762ac0c33Sjakob#endif /* HAVE_SRANDOM */
136862ac0c33Sjakob])
136962ac0c33Sjakob
137062ac0c33Sjakobdnl provide w32 compat definition for FD_SET_T
137162ac0c33SjakobAC_DEFUN([AHX_CONFIG_W32_FD_SET_T],
137262ac0c33Sjakob[
137362ac0c33Sjakob/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */
137462ac0c33Sjakob#ifdef HAVE_WINSOCK2_H
137562ac0c33Sjakob#define FD_SET_T (u_int)
137662ac0c33Sjakob#else
137762ac0c33Sjakob#define FD_SET_T
137862ac0c33Sjakob#endif
137962ac0c33Sjakob])
138062ac0c33Sjakob
138162ac0c33Sjakobdnl Remove an extension flag from CFLAGS, define replacement to be made.
138262ac0c33Sjakobdnl Used by ACX_STRIP_EXT_FLAGS.
138362ac0c33Sjakobdnl $1: the name of the flag, for example -D_GNU_SOURCE.
138462ac0c33SjakobAC_DEFUN([ACX_CFLAGS_STRIP],
138562ac0c33Sjakob[
138662ac0c33Sjakob  if echo $CFLAGS | grep " $1" >/dev/null 2>&1; then
138762ac0c33Sjakob    CFLAGS="`echo $CFLAGS | sed -e 's/ $1//g'`"
1388044f85deSsthen    AC_DEFINE(m4_bpatsubst(OMITTED_$1,[[-=]],_), 1, Put $1 define in config.h)
138962ac0c33Sjakob  fi
139062ac0c33Sjakob])
139162ac0c33Sjakob
139262ac0c33Sjakobdnl Remove EXT flags from the CFLAGS and set them to be defined in config.h
139362ac0c33Sjakobdnl use with ACX_DETERMINE_EXT_FLAGS.
139462ac0c33SjakobAC_DEFUN([ACX_STRIP_EXT_FLAGS],
139562ac0c33Sjakob[
139662ac0c33Sjakob  AC_MSG_NOTICE([Stripping extension flags...])
139762ac0c33Sjakob  ACX_CFLAGS_STRIP(-D_GNU_SOURCE)
139862ac0c33Sjakob  ACX_CFLAGS_STRIP(-D_BSD_SOURCE)
1399275a8d89Sflorian  ACX_CFLAGS_STRIP(-D_DEFAULT_SOURCE)
140062ac0c33Sjakob  ACX_CFLAGS_STRIP(-D__EXTENSIONS__)
140162ac0c33Sjakob  ACX_CFLAGS_STRIP(-D_POSIX_C_SOURCE=200112)
140262ac0c33Sjakob  ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE=600)
140362ac0c33Sjakob  ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE_EXTENDED=1)
140462ac0c33Sjakob  ACX_CFLAGS_STRIP(-D_ALL_SOURCE)
140562ac0c33Sjakob  ACX_CFLAGS_STRIP(-D_LARGEFILE_SOURCE=1)
140662ac0c33Sjakob]) dnl End of ACX_STRIP_EXT_FLAGS
140762ac0c33Sjakob
140862ac0c33Sjakobdnl define one omitted flag for config.h
140962ac0c33Sjakobdnl $1: flag name. -D_GNU_SOURCE
141062ac0c33Sjakobdnl $2: replacement define. _GNU_SOURCE
141162ac0c33Sjakobdnl $3: define value, 1
141262ac0c33SjakobAC_DEFUN([AHX_CONFIG_FLAG_OMITTED],
141362ac0c33Sjakob[#if defined($1) && !defined($2)
141462ac0c33Sjakob#define $2 $3
141562ac0c33Sjakob[#]endif])
141662ac0c33Sjakob
141762ac0c33Sjakobdnl Wrapper for AHX_CONFIG_FLAG_OMITTED for -D style flags
141862ac0c33Sjakobdnl $1: the -DNAME or -DNAME=value string.
141962ac0c33SjakobAC_DEFUN([AHX_CONFIG_FLAG_EXT],
1420044f85deSsthen[AHX_CONFIG_FLAG_OMITTED(m4_bpatsubst(OMITTED_$1,[[-=]],_),m4_bpatsubst(m4_bpatsubst($1,-D,),=.*$,),m4_if(m4_bregexp($1,=),-1,1,m4_bpatsubst($1,^.*=,)))
142162ac0c33Sjakob])
142262ac0c33Sjakob
142362ac0c33Sjakobdnl config.h part to define omitted cflags, use with ACX_STRIP_EXT_FLAGS.
142462ac0c33SjakobAC_DEFUN([AHX_CONFIG_EXT_FLAGS],
142562ac0c33Sjakob[AHX_CONFIG_FLAG_EXT(-D_GNU_SOURCE)
142662ac0c33SjakobAHX_CONFIG_FLAG_EXT(-D_BSD_SOURCE)
1427275a8d89SflorianAHX_CONFIG_FLAG_EXT(-D_DEFAULT_SOURCE)
142862ac0c33SjakobAHX_CONFIG_FLAG_EXT(-D__EXTENSIONS__)
142962ac0c33SjakobAHX_CONFIG_FLAG_EXT(-D_POSIX_C_SOURCE=200112)
143062ac0c33SjakobAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE=600)
143162ac0c33SjakobAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE_EXTENDED=1)
143262ac0c33SjakobAHX_CONFIG_FLAG_EXT(-D_ALL_SOURCE)
143362ac0c33SjakobAHX_CONFIG_FLAG_EXT(-D_LARGEFILE_SOURCE=1)
143462ac0c33Sjakob])
143562ac0c33Sjakob
1436a8b34139Sjakobdnl check if memcmp is using signed characters and replace if so.
1437a8b34139SjakobAC_DEFUN([ACX_CHECK_MEMCMP_SIGNED],
1438a8b34139Sjakob[AC_MSG_CHECKING([if memcmp compares unsigned])
1439a8b34139SjakobAC_RUN_IFELSE([AC_LANG_SOURCE([[
1440a8b34139Sjakob#include <stdio.h>
1441a8b34139Sjakob#include <stdlib.h>
1442a8b34139Sjakob#include <string.h>
1443a8b34139Sjakobint main(void)
1444a8b34139Sjakob{
1445a8b34139Sjakob	char a = 255, b = 0;
1446a8b34139Sjakob	if(memcmp(&a, &b, 1) < 0)
1447a8b34139Sjakob		return 1;
1448a8b34139Sjakob	return 0;
1449a8b34139Sjakob}
1450a8b34139Sjakob]])], [AC_MSG_RESULT([yes]) ],
1451a8b34139Sjakob[ AC_MSG_RESULT([no])
1452a8b34139Sjakob  AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes])
1453a8b34139Sjakob  AC_LIBOBJ([memcmp])
1454a8b34139Sjakob], [ AC_MSG_RESULT([cross-compile no])
1455a8b34139Sjakob  AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes])
1456a8b34139Sjakob  AC_LIBOBJ([memcmp])
1457a8b34139Sjakob]) ])
1458a8b34139Sjakob
1459a8b34139Sjakobdnl define memcmp to its replacement, pass unique id for program as arg
1460a8b34139SjakobAC_DEFUN([AHX_MEMCMP_BROKEN], [
1461a8b34139Sjakob#ifdef MEMCMP_IS_BROKEN
1462aee1b7aaSsthen#include "compat/memcmp.h"
1463a8b34139Sjakob#define memcmp memcmp_$1
1464a8b34139Sjakobint memcmp(const void *x, const void *y, size_t n);
1465a8b34139Sjakob#endif
1466a8b34139Sjakob])
1467a8b34139Sjakob
1468d65f3523Sjakobdnl ACX_CHECK_SS_FAMILY           - check for sockaddr_storage.ss_family
1469d65f3523SjakobAC_DEFUN([ACX_CHECK_SS_FAMILY],
1470d65f3523Sjakob[AC_CHECK_MEMBER([struct sockaddr_storage.ss_family], [], [
1471d65f3523Sjakob        AC_CHECK_MEMBER([struct sockaddr_storage.__ss_family], [
1472d65f3523Sjakob                AC_DEFINE([ss_family], [__ss_family], [Fallback member name for socket family in struct sockaddr_storage])
1473d65f3523Sjakob        ],, [AC_INCLUDES_DEFAULT
1474d65f3523Sjakob#ifdef HAVE_NETINET_IN_H
1475d65f3523Sjakob#include <netinet/in.h>
1476d65f3523Sjakob#endif
1477d65f3523Sjakob#ifdef HAVE_SYS_SOCKET_H
1478d65f3523Sjakob#include <sys/socket.h>
1479d65f3523Sjakob#endif
1480d65f3523Sjakob#ifdef HAVE_NETDB_H
1481d65f3523Sjakob#include <netdb.h>
1482d65f3523Sjakob#endif
1483d65f3523Sjakob#ifdef HAVE_ARPA_INET_H
1484d65f3523Sjakob#include <arpa/inet.h>
1485d65f3523Sjakob#endif
1486d65f3523Sjakob    ])
1487d65f3523Sjakob], [AC_INCLUDES_DEFAULT
1488d65f3523Sjakob#ifdef HAVE_NETINET_IN_H
1489d65f3523Sjakob#include <netinet/in.h>
1490d65f3523Sjakob#endif
1491d65f3523Sjakob#ifdef HAVE_SYS_SOCKET_H
1492d65f3523Sjakob#include <sys/socket.h>
1493d65f3523Sjakob#endif
1494d65f3523Sjakob#ifdef HAVE_NETDB_H
1495d65f3523Sjakob#include <netdb.h>
1496d65f3523Sjakob#endif
1497d65f3523Sjakob#ifdef HAVE_ARPA_INET_H
1498d65f3523Sjakob#include <arpa/inet.h>
1499d65f3523Sjakob#endif
1500d65f3523Sjakob]) ])
1501d65f3523Sjakob
1502a65f413bSsthendnl Check if CC and linker support -fPIE and -pie.
1503a65f413bSsthendnl If so, sets them in CFLAGS / LDFLAGS.
1504a65f413bSsthenAC_DEFUN([ACX_CHECK_PIE], [
1505a65f413bSsthen    AC_ARG_ENABLE([pie], AS_HELP_STRING([--enable-pie], [Enable Position-Independent Executable (eg. to fully benefit from ASLR, small performance penalty)]))
1506a65f413bSsthen    AS_IF([test "x$enable_pie" = "xyes"], [
1507a65f413bSsthen	AC_MSG_CHECKING([if $CC supports PIE])
1508a65f413bSsthen	BAKLDFLAGS="$LDFLAGS"
1509a65f413bSsthen	BAKCFLAGS="$CFLAGS"
1510a65f413bSsthen	LDFLAGS="$LDFLAGS -pie"
1511a65f413bSsthen	CFLAGS="$CFLAGS -fPIE"
1512a65f413bSsthen	AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
1513a65f413bSsthen	    if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
1514a65f413bSsthen		LDFLAGS="$BAKLDFLAGS"
1515a65f413bSsthen		AC_MSG_RESULT(no)
1516a65f413bSsthen	    else
1517a65f413bSsthen		AC_MSG_RESULT(yes)
1518a65f413bSsthen	    fi
1519a65f413bSsthen	    rm -f conftest conftest.c conftest.o
1520a65f413bSsthen	], [LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)])
1521a65f413bSsthen    ])
1522a65f413bSsthen])
1523a65f413bSsthen
1524a65f413bSsthendnl Check if linker supports -Wl,-z,relro,-z,now.
1525a65f413bSsthendnl If so, adds it to LDFLAGS.
1526a65f413bSsthenAC_DEFUN([ACX_CHECK_RELRO_NOW], [
1527a65f413bSsthen    AC_ARG_ENABLE([relro_now], AS_HELP_STRING([--enable-relro-now], [Enable full relocation binding at load-time (RELRO NOW, to protect GOT and .dtor areas)]))
1528a65f413bSsthen    AS_IF([test "x$enable_relro_now" = "xyes"], [
1529a65f413bSsthen	AC_MSG_CHECKING([if $CC supports -Wl,-z,relro,-z,now])
1530a65f413bSsthen	BAKLDFLAGS="$LDFLAGS"
1531a65f413bSsthen	LDFLAGS="$LDFLAGS -Wl,-z,relro,-z,now"
1532a65f413bSsthen	AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
1533a65f413bSsthen	    if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
1534a65f413bSsthen		LDFLAGS="$BAKLDFLAGS"
1535a65f413bSsthen		AC_MSG_RESULT(no)
1536a65f413bSsthen	    else
1537a65f413bSsthen		AC_MSG_RESULT(yes)
1538a65f413bSsthen	    fi
1539a65f413bSsthen	    rm -f conftest conftest.c conftest.o
1540a65f413bSsthen	], [LDFLAGS="$BAKLDFLAGS" ; AC_MSG_RESULT(no)])
1541a65f413bSsthen    ])
1542a65f413bSsthen])
1543a65f413bSsthen
154462ac0c33Sjakobdnl End of file
1545