xref: /freebsd/contrib/ldns/acx_nlnetlabs.m4 (revision 5afab0e5)
17b5038d7SDag-Erling Smørgrav# acx_nlnetlabs.m4 - common macros for configure checks
27b5038d7SDag-Erling Smørgrav# Copyright 2009, Wouter Wijngaards, NLnet Labs.
37b5038d7SDag-Erling Smørgrav# BSD licensed.
47b5038d7SDag-Erling Smørgrav#
5*5afab0e5SDag-Erling Smørgrav# Version 41
6*5afab0e5SDag-Erling Smørgrav# 2021-07-30 fix for openssl use of lib64 directory.
7*5afab0e5SDag-Erling Smørgrav# 2021-06-14 fix nonblocking test to use host instead of target for mingw test.
8*5afab0e5SDag-Erling Smørgrav# 2021-05-17 fix nonblocking socket test from grep on mingw32 to mingw for
9*5afab0e5SDag-Erling Smørgrav# 	     64bit compatibility.
10*5afab0e5SDag-Erling Smørgrav# 2021-03-24 fix ACX_FUNC_DEPRECATED to use CPPFLAGS and CFLAGS.
11*5afab0e5SDag-Erling Smørgrav# 2021-01-05 fix defun for aclocal
12*5afab0e5SDag-Erling Smørgrav# 2021-01-05 autoconf 2.70 autoupdate and fixes, no AC_TRY_COMPILE
13*5afab0e5SDag-Erling Smørgrav# 2020-08-24 Use EVP_sha256 instead of HMAC_Update (for openssl-3.0.0).
14986ba33cSDag-Erling Smørgrav# 2016-03-21 Check -ldl -pthread for libcrypto for ldns and openssl 1.1.0.
15986ba33cSDag-Erling Smørgrav# 2016-03-21 Use HMAC_Update instead of HMAC_CTX_Init (for openssl-1.1.0).
16986ba33cSDag-Erling Smørgrav# 2016-01-04 -D_DEFAULT_SOURCE defined with -D_BSD_SOURCE for Linux glibc 2.20
17986ba33cSDag-Erling Smørgrav# 2015-12-11 FLTO check for new OSX, clang.
18986ba33cSDag-Erling Smørgrav# 2015-11-18 spelling check fix.
19986ba33cSDag-Erling Smørgrav# 2015-11-05 ACX_SSL_CHECKS no longer adds -ldl needlessly.
20986ba33cSDag-Erling Smørgrav# 2015-08-28 ACX_CHECK_PIE and ACX_CHECK_RELRO_NOW added.
21986ba33cSDag-Erling Smørgrav# 2015-03-17 AHX_CONFIG_REALLOCARRAY added
2217d15b25SDag-Erling Smørgrav# 2013-09-19 FLTO help text improved.
2317d15b25SDag-Erling Smørgrav# 2013-07-18 Enable ACX_CHECK_COMPILER_FLAG to test for -Wstrict-prototypes
2417d15b25SDag-Erling Smørgrav# 2013-06-25 FLTO has --disable-flto option.
2517d15b25SDag-Erling Smørgrav# 2013-05-03 Update W32_SLEEP for newer mingw that links but not defines it.
2617d15b25SDag-Erling Smørgrav# 2013-03-22 Fix ACX_RSRC_VERSION for long version numbers.
277b5038d7SDag-Erling Smørgrav# 2012-02-09 Fix AHX_MEMCMP_BROKEN with undef in compat/memcmp.h.
287b5038d7SDag-Erling Smørgrav# 2012-01-20 Fix COMPILER_FLAGS_UNBOUND for gcc 4.6.2 assigned-not-used-warns.
297b5038d7SDag-Erling Smørgrav# 2011-12-05 Fix getaddrinfowithincludes on windows with fedora16 mingw32-gcc.
307b5038d7SDag-Erling Smørgrav# 	     Fix ACX_MALLOC for redefined malloc error.
317b5038d7SDag-Erling Smørgrav# 	     Fix GETADDRINFO_WITH_INCLUDES to add -lws2_32
327b5038d7SDag-Erling Smørgrav# 2011-11-10 Fix FLTO test to not drop a.out in current directory.
337b5038d7SDag-Erling Smørgrav# 2011-11-01 Fix FLTO test for llvm on Lion.
347b5038d7SDag-Erling Smørgrav# 2011-08-01 Fix nonblock test (broken at v13).
357b5038d7SDag-Erling Smørgrav# 2011-08-01 Fix autoconf 2.68 warnings
367b5038d7SDag-Erling Smørgrav# 2011-06-23 Add ACX_CHECK_FLTO to check -flto.
377b5038d7SDag-Erling Smørgrav# 2010-08-16 Fix FLAG_OMITTED for AS_TR_CPP changes in autoconf-2.66.
387b5038d7SDag-Erling Smørgrav# 2010-07-02 Add check for ss_family (for minix).
397b5038d7SDag-Erling Smørgrav# 2010-04-26 Fix to use CPPFLAGS for CHECK_COMPILER_FLAGS.
407b5038d7SDag-Erling Smørgrav# 2010-03-01 Fix RPATH using CONFIG_COMMANDS to run at the very end.
4117d15b25SDag-Erling Smørgrav# 2010-02-18 WITH_SSL outputs the LIBSSL_LDFLAGS, LIBS, CPPFLAGS separate, -ldl
427b5038d7SDag-Erling Smørgrav# 2010-02-01 added ACX_CHECK_MEMCMP_SIGNED, AHX_MEMCMP_BROKEN
437b5038d7SDag-Erling Smørgrav# 2010-01-20 added AHX_COONFIG_STRLCAT
447b5038d7SDag-Erling Smørgrav# 2009-07-14 U_CHAR detection improved for windows crosscompile.
457b5038d7SDag-Erling Smørgrav#            added ACX_FUNC_MALLOC
467b5038d7SDag-Erling Smørgrav#            fixup some #if to #ifdef
477b5038d7SDag-Erling Smørgrav#            NONBLOCKING test for mingw crosscompile.
487b5038d7SDag-Erling Smørgrav# 2009-07-13 added ACX_WITH_SSL_OPTIONAL
497b5038d7SDag-Erling Smørgrav# 2009-07-03 fixup LDFLAGS for empty ssl dir.
507b5038d7SDag-Erling Smørgrav#
517b5038d7SDag-Erling Smørgrav# Automates some of the checking constructs.  Aims at portability for POSIX.
527b5038d7SDag-Erling Smørgrav# Documentation for functions is below.
537b5038d7SDag-Erling Smørgrav#
547b5038d7SDag-Erling Smørgrav# the following macro's are provided in this file:
557b5038d7SDag-Erling Smørgrav# (see below for details on each macro).
567b5038d7SDag-Erling Smørgrav#
577b5038d7SDag-Erling Smørgrav# ACX_ESCAPE_BACKSLASH		- escape backslashes in var for C-preproc.
587b5038d7SDag-Erling Smørgrav# ACX_RSRC_VERSION		- create windows resource version number.
597b5038d7SDag-Erling Smørgrav# ACX_CHECK_COMPILER_FLAG	- see if cc supports a flag.
607b5038d7SDag-Erling Smørgrav# ACX_CHECK_ERROR_FLAGS		- see which flag is -werror (used below).
617b5038d7SDag-Erling Smørgrav# ACX_CHECK_COMPILER_FLAG_NEEDED - see if flags make the code compile cleanly.
627b5038d7SDag-Erling Smørgrav# ACX_DEPFLAG			- find cc dependency flags.
637b5038d7SDag-Erling Smørgrav# ACX_DETERMINE_EXT_FLAGS_UNBOUND - find out which flags enable BSD and POSIX.
647b5038d7SDag-Erling Smørgrav# ACX_CHECK_FORMAT_ATTRIBUTE	- find cc printf format syntax.
657b5038d7SDag-Erling Smørgrav# ACX_CHECK_UNUSED_ATTRIBUTE	- find cc variable unused syntax.
667b5038d7SDag-Erling Smørgrav# ACX_CHECK_FLTO		- see if cc supports -flto and use it if so.
677b5038d7SDag-Erling Smørgrav# ACX_LIBTOOL_C_ONLY		- create libtool for C only, improved.
687b5038d7SDag-Erling Smørgrav# ACX_TYPE_U_CHAR		- u_char type.
697b5038d7SDag-Erling Smørgrav# ACX_TYPE_RLIM_T		- rlim_t type.
707b5038d7SDag-Erling Smørgrav# ACX_TYPE_SOCKLEN_T		- socklen_t type.
717b5038d7SDag-Erling Smørgrav# ACX_TYPE_IN_ADDR_T		- in_addr_t type.
727b5038d7SDag-Erling Smørgrav# ACX_TYPE_IN_PORT_T		- in_port_t type.
737b5038d7SDag-Erling Smørgrav# ACX_ARG_RPATH			- add --disable-rpath option.
747b5038d7SDag-Erling Smørgrav# ACX_WITH_SSL			- add --with-ssl option, link -lcrypto.
757b5038d7SDag-Erling Smørgrav# ACX_WITH_SSL_OPTIONAL		- add --with-ssl option, link -lcrypto,
767b5038d7SDag-Erling Smørgrav#				  where --without-ssl is also accepted
777b5038d7SDag-Erling Smørgrav# ACX_LIB_SSL			- setup to link -lssl.
787b5038d7SDag-Erling Smørgrav# ACX_SYS_LARGEFILE		- improved sys_largefile, fseeko, >2G files.
797b5038d7SDag-Erling Smørgrav# ACX_CHECK_GETADDRINFO_WITH_INCLUDES - find getaddrinfo, portably.
807b5038d7SDag-Erling Smørgrav# ACX_FUNC_DEPRECATED		- see if func is deprecated.
817b5038d7SDag-Erling Smørgrav# ACX_CHECK_NONBLOCKING_BROKEN	- see if nonblocking sockets really work.
827b5038d7SDag-Erling Smørgrav# ACX_MKDIR_ONE_ARG		- determine mkdir(2) number of arguments.
837b5038d7SDag-Erling Smørgrav# ACX_FUNC_IOCTLSOCKET		- find ioctlsocket, portably.
847b5038d7SDag-Erling Smørgrav# ACX_FUNC_MALLOC		- check malloc, define replacement .
857b5038d7SDag-Erling Smørgrav# AHX_CONFIG_FORMAT_ATTRIBUTE	- config.h text for format.
867b5038d7SDag-Erling Smørgrav# AHX_CONFIG_UNUSED_ATTRIBUTE	- config.h text for unused.
877b5038d7SDag-Erling Smørgrav# AHX_CONFIG_FSEEKO		- define fseeko, ftello fallback.
887b5038d7SDag-Erling Smørgrav# AHX_CONFIG_RAND_MAX		- define RAND_MAX if needed.
897b5038d7SDag-Erling Smørgrav# AHX_CONFIG_MAXHOSTNAMELEN	- define MAXHOSTNAMELEN if needed.
907b5038d7SDag-Erling Smørgrav# AHX_CONFIG_IPV6_MIN_MTU	- define IPV6_MIN_MTU if needed.
917b5038d7SDag-Erling Smørgrav# AHX_CONFIG_SNPRINTF		- snprintf compat prototype
927b5038d7SDag-Erling Smørgrav# AHX_CONFIG_INET_PTON		- inet_pton compat prototype
937b5038d7SDag-Erling Smørgrav# AHX_CONFIG_INET_NTOP		- inet_ntop compat prototype
947b5038d7SDag-Erling Smørgrav# AHX_CONFIG_INET_ATON		- inet_aton compat prototype
957b5038d7SDag-Erling Smørgrav# AHX_CONFIG_MEMMOVE		- memmove compat prototype
967b5038d7SDag-Erling Smørgrav# AHX_CONFIG_STRLCAT		- strlcat compat prototype
977b5038d7SDag-Erling Smørgrav# AHX_CONFIG_STRLCPY		- strlcpy compat prototype
987b5038d7SDag-Erling Smørgrav# AHX_CONFIG_GMTIME_R		- gmtime_r compat prototype
997b5038d7SDag-Erling Smørgrav# AHX_CONFIG_W32_SLEEP		- w32 compat for sleep
1007b5038d7SDag-Erling Smørgrav# AHX_CONFIG_W32_USLEEP		- w32 compat for usleep
1017b5038d7SDag-Erling Smørgrav# AHX_CONFIG_W32_RANDOM		- w32 compat for random
1027b5038d7SDag-Erling Smørgrav# AHX_CONFIG_W32_SRANDOM	- w32 compat for srandom
1037b5038d7SDag-Erling Smørgrav# AHX_CONFIG_W32_FD_SET_T	- w32 detection of FD_SET_T.
1047b5038d7SDag-Erling Smørgrav# ACX_CFLAGS_STRIP		- strip one flag from CFLAGS
1057b5038d7SDag-Erling Smørgrav# ACX_STRIP_EXT_FLAGS		- strip extension flags from CFLAGS
1067b5038d7SDag-Erling Smørgrav# AHX_CONFIG_FLAG_OMITTED	- define omitted flag
1077b5038d7SDag-Erling Smørgrav# AHX_CONFIG_FLAG_EXT		- define omitted extension flag
1087b5038d7SDag-Erling Smørgrav# AHX_CONFIG_EXT_FLAGS		- define the stripped extension flags
1097b5038d7SDag-Erling Smørgrav# ACX_CHECK_MEMCMP_SIGNED	- check if memcmp uses signed characters.
1107b5038d7SDag-Erling Smørgrav# AHX_MEMCMP_BROKEN		- replace memcmp func for CHECK_MEMCMP_SIGNED.
1117b5038d7SDag-Erling Smørgrav# ACX_CHECK_SS_FAMILY           - check for sockaddr_storage.ss_family
112986ba33cSDag-Erling Smørgrav# ACX_CHECK_PIE			- add --enable-pie option and check if works
113986ba33cSDag-Erling Smørgrav# ACX_CHECK_RELRO_NOW		- add --enable-relro-now option and check it
1147b5038d7SDag-Erling Smørgrav#
1157b5038d7SDag-Erling Smørgrav
1167b5038d7SDag-Erling Smørgravdnl Escape backslashes as \\, for C:\ paths, for the C preprocessor defines.
1177b5038d7SDag-Erling Smørgravdnl for example, ACX_ESCAPE_BACKSLASH($from_var, to_var)
1187b5038d7SDag-Erling Smørgravdnl $1: the text to change.
1197b5038d7SDag-Erling Smørgravdnl $2: the result.
1207b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_ESCAPE_BACKSLASH], [$2="`echo $1 | sed -e 's/\\\\/\\\\\\\\/g'`"
1217b5038d7SDag-Erling Smørgrav])
1227b5038d7SDag-Erling Smørgrav
1237b5038d7SDag-Erling Smørgravdnl Calculate comma separated windows-resource numbers from package version.
1247b5038d7SDag-Erling Smørgravdnl Picks the first three(,0) or four numbers out of the name.
1257b5038d7SDag-Erling Smørgravdnl $1: variable for the result
1267b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_RSRC_VERSION],
12717d15b25SDag-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][^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/' `]
1287b5038d7SDag-Erling Smørgrav])
1297b5038d7SDag-Erling Smørgrav
1307b5038d7SDag-Erling Smørgravdnl Routine to help check for compiler flags.
1317b5038d7SDag-Erling Smørgravdnl Checks if the compiler will accept the flag.
1327b5038d7SDag-Erling Smørgravdnl $1: the flag without a - in front, so g to check -g.
1337b5038d7SDag-Erling Smørgravdnl $2: executed if yes
1347b5038d7SDag-Erling Smørgravdnl $3: executed if no
1357b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_COMPILER_FLAG],
1367b5038d7SDag-Erling Smørgrav[
1377b5038d7SDag-Erling SmørgravAC_REQUIRE([AC_PROG_CC])
1387b5038d7SDag-Erling SmørgravAC_MSG_CHECKING(whether $CC supports -$1)
1397b5038d7SDag-Erling Smørgravcache=`echo $1 | sed 'y%.=/+-%___p_%'`
1407b5038d7SDag-Erling SmørgravAC_CACHE_VAL(cv_prog_cc_flag_$cache,
1417b5038d7SDag-Erling Smørgrav[
14217d15b25SDag-Erling Smørgravecho 'void f(void){}' >conftest.c
1437b5038d7SDag-Erling Smørgravif test -z "`$CC $CPPFLAGS $CFLAGS -$1 -c conftest.c 2>&1`"; then
1447b5038d7SDag-Erling Smørgraveval "cv_prog_cc_flag_$cache=yes"
1457b5038d7SDag-Erling Smørgravelse
1467b5038d7SDag-Erling Smørgraveval "cv_prog_cc_flag_$cache=no"
1477b5038d7SDag-Erling Smørgravfi
1487b5038d7SDag-Erling Smørgravrm -f conftest conftest.o conftest.c
1497b5038d7SDag-Erling Smørgrav])
1507b5038d7SDag-Erling Smørgravif eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
1517b5038d7SDag-Erling SmørgravAC_MSG_RESULT(yes)
1527b5038d7SDag-Erling Smørgrav:
1537b5038d7SDag-Erling Smørgrav$2
1547b5038d7SDag-Erling Smørgravelse
1557b5038d7SDag-Erling SmørgravAC_MSG_RESULT(no)
1567b5038d7SDag-Erling Smørgrav:
1577b5038d7SDag-Erling Smørgrav$3
1587b5038d7SDag-Erling Smørgravfi
1597b5038d7SDag-Erling Smørgrav])
1607b5038d7SDag-Erling Smørgrav
1617b5038d7SDag-Erling Smørgravdnl setup flags for ACX_CHECK_COMPILER_FLAG_NEEDED
1627b5038d7SDag-Erling Smørgravdnl ERRFLAG: result, compiler flag to turn warnings into errors
1637b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_ERROR_FLAGS],
1647b5038d7SDag-Erling Smørgrav[
1657b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(Werror, [ERRFLAG="-Werror"], [ERRFLAG="-errwarn"])
1667b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(Wall, [ERRFLAG="$ERRFLAG -Wall"],
1677b5038d7SDag-Erling Smørgrav                        	[ERRFLAG="$ERRFLAG -errfmt"])
1687b5038d7SDag-Erling Smørgrav])
1697b5038d7SDag-Erling Smørgrav
1707b5038d7SDag-Erling Smørgravdnl Routine to help check for needed compiler flags.
1717b5038d7SDag-Erling Smørgravdnl $1: flags for CC
1727b5038d7SDag-Erling Smørgravdnl $2: the includes and code
1737b5038d7SDag-Erling Smørgravdnl $3: if the given code only compiles with the flag, execute argument 3
1747b5038d7SDag-Erling Smørgravdnl $4: if the given code compiles without the flag, execute argument 4
1757b5038d7SDag-Erling Smørgravdnl $5: with and without flag the compile fails, execute argument 5.
1767b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_COMPILER_FLAG_NEEDED],
1777b5038d7SDag-Erling Smørgrav[
1787b5038d7SDag-Erling SmørgravAC_REQUIRE([AC_PROG_CC])
1797b5038d7SDag-Erling SmørgravAC_REQUIRE([ACX_CHECK_ERROR_FLAGS])
1807b5038d7SDag-Erling SmørgravAC_MSG_CHECKING(whether we need $1 as a flag for $CC)
1817b5038d7SDag-Erling Smørgravcache=AS_TR_SH($1)
1827b5038d7SDag-Erling Smørgravdnl cache=`echo $1 | sed 'y%.=/+- %___p__%'`
1837b5038d7SDag-Erling SmørgravAC_CACHE_VAL(cv_prog_cc_flag_needed_$cache,
1847b5038d7SDag-Erling Smørgrav[
1857b5038d7SDag-Erling Smørgravecho '$2' > conftest.c
1867b5038d7SDag-Erling Smørgravecho 'void f(){}' >>conftest.c
1877b5038d7SDag-Erling Smørgravif test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
1887b5038d7SDag-Erling Smørgraveval "cv_prog_cc_flag_needed_$cache=no"
1897b5038d7SDag-Erling Smørgravelse
1907b5038d7SDag-Erling Smørgrav[
1917b5038d7SDag-Erling Smørgravif test -z "`$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`"; then
1927b5038d7SDag-Erling Smørgraveval "cv_prog_cc_flag_needed_$cache=yes"
1937b5038d7SDag-Erling Smørgravelse
1947b5038d7SDag-Erling Smørgraveval "cv_prog_cc_flag_needed_$cache=fail"
1957b5038d7SDag-Erling Smørgrav#echo 'Test with flag fails too!'
1967b5038d7SDag-Erling Smørgrav#cat conftest.c
1977b5038d7SDag-Erling Smørgrav#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1"
1987b5038d7SDag-Erling Smørgrav#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`
1997b5038d7SDag-Erling Smørgrav#exit 1
2007b5038d7SDag-Erling Smørgravfi
2017b5038d7SDag-Erling Smørgrav]
2027b5038d7SDag-Erling Smørgravfi
2037b5038d7SDag-Erling Smørgravrm -f conftest conftest.c conftest.o
2047b5038d7SDag-Erling Smørgrav])
2057b5038d7SDag-Erling Smørgravif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
2067b5038d7SDag-Erling SmørgravAC_MSG_RESULT(yes)
2077b5038d7SDag-Erling Smørgrav:
2087b5038d7SDag-Erling Smørgrav$3
2097b5038d7SDag-Erling Smørgravelse
2107b5038d7SDag-Erling Smørgravif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
2117b5038d7SDag-Erling SmørgravAC_MSG_RESULT(no)
2127b5038d7SDag-Erling Smørgrav#echo 'Test with flag is no!'
2137b5038d7SDag-Erling Smørgrav#cat conftest.c
2147b5038d7SDag-Erling Smørgrav#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1"
2157b5038d7SDag-Erling Smørgrav#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`
2167b5038d7SDag-Erling Smørgrav#exit 1
2177b5038d7SDag-Erling Smørgrav:
2187b5038d7SDag-Erling Smørgrav$4
2197b5038d7SDag-Erling Smørgravelse
2207b5038d7SDag-Erling SmørgravAC_MSG_RESULT(failed)
2217b5038d7SDag-Erling Smørgrav:
2227b5038d7SDag-Erling Smørgrav$5
2237b5038d7SDag-Erling Smørgravfi
2247b5038d7SDag-Erling Smørgravfi
2257b5038d7SDag-Erling Smørgrav])
2267b5038d7SDag-Erling Smørgrav
2277b5038d7SDag-Erling Smørgravdnl Check for CC dependency flag
2287b5038d7SDag-Erling Smørgravdnl DEPFLAG: set to flag that generates dependencies.
2297b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_DEPFLAG],
2307b5038d7SDag-Erling Smørgrav[
2317b5038d7SDag-Erling SmørgravAC_MSG_CHECKING([$CC dependency flag])
2327b5038d7SDag-Erling Smørgravecho 'void f(){}' >conftest.c
2337b5038d7SDag-Erling Smørgravif test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then
2347b5038d7SDag-Erling Smørgrav	DEPFLAG="-MM"
2357b5038d7SDag-Erling Smørgravelse
2367b5038d7SDag-Erling Smørgrav  if test "`$CC -xM1 conftest.c 2>&1`" = "conftest.o: conftest.c"; then
2377b5038d7SDag-Erling Smørgrav	DEPFLAG="-xM1"
2387b5038d7SDag-Erling Smørgrav  else
2397b5038d7SDag-Erling Smørgrav	DEPFLAG="-MM"  # dunno do something
2407b5038d7SDag-Erling Smørgrav  fi
2417b5038d7SDag-Erling Smørgravfi
2427b5038d7SDag-Erling SmørgravAC_MSG_RESULT($DEPFLAG)
2437b5038d7SDag-Erling Smørgravrm -f conftest.c
2447b5038d7SDag-Erling SmørgravAC_SUBST(DEPFLAG)
2457b5038d7SDag-Erling Smørgrav])
2467b5038d7SDag-Erling Smørgrav
2477b5038d7SDag-Erling Smørgravdnl Determine flags that gives POSIX and BSD functionality.
2487b5038d7SDag-Erling Smørgravdnl CFLAGS is modified for the result.
2497b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_DETERMINE_EXT_FLAGS_UNBOUND],
2507b5038d7SDag-Erling Smørgrav[
2517b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(std=c99, [C99FLAG="-std=c99"])
2527b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(xc99, [C99FLAG="-xc99"])
2537b5038d7SDag-Erling Smørgrav
2547b5038d7SDag-Erling SmørgravAC_CHECK_HEADERS([getopt.h time.h],,, [AC_INCLUDES_DEFAULT])
2557b5038d7SDag-Erling Smørgrav
256986ba33cSDag-Erling SmørgravACX_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,
2577b5038d7SDag-Erling Smørgrav[
2587b5038d7SDag-Erling Smørgrav#include "confdefs.h"
2597b5038d7SDag-Erling Smørgrav#include <stdlib.h>
2607b5038d7SDag-Erling Smørgrav#include <ctype.h>
2617b5038d7SDag-Erling Smørgrav#include <sys/time.h>
2627b5038d7SDag-Erling Smørgrav#ifdef HAVE_TIME_H
2637b5038d7SDag-Erling Smørgrav#include <time.h>
2647b5038d7SDag-Erling Smørgrav#endif
2657b5038d7SDag-Erling Smørgrav#include <unistd.h>
2667b5038d7SDag-Erling Smørgrav#include <netdb.h>
2677b5038d7SDag-Erling Smørgrav#ifdef HAVE_GETOPT_H
2687b5038d7SDag-Erling Smørgrav#include <getopt.h>
2697b5038d7SDag-Erling Smørgrav#endif
2707b5038d7SDag-Erling Smørgrav
2717b5038d7SDag-Erling Smørgravint test() {
2727b5038d7SDag-Erling Smørgrav	int a;
2737b5038d7SDag-Erling Smørgrav	char **opts = NULL;
2747b5038d7SDag-Erling Smørgrav	struct timeval tv;
2757b5038d7SDag-Erling Smørgrav	char *t;
2767b5038d7SDag-Erling Smørgrav	time_t time = 0;
2777b5038d7SDag-Erling Smørgrav	char *buf = NULL;
2787b5038d7SDag-Erling Smørgrav	const char* str = NULL;
2797b5038d7SDag-Erling Smørgrav	struct msghdr msg;
2807b5038d7SDag-Erling Smørgrav	msg.msg_control = 0;
2817b5038d7SDag-Erling Smørgrav	t = ctime_r(&time, buf);
2827b5038d7SDag-Erling Smørgrav	tv.tv_usec = 10;
2837b5038d7SDag-Erling Smørgrav	srandom(32);
2847b5038d7SDag-Erling Smørgrav	a = getopt(2, opts, "a");
2857b5038d7SDag-Erling Smørgrav	a = isascii(32);
2867b5038d7SDag-Erling Smørgrav	str = gai_strerror(0);
2877b5038d7SDag-Erling Smørgrav	if(str && t && tv.tv_usec && msg.msg_control)
2887b5038d7SDag-Erling Smørgrav		a = 0;
2897b5038d7SDag-Erling Smørgrav	return a;
2907b5038d7SDag-Erling Smørgrav}
291986ba33cSDag-Erling Smørgrav], [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"])
2927b5038d7SDag-Erling Smørgrav
293986ba33cSDag-Erling SmørgravACX_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,
2947b5038d7SDag-Erling Smørgrav[
2957b5038d7SDag-Erling Smørgrav#include "confdefs.h"
2967b5038d7SDag-Erling Smørgrav#include <stdlib.h>
2977b5038d7SDag-Erling Smørgrav#include <ctype.h>
2987b5038d7SDag-Erling Smørgrav#include <sys/time.h>
2997b5038d7SDag-Erling Smørgrav#ifdef HAVE_TIME_H
3007b5038d7SDag-Erling Smørgrav#include <time.h>
3017b5038d7SDag-Erling Smørgrav#endif
3027b5038d7SDag-Erling Smørgrav#include <unistd.h>
3037b5038d7SDag-Erling Smørgrav#include <netdb.h>
3047b5038d7SDag-Erling Smørgrav#ifdef HAVE_GETOPT_H
3057b5038d7SDag-Erling Smørgrav#include <getopt.h>
3067b5038d7SDag-Erling Smørgrav#endif
3077b5038d7SDag-Erling Smørgrav
3087b5038d7SDag-Erling Smørgravint test() {
3097b5038d7SDag-Erling Smørgrav	int a;
3107b5038d7SDag-Erling Smørgrav	char **opts = NULL;
3117b5038d7SDag-Erling Smørgrav	struct timeval tv;
3127b5038d7SDag-Erling Smørgrav	char *t;
3137b5038d7SDag-Erling Smørgrav	time_t time = 0;
3147b5038d7SDag-Erling Smørgrav	char *buf = NULL;
3157b5038d7SDag-Erling Smørgrav	const char* str = NULL;
3167b5038d7SDag-Erling Smørgrav	struct msghdr msg;
3177b5038d7SDag-Erling Smørgrav	msg.msg_control = 0;
3187b5038d7SDag-Erling Smørgrav	t = ctime_r(&time, buf);
3197b5038d7SDag-Erling Smørgrav	tv.tv_usec = 10;
3207b5038d7SDag-Erling Smørgrav	srandom(32);
3217b5038d7SDag-Erling Smørgrav	a = getopt(2, opts, "a");
3227b5038d7SDag-Erling Smørgrav	a = isascii(32);
3237b5038d7SDag-Erling Smørgrav	str = gai_strerror(0);
3247b5038d7SDag-Erling Smørgrav	if(str && t && tv.tv_usec && msg.msg_control)
3257b5038d7SDag-Erling Smørgrav		a = 0;
3267b5038d7SDag-Erling Smørgrav	return a;
3277b5038d7SDag-Erling Smørgrav}
328986ba33cSDag-Erling Smørgrav], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE"])
3297b5038d7SDag-Erling Smørgrav
3307b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG,
3317b5038d7SDag-Erling Smørgrav[
3327b5038d7SDag-Erling Smørgrav#include <stdbool.h>
3337b5038d7SDag-Erling Smørgrav#include <ctype.h>
3347b5038d7SDag-Erling Smørgravint test() {
3357b5038d7SDag-Erling Smørgrav        int a = 0;
3367b5038d7SDag-Erling Smørgrav        return a;
3377b5038d7SDag-Erling Smørgrav}
3387b5038d7SDag-Erling Smørgrav], [CFLAGS="$CFLAGS $C99FLAG"])
3397b5038d7SDag-Erling Smørgrav
340986ba33cSDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_BSD_SOURCE -D_DEFAULT_SOURCE,
3417b5038d7SDag-Erling Smørgrav[
3427b5038d7SDag-Erling Smørgrav#include <ctype.h>
3437b5038d7SDag-Erling Smørgrav
3447b5038d7SDag-Erling Smørgravint test() {
3457b5038d7SDag-Erling Smørgrav        int a;
3467b5038d7SDag-Erling Smørgrav        a = isascii(32);
3477b5038d7SDag-Erling Smørgrav        return a;
3487b5038d7SDag-Erling Smørgrav}
349986ba33cSDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE"])
3507b5038d7SDag-Erling Smørgrav
3517b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE,
3527b5038d7SDag-Erling Smørgrav[
3537b5038d7SDag-Erling Smørgrav#include <netinet/in.h>
3547b5038d7SDag-Erling Smørgrav
3557b5038d7SDag-Erling Smørgravint test() {
3567b5038d7SDag-Erling Smørgrav        struct in6_pktinfo inf;
3577b5038d7SDag-Erling Smørgrav	int a = (int)sizeof(inf);
3587b5038d7SDag-Erling Smørgrav        return a;
3597b5038d7SDag-Erling Smørgrav}
3607b5038d7SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_GNU_SOURCE"])
3617b5038d7SDag-Erling Smørgrav
3627b5038d7SDag-Erling Smørgrav# check again for GNU_SOURCE for setresgid. May fail if setresgid
3637b5038d7SDag-Erling Smørgrav# is not available at all. -D_FRSRESGID is to make this check unique.
3647b5038d7SDag-Erling Smørgrav# otherwise we would get the previous cached result.
3657b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE -D_FRSRESGID,
3667b5038d7SDag-Erling Smørgrav[
3677b5038d7SDag-Erling Smørgrav#include <unistd.h>
3687b5038d7SDag-Erling Smørgrav
3697b5038d7SDag-Erling Smørgravint test() {
3707b5038d7SDag-Erling Smørgrav	int a = setresgid(0,0,0);
3717b5038d7SDag-Erling Smørgrav	a = setresuid(0,0,0);
3727b5038d7SDag-Erling Smørgrav        return a;
3737b5038d7SDag-Erling Smørgrav}
3747b5038d7SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_GNU_SOURCE"])
3757b5038d7SDag-Erling Smørgrav
3767b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_POSIX_C_SOURCE=200112,
3777b5038d7SDag-Erling Smørgrav[
3787b5038d7SDag-Erling Smørgrav#include "confdefs.h"
3797b5038d7SDag-Erling Smørgrav#ifdef HAVE_TIME_H
3807b5038d7SDag-Erling Smørgrav#include <time.h>
3817b5038d7SDag-Erling Smørgrav#endif
3827b5038d7SDag-Erling Smørgrav#include <netdb.h>
3837b5038d7SDag-Erling Smørgrav
3847b5038d7SDag-Erling Smørgravint test() {
3857b5038d7SDag-Erling Smørgrav        int a = 0;
3867b5038d7SDag-Erling Smørgrav        char *t;
3877b5038d7SDag-Erling Smørgrav        time_t time = 0;
3887b5038d7SDag-Erling Smørgrav        char *buf = NULL;
3897b5038d7SDag-Erling Smørgrav	const char* str = NULL;
3907b5038d7SDag-Erling Smørgrav        t = ctime_r(&time, buf);
3917b5038d7SDag-Erling Smørgrav	str = gai_strerror(0);
3927b5038d7SDag-Erling Smørgrav	if(t && str)
3937b5038d7SDag-Erling Smørgrav		a = 0;
3947b5038d7SDag-Erling Smørgrav        return a;
3957b5038d7SDag-Erling Smørgrav}
3967b5038d7SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112"])
3977b5038d7SDag-Erling Smørgrav
3987b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D__EXTENSIONS__,
3997b5038d7SDag-Erling Smørgrav[
4007b5038d7SDag-Erling Smørgrav#include "confdefs.h"
4017b5038d7SDag-Erling Smørgrav#include <stdlib.h>
4027b5038d7SDag-Erling Smørgrav#include <ctype.h>
4037b5038d7SDag-Erling Smørgrav#include <sys/time.h>
4047b5038d7SDag-Erling Smørgrav#ifdef HAVE_TIME_H
4057b5038d7SDag-Erling Smørgrav#include <time.h>
4067b5038d7SDag-Erling Smørgrav#endif
4077b5038d7SDag-Erling Smørgrav#include <unistd.h>
4087b5038d7SDag-Erling Smørgrav#ifdef HAVE_GETOPT_H
4097b5038d7SDag-Erling Smørgrav#include <getopt.h>
4107b5038d7SDag-Erling Smørgrav#endif
4117b5038d7SDag-Erling Smørgrav
4127b5038d7SDag-Erling Smørgravint test() {
4137b5038d7SDag-Erling Smørgrav        int a;
4147b5038d7SDag-Erling Smørgrav        char **opts = NULL;
4157b5038d7SDag-Erling Smørgrav        struct timeval tv;
4167b5038d7SDag-Erling Smørgrav        tv.tv_usec = 10;
4177b5038d7SDag-Erling Smørgrav        srandom(32);
4187b5038d7SDag-Erling Smørgrav        a = getopt(2, opts, "a");
4197b5038d7SDag-Erling Smørgrav        a = isascii(32);
4207b5038d7SDag-Erling Smørgrav	if(tv.tv_usec)
4217b5038d7SDag-Erling Smørgrav		a = 0;
4227b5038d7SDag-Erling Smørgrav        return a;
4237b5038d7SDag-Erling Smørgrav}
4247b5038d7SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D__EXTENSIONS__"])
4257b5038d7SDag-Erling Smørgrav
4267b5038d7SDag-Erling Smørgrav])dnl End of ACX_DETERMINE_EXT_FLAGS_UNBOUND
4277b5038d7SDag-Erling Smørgrav
4287b5038d7SDag-Erling Smørgravdnl Check if CC supports -flto.
4297b5038d7SDag-Erling Smørgravdnl in a way that supports clang and suncc (that flag does something else,
4307b5038d7SDag-Erling Smørgravdnl but fails to link).  It sets it in CFLAGS if it works.
43117d15b25SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_FLTO], [
43217d15b25SDag-Erling Smørgrav    AC_ARG_ENABLE([flto], AS_HELP_STRING([--disable-flto], [Disable link-time optimization (gcc specific option)]))
43317d15b25SDag-Erling Smørgrav    AS_IF([test "x$enable_flto" != "xno"], [
43417d15b25SDag-Erling Smørgrav        AC_MSG_CHECKING([if $CC supports -flto])
4357b5038d7SDag-Erling Smørgrav        BAKCFLAGS="$CFLAGS"
4367b5038d7SDag-Erling Smørgrav        CFLAGS="$CFLAGS -flto"
4377b5038d7SDag-Erling Smørgrav        AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
438986ba33cSDag-Erling Smørgrav            if $CC $CFLAGS -o conftest conftest.c 2>&1 | $GREP -e "warning: no debug symbols in executable" -e "warning: object" >/dev/null; then
4397b5038d7SDag-Erling Smørgrav                CFLAGS="$BAKCFLAGS"
4407b5038d7SDag-Erling Smørgrav                AC_MSG_RESULT(no)
4417b5038d7SDag-Erling Smørgrav            else
4427b5038d7SDag-Erling Smørgrav                AC_MSG_RESULT(yes)
4437b5038d7SDag-Erling Smørgrav            fi
4447b5038d7SDag-Erling Smørgrav            rm -f conftest conftest.c conftest.o
4457b5038d7SDag-Erling Smørgrav        ], [CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)])
4467b5038d7SDag-Erling Smørgrav    ])
44717d15b25SDag-Erling Smørgrav])
4487b5038d7SDag-Erling Smørgrav
4497b5038d7SDag-Erling Smørgravdnl Check the printf-format attribute (if any)
4507b5038d7SDag-Erling Smørgravdnl result in HAVE_ATTR_FORMAT.
4517b5038d7SDag-Erling Smørgravdnl Make sure you also include the AHX_CONFIG_FORMAT_ATTRIBUTE.
4527b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_FORMAT_ATTRIBUTE],
4537b5038d7SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
4547b5038d7SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "format" attribute)
4557b5038d7SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_format_attribute,
4567b5038d7SDag-Erling Smørgrav[ac_cv_c_format_attribute=no
457*5afab0e5SDag-Erling SmørgravAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
4587b5038d7SDag-Erling Smørgravvoid f (char *format, ...) __attribute__ ((format (printf, 1, 2)));
4597b5038d7SDag-Erling Smørgravvoid (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2)));
460*5afab0e5SDag-Erling Smørgrav]], [[
4617b5038d7SDag-Erling Smørgrav   f ("%s", "str");
462*5afab0e5SDag-Erling Smørgrav]])],[ac_cv_c_format_attribute="yes"],[ac_cv_c_format_attribute="no"])
4637b5038d7SDag-Erling Smørgrav])
4647b5038d7SDag-Erling Smørgrav
4657b5038d7SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_format_attribute)
4667b5038d7SDag-Erling Smørgravif test $ac_cv_c_format_attribute = yes; then
4677b5038d7SDag-Erling Smørgrav  AC_DEFINE(HAVE_ATTR_FORMAT, 1, [Whether the C compiler accepts the "format" attribute])
4687b5038d7SDag-Erling Smørgravfi
4697b5038d7SDag-Erling Smørgrav])dnl End of ACX_CHECK_FORMAT_ATTRIBUTE
4707b5038d7SDag-Erling Smørgrav
4717b5038d7SDag-Erling Smørgravdnl Setup ATTR_FORMAT config.h parts.
4727b5038d7SDag-Erling Smørgravdnl make sure you call ACX_CHECK_FORMAT_ATTRIBUTE also.
4737b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FORMAT_ATTRIBUTE],
4747b5038d7SDag-Erling Smørgrav[
4757b5038d7SDag-Erling Smørgrav#ifdef HAVE_ATTR_FORMAT
4767b5038d7SDag-Erling Smørgrav#  define ATTR_FORMAT(archetype, string_index, first_to_check) \
4777b5038d7SDag-Erling Smørgrav    __attribute__ ((format (archetype, string_index, first_to_check)))
4787b5038d7SDag-Erling Smørgrav#else /* !HAVE_ATTR_FORMAT */
4797b5038d7SDag-Erling Smørgrav#  define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */
4807b5038d7SDag-Erling Smørgrav#endif /* !HAVE_ATTR_FORMAT */
4817b5038d7SDag-Erling Smørgrav])
4827b5038d7SDag-Erling Smørgrav
4837b5038d7SDag-Erling Smørgravdnl Check how to mark function arguments as unused.
4847b5038d7SDag-Erling Smørgravdnl result in HAVE_ATTR_UNUSED.
4857b5038d7SDag-Erling Smørgravdnl Make sure you include AHX_CONFIG_UNUSED_ATTRIBUTE also.
4867b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_UNUSED_ATTRIBUTE],
4877b5038d7SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
4887b5038d7SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "unused" attribute)
4897b5038d7SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_unused_attribute,
4907b5038d7SDag-Erling Smørgrav[ac_cv_c_unused_attribute=no
491*5afab0e5SDag-Erling SmørgravAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
4927b5038d7SDag-Erling Smørgravvoid f (char *u __attribute__((unused)));
493*5afab0e5SDag-Erling Smørgrav]], [[
4947b5038d7SDag-Erling Smørgrav   f ("x");
495*5afab0e5SDag-Erling Smørgrav]])],[ac_cv_c_unused_attribute="yes"],[ac_cv_c_unused_attribute="no"])
4967b5038d7SDag-Erling Smørgrav])
4977b5038d7SDag-Erling Smørgrav
4987b5038d7SDag-Erling Smørgravdnl Setup ATTR_UNUSED config.h parts.
4997b5038d7SDag-Erling Smørgravdnl make sure you call ACX_CHECK_UNUSED_ATTRIBUTE also.
5007b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_UNUSED_ATTRIBUTE],
5017b5038d7SDag-Erling Smørgrav[
5027b5038d7SDag-Erling Smørgrav#if defined(DOXYGEN)
5037b5038d7SDag-Erling Smørgrav#  define ATTR_UNUSED(x)  x
5047b5038d7SDag-Erling Smørgrav#elif defined(__cplusplus)
5057b5038d7SDag-Erling Smørgrav#  define ATTR_UNUSED(x)
5067b5038d7SDag-Erling Smørgrav#elif defined(HAVE_ATTR_UNUSED)
5077b5038d7SDag-Erling Smørgrav#  define ATTR_UNUSED(x)  x __attribute__((unused))
5087b5038d7SDag-Erling Smørgrav#else /* !HAVE_ATTR_UNUSED */
5097b5038d7SDag-Erling Smørgrav#  define ATTR_UNUSED(x)  x
5107b5038d7SDag-Erling Smørgrav#endif /* !HAVE_ATTR_UNUSED */
5117b5038d7SDag-Erling Smørgrav])
5127b5038d7SDag-Erling Smørgrav
5137b5038d7SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_unused_attribute)
5147b5038d7SDag-Erling Smørgravif test $ac_cv_c_unused_attribute = yes; then
5157b5038d7SDag-Erling Smørgrav  AC_DEFINE(HAVE_ATTR_UNUSED, 1, [Whether the C compiler accepts the "unused" attribute])
5167b5038d7SDag-Erling Smørgravfi
5177b5038d7SDag-Erling Smørgrav])dnl
5187b5038d7SDag-Erling Smørgrav
5197b5038d7SDag-Erling Smørgravdnl Pre-fun for ACX_LIBTOOL_C_ONLY
5207b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_LIBTOOL_C_PRE], [
5217b5038d7SDag-Erling Smørgrav# skip these tests, we do not need them.
5227b5038d7SDag-Erling SmørgravAC_DEFUN([AC_PROG_F77], [:])
5237b5038d7SDag-Erling SmørgravAC_DEFUN([AC_PROG_FC], [:])
5247b5038d7SDag-Erling SmørgravAC_DEFUN([AC_PROG_CXX], [:])
5257b5038d7SDag-Erling SmørgravAC_DEFUN([AC_PROG_CXXCPP], [:])
5267b5038d7SDag-Erling SmørgravAC_DEFUN([AC_PROG_OBJC], [:])
5277b5038d7SDag-Erling SmørgravAC_DEFUN([AC_PROG_OBJCCPP], [:])
5287b5038d7SDag-Erling SmørgravAC_DEFUN([AC_LIBTOOL_CXX], [:])
5297b5038d7SDag-Erling SmørgravAC_DEFUN([AC_LIBTOOL_F77], [:])
5307b5038d7SDag-Erling Smørgrav# always use ./libtool unless override from commandline (libtool=mylibtool)
5317b5038d7SDag-Erling Smørgravif test -z "$libtool"; then
5327b5038d7SDag-Erling Smørgrav	libtool="./libtool"
5337b5038d7SDag-Erling Smørgravfi
5347b5038d7SDag-Erling SmørgravAC_SUBST(libtool)
5357b5038d7SDag-Erling Smørgrav# avoid libtool max commandline length test on systems that fork slowly.
5367b5038d7SDag-Erling SmørgravAC_CANONICAL_HOST
5377b5038d7SDag-Erling Smørgravif echo "$host_os" | grep "sunos4" >/dev/null; then
5387b5038d7SDag-Erling Smørgrav	lt_cv_sys_max_cmd_len=32750;
5397b5038d7SDag-Erling Smørgravfi
5407b5038d7SDag-Erling SmørgravAC_PATH_TOOL(AR, ar, [false])
5417b5038d7SDag-Erling Smørgravif test $AR = false; then
5427b5038d7SDag-Erling Smørgrav	AC_MSG_ERROR([Cannot find 'ar', please extend PATH to include it])
5437b5038d7SDag-Erling Smørgravfi
5447b5038d7SDag-Erling Smørgrav])
5457b5038d7SDag-Erling Smørgrav
5467b5038d7SDag-Erling Smørgravdnl Perform libtool check, portably, only for C
5477b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_LIBTOOL_C_ONLY], [
5487b5038d7SDag-Erling Smørgravdnl as a requirement so that is gets called before LIBTOOL
5497b5038d7SDag-Erling Smørgravdnl because libtools 'AC_REQUIRE' names are right after this one, before
5507b5038d7SDag-Erling Smørgravdnl this function contents.
5517b5038d7SDag-Erling SmørgravAC_REQUIRE([ACX_LIBTOOL_C_PRE])
552*5afab0e5SDag-Erling SmørgravLT_INIT
5537b5038d7SDag-Erling Smørgrav])
5547b5038d7SDag-Erling Smørgrav
5557b5038d7SDag-Erling Smørgravdnl Detect if u_char type is defined, otherwise define it.
5567b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_U_CHAR],
5577b5038d7SDag-Erling Smørgrav[AC_CHECK_TYPE([u_char], ,
5587b5038d7SDag-Erling Smørgrav	[AC_DEFINE([u_char], [unsigned char], [Define to 'unsigned char if not defined])], [
5597b5038d7SDag-Erling SmørgravAC_INCLUDES_DEFAULT
5607b5038d7SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
5617b5038d7SDag-Erling Smørgrav#  include <winsock2.h>
5627b5038d7SDag-Erling Smørgrav#endif
5637b5038d7SDag-Erling Smørgrav]) ])
5647b5038d7SDag-Erling Smørgrav
5657b5038d7SDag-Erling Smørgravdnl Detect if rlim_t type is defined, otherwise define it.
5667b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_RLIM_T],
5677b5038d7SDag-Erling Smørgrav[AC_CHECK_TYPE(rlim_t, ,
5687b5038d7SDag-Erling Smørgrav	[AC_DEFINE([rlim_t], [unsigned long], [Define to 'int' if not defined])], [
5697b5038d7SDag-Erling SmørgravAC_INCLUDES_DEFAULT
5707b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_RESOURCE_H
5717b5038d7SDag-Erling Smørgrav#  include <sys/resource.h>
5727b5038d7SDag-Erling Smørgrav#endif
5737b5038d7SDag-Erling Smørgrav]) ])
5747b5038d7SDag-Erling Smørgrav
5757b5038d7SDag-Erling Smørgravdnl Detect if socklen_t type is defined, otherwise define it.
5767b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_SOCKLEN_T],
5777b5038d7SDag-Erling Smørgrav[
5787b5038d7SDag-Erling SmørgravAC_CHECK_TYPE(socklen_t, ,
5797b5038d7SDag-Erling Smørgrav	[AC_DEFINE([socklen_t], [int], [Define to 'int' if not defined])], [
5807b5038d7SDag-Erling SmørgravAC_INCLUDES_DEFAULT
5817b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
5827b5038d7SDag-Erling Smørgrav#  include <sys/socket.h>
5837b5038d7SDag-Erling Smørgrav#endif
5847b5038d7SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H
5857b5038d7SDag-Erling Smørgrav#  include <ws2tcpip.h>
5867b5038d7SDag-Erling Smørgrav#endif
5877b5038d7SDag-Erling Smørgrav]) ])
5887b5038d7SDag-Erling Smørgrav
5897b5038d7SDag-Erling Smørgravdnl Detect if in_addr_t type is defined, otherwise define it.
5907b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_IN_ADDR_T],
5917b5038d7SDag-Erling Smørgrav[ AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [
5927b5038d7SDag-Erling SmørgravAC_INCLUDES_DEFAULT
5937b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_TYPES_H
5947b5038d7SDag-Erling Smørgrav# include <sys/types.h>
5957b5038d7SDag-Erling Smørgrav#endif
5967b5038d7SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
5977b5038d7SDag-Erling Smørgrav# include <netinet/in.h>
5987b5038d7SDag-Erling Smørgrav#endif
5997b5038d7SDag-Erling Smørgrav]) ])
6007b5038d7SDag-Erling Smørgrav
6017b5038d7SDag-Erling Smørgravdnl Detect if in_port_t type is defined, otherwise define it.
6027b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_TYPE_IN_PORT_T],
6037b5038d7SDag-Erling Smørgrav[ AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [
6047b5038d7SDag-Erling SmørgravAC_INCLUDES_DEFAULT
6057b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_TYPES_H
6067b5038d7SDag-Erling Smørgrav# include <sys/types.h>
6077b5038d7SDag-Erling Smørgrav#endif
6087b5038d7SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
6097b5038d7SDag-Erling Smørgrav# include <netinet/in.h>
6107b5038d7SDag-Erling Smørgrav#endif
6117b5038d7SDag-Erling Smørgrav]) ])
6127b5038d7SDag-Erling Smørgrav
6137b5038d7SDag-Erling Smørgravdnl Add option to disable the evil rpath. Check whether to use rpath or not.
6147b5038d7SDag-Erling Smørgravdnl Adds the --disable-rpath option. Uses trick to edit the ./libtool.
6157b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_ARG_RPATH],
6167b5038d7SDag-Erling Smørgrav[
6177b5038d7SDag-Erling SmørgravAC_ARG_ENABLE(rpath,
6187b5038d7SDag-Erling Smørgrav        [  --disable-rpath         disable hardcoded rpath (default=enabled)],
6197b5038d7SDag-Erling Smørgrav	enable_rpath=$enableval, enable_rpath=yes)
6207b5038d7SDag-Erling Smørgravif test "x$enable_rpath" = xno; then
6217b5038d7SDag-Erling Smørgrav	dnl AC_MSG_RESULT([Fixing libtool for -rpath problems.])
6227b5038d7SDag-Erling Smørgrav	AC_CONFIG_COMMANDS([disable-rpath], [
6237b5038d7SDag-Erling Smørgrav	sed < libtool > libtool-2 \
6247b5038d7SDag-Erling Smørgrav	's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_RPATH_SED__ "/'
6257b5038d7SDag-Erling Smørgrav	mv libtool-2 libtool
6267b5038d7SDag-Erling Smørgrav	chmod 755 libtool
6277b5038d7SDag-Erling Smørgrav	libtool="./libtool"
6287b5038d7SDag-Erling Smørgrav	])
6297b5038d7SDag-Erling Smørgravfi
6307b5038d7SDag-Erling Smørgrav])
6317b5038d7SDag-Erling Smørgrav
6327b5038d7SDag-Erling Smørgravdnl Add a -R to the RUNTIME_PATH.  Only if rpath is enabled and it is
6337b5038d7SDag-Erling Smørgravdnl an absolute path.
6347b5038d7SDag-Erling Smørgravdnl $1: the pathname to add.
6357b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_RUNTIME_PATH_ADD], [
6367b5038d7SDag-Erling Smørgrav	if test "x$enable_rpath" = xyes; then
6377b5038d7SDag-Erling Smørgrav		if echo "$1" | grep "^/" >/dev/null; then
6387b5038d7SDag-Erling Smørgrav			RUNTIME_PATH="$RUNTIME_PATH -R$1"
6397b5038d7SDag-Erling Smørgrav		fi
6407b5038d7SDag-Erling Smørgrav	fi
6417b5038d7SDag-Erling Smørgrav])
6427b5038d7SDag-Erling Smørgrav
6437b5038d7SDag-Erling Smørgravdnl Common code for both ACX_WITH_SSL and ACX_WITH_SSL_OPTIONAL
6447b5038d7SDag-Erling Smørgravdnl Takes one argument; the withval checked in those 2 functions
6457b5038d7SDag-Erling Smørgravdnl sets up the environment for the given openssl path
6467b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_SSL_CHECKS], [
6477b5038d7SDag-Erling Smørgrav    withval=$1
6487b5038d7SDag-Erling Smørgrav    if test x_$withval != x_no; then
6497b5038d7SDag-Erling Smørgrav        AC_MSG_CHECKING(for SSL)
6507b5038d7SDag-Erling Smørgrav        if test x_$withval = x_ -o x_$withval = x_yes; then
6517b5038d7SDag-Erling Smørgrav            withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr"
6527b5038d7SDag-Erling Smørgrav        fi
6537b5038d7SDag-Erling Smørgrav        for dir in $withval; do
6547b5038d7SDag-Erling Smørgrav            ssldir="$dir"
6557b5038d7SDag-Erling Smørgrav            if test -f "$dir/include/openssl/ssl.h"; then
6567b5038d7SDag-Erling Smørgrav                found_ssl="yes"
6577b5038d7SDag-Erling Smørgrav                AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.])
6587b5038d7SDag-Erling Smørgrav                dnl assume /usr/include is already in the include-path.
6597b5038d7SDag-Erling Smørgrav                if test "$ssldir" != "/usr"; then
6607b5038d7SDag-Erling Smørgrav                        CPPFLAGS="$CPPFLAGS -I$ssldir/include"
6617b5038d7SDag-Erling Smørgrav                        LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include"
6627b5038d7SDag-Erling Smørgrav                fi
6637b5038d7SDag-Erling Smørgrav                break;
6647b5038d7SDag-Erling Smørgrav            fi
6657b5038d7SDag-Erling Smørgrav        done
6667b5038d7SDag-Erling Smørgrav        if test x_$found_ssl != x_yes; then
6677b5038d7SDag-Erling Smørgrav            AC_MSG_ERROR(Cannot find the SSL libraries in $withval)
6687b5038d7SDag-Erling Smørgrav        else
6697b5038d7SDag-Erling Smørgrav            AC_MSG_RESULT(found in $ssldir)
6707b5038d7SDag-Erling Smørgrav            HAVE_SSL=yes
6717b5038d7SDag-Erling Smørgrav            dnl assume /usr is already in the lib and dynlib paths.
6727b5038d7SDag-Erling Smørgrav            if test "$ssldir" != "/usr" -a "$ssldir" != ""; then
673*5afab0e5SDag-Erling Smørgrav		if test ! -d "$ssldir/lib" -a -d "$ssldir/lib64"; then
674*5afab0e5SDag-Erling Smørgrav			LDFLAGS="$LDFLAGS -L$ssldir/lib64"
675*5afab0e5SDag-Erling Smørgrav			LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib64"
676*5afab0e5SDag-Erling Smørgrav			ACX_RUNTIME_PATH_ADD([$ssldir/lib64])
677*5afab0e5SDag-Erling Smørgrav		else
6787b5038d7SDag-Erling Smørgrav			LDFLAGS="$LDFLAGS -L$ssldir/lib"
6797b5038d7SDag-Erling Smørgrav			LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib"
6807b5038d7SDag-Erling Smørgrav			ACX_RUNTIME_PATH_ADD([$ssldir/lib])
6817b5038d7SDag-Erling Smørgrav		fi
682*5afab0e5SDag-Erling Smørgrav            fi
6837b5038d7SDag-Erling Smørgrav
684*5afab0e5SDag-Erling Smørgrav            AC_MSG_CHECKING([for EVP_sha256 in -lcrypto])
6857b5038d7SDag-Erling Smørgrav            LIBS="$LIBS -lcrypto"
6867b5038d7SDag-Erling Smørgrav            LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto"
687*5afab0e5SDag-Erling Smørgrav            AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
688*5afab0e5SDag-Erling Smørgrav                int EVP_sha256(void);
689*5afab0e5SDag-Erling Smørgrav                (void)EVP_sha256();
690*5afab0e5SDag-Erling Smørgrav              ]])],[
6917b5038d7SDag-Erling Smørgrav                AC_MSG_RESULT(yes)
692*5afab0e5SDag-Erling Smørgrav                AC_DEFINE([HAVE_EVP_SHA256], 1,
693*5afab0e5SDag-Erling Smørgrav                          [If you have EVP_sha256])
6947b5038d7SDag-Erling Smørgrav              ],[
6957b5038d7SDag-Erling Smørgrav                AC_MSG_RESULT(no)
6967b5038d7SDag-Erling Smørgrav                # check if -lwsock32 or -lgdi32 are needed.
6977b5038d7SDag-Erling Smørgrav                BAKLIBS="$LIBS"
6987b5038d7SDag-Erling Smørgrav                BAKSSLLIBS="$LIBSSL_LIBS"
699*5afab0e5SDag-Erling Smørgrav		LIBS="$LIBS -lgdi32 -lws2_32"
700*5afab0e5SDag-Erling Smørgrav		LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32"
7017b5038d7SDag-Erling Smørgrav                AC_MSG_CHECKING([if -lcrypto needs -lgdi32])
702*5afab0e5SDag-Erling Smørgrav                AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
703*5afab0e5SDag-Erling Smørgrav                    int EVP_sha256(void);
704*5afab0e5SDag-Erling Smørgrav                    (void)EVP_sha256();
705*5afab0e5SDag-Erling Smørgrav                  ]])],[
706*5afab0e5SDag-Erling Smørgrav                    AC_DEFINE([HAVE_EVP_SHA256], 1,
707*5afab0e5SDag-Erling Smørgrav                        [If you have EVP_sha256])
7087b5038d7SDag-Erling Smørgrav                    AC_MSG_RESULT(yes)
7097b5038d7SDag-Erling Smørgrav                  ],[
7107b5038d7SDag-Erling Smørgrav                    AC_MSG_RESULT(no)
7117b5038d7SDag-Erling Smørgrav                    LIBS="$BAKLIBS"
7127b5038d7SDag-Erling Smørgrav                    LIBSSL_LIBS="$BAKSSLLIBS"
7137b5038d7SDag-Erling Smørgrav                    LIBS="$LIBS -ldl"
7147b5038d7SDag-Erling Smørgrav                    LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
7157b5038d7SDag-Erling Smørgrav                    AC_MSG_CHECKING([if -lcrypto needs -ldl])
716*5afab0e5SDag-Erling Smørgrav                    AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
717*5afab0e5SDag-Erling Smørgrav                        int EVP_sha256(void);
718*5afab0e5SDag-Erling Smørgrav                        (void)EVP_sha256();
719*5afab0e5SDag-Erling Smørgrav                      ]])],[
720*5afab0e5SDag-Erling Smørgrav                        AC_DEFINE([HAVE_EVP_SHA256], 1,
721*5afab0e5SDag-Erling Smørgrav                            [If you have EVP_sha256])
722986ba33cSDag-Erling Smørgrav                        AC_MSG_RESULT(yes)
723986ba33cSDag-Erling Smørgrav                      ],[
724986ba33cSDag-Erling Smørgrav                        AC_MSG_RESULT(no)
725986ba33cSDag-Erling Smørgrav                        LIBS="$BAKLIBS"
726986ba33cSDag-Erling Smørgrav                        LIBSSL_LIBS="$BAKSSLLIBS"
727986ba33cSDag-Erling Smørgrav                        LIBS="$LIBS -ldl -pthread"
728986ba33cSDag-Erling Smørgrav                        LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
729986ba33cSDag-Erling Smørgrav                        AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread])
730*5afab0e5SDag-Erling Smørgrav                        AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
731*5afab0e5SDag-Erling Smørgrav                            int EVP_sha256(void);
732*5afab0e5SDag-Erling Smørgrav                            (void)EVP_sha256();
733*5afab0e5SDag-Erling Smørgrav                          ]])],[
734*5afab0e5SDag-Erling Smørgrav                            AC_DEFINE([HAVE_EVP_SHA256], 1,
735*5afab0e5SDag-Erling Smørgrav                                [If you have EVP_sha256])
7367b5038d7SDag-Erling Smørgrav                            AC_MSG_RESULT(yes)
7377b5038d7SDag-Erling Smørgrav                          ],[
7387b5038d7SDag-Erling Smørgrav                            AC_MSG_RESULT(no)
7397b5038d7SDag-Erling Smørgrav                            AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required])
7407b5038d7SDag-Erling Smørgrav			])
7417b5038d7SDag-Erling Smørgrav                    ])
7427b5038d7SDag-Erling Smørgrav                ])
743986ba33cSDag-Erling Smørgrav            ])
7447b5038d7SDag-Erling Smørgrav        fi
7457b5038d7SDag-Erling Smørgrav        AC_SUBST(HAVE_SSL)
7467b5038d7SDag-Erling Smørgrav        AC_SUBST(RUNTIME_PATH)
7477b5038d7SDag-Erling Smørgrav    fi
7487b5038d7SDag-Erling SmørgravAC_CHECK_HEADERS([openssl/ssl.h],,, [AC_INCLUDES_DEFAULT])
7497b5038d7SDag-Erling SmørgravAC_CHECK_HEADERS([openssl/err.h],,, [AC_INCLUDES_DEFAULT])
7507b5038d7SDag-Erling SmørgravAC_CHECK_HEADERS([openssl/rand.h],,, [AC_INCLUDES_DEFAULT])
7517b5038d7SDag-Erling Smørgrav])dnl End of ACX_SSL_CHECKS
7527b5038d7SDag-Erling Smørgrav
7537b5038d7SDag-Erling Smørgravdnl Check for SSL, where SSL is mandatory
7547b5038d7SDag-Erling Smørgravdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found
7557b5038d7SDag-Erling Smørgravdnl Setup of CPPFLAGS, CFLAGS.  Adds -lcrypto to LIBS.
7567b5038d7SDag-Erling Smørgravdnl Checks main header files of SSL.
7577b5038d7SDag-Erling Smørgravdnl
7587b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_WITH_SSL],
7597b5038d7SDag-Erling Smørgrav[
760*5afab0e5SDag-Erling SmørgravAC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl
7617b5038d7SDag-Erling Smørgrav                            /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[
7627b5038d7SDag-Erling Smørgrav        ],[
7637b5038d7SDag-Erling Smørgrav            withval="yes"
7647b5038d7SDag-Erling Smørgrav        ])
7657b5038d7SDag-Erling Smørgrav    if test x_$withval = x_no; then
7667b5038d7SDag-Erling Smørgrav	AC_MSG_ERROR([Need SSL library to do digital signature cryptography])
7677b5038d7SDag-Erling Smørgrav    fi
7687b5038d7SDag-Erling Smørgrav    ACX_SSL_CHECKS($withval)
7697b5038d7SDag-Erling Smørgrav])dnl End of ACX_WITH_SSL
7707b5038d7SDag-Erling Smørgrav
7717b5038d7SDag-Erling Smørgravdnl Check for SSL, where ssl is optional (--without-ssl is allowed)
7727b5038d7SDag-Erling Smørgravdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found
7737b5038d7SDag-Erling Smørgravdnl Setup of CPPFLAGS, CFLAGS.  Adds -lcrypto to LIBS.
7747b5038d7SDag-Erling Smørgravdnl Checks main header files of SSL.
7757b5038d7SDag-Erling Smørgravdnl
7767b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_WITH_SSL_OPTIONAL],
7777b5038d7SDag-Erling Smørgrav[
778*5afab0e5SDag-Erling SmørgravAC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl
7797b5038d7SDag-Erling Smørgrav                                /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[
7807b5038d7SDag-Erling Smørgrav        ],[
7817b5038d7SDag-Erling Smørgrav            withval="yes"
7827b5038d7SDag-Erling Smørgrav        ])
7837b5038d7SDag-Erling Smørgrav    ACX_SSL_CHECKS($withval)
7847b5038d7SDag-Erling Smørgrav])dnl End of ACX_WITH_SSL_OPTIONAL
7857b5038d7SDag-Erling Smørgrav
7867b5038d7SDag-Erling Smørgravdnl Setup to use -lssl
7877b5038d7SDag-Erling Smørgravdnl To use -lcrypto, use the ACX_WITH_SSL setup (before this one).
7887b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_LIB_SSL],
7897b5038d7SDag-Erling Smørgrav[
7907b5038d7SDag-Erling Smørgrav# check if libssl needs libdl
7917b5038d7SDag-Erling SmørgravBAKLIBS="$LIBS"
7927b5038d7SDag-Erling SmørgravLIBS="-lssl $LIBS"
7937b5038d7SDag-Erling SmørgravAC_MSG_CHECKING([if libssl needs libdl])
7947b5038d7SDag-Erling SmørgravAC_TRY_LINK_FUNC([SSL_CTX_new], [
7957b5038d7SDag-Erling Smørgrav	AC_MSG_RESULT([no])
7967b5038d7SDag-Erling Smørgrav	LIBS="$BAKLIBS"
7977b5038d7SDag-Erling Smørgrav] , [
7987b5038d7SDag-Erling Smørgrav	AC_MSG_RESULT([yes])
7997b5038d7SDag-Erling Smørgrav	LIBS="$BAKLIBS"
8007b5038d7SDag-Erling Smørgrav	AC_SEARCH_LIBS([dlopen], [dl])
8017b5038d7SDag-Erling Smørgrav]) ])dnl End of ACX_LIB_SSL
8027b5038d7SDag-Erling Smørgrav
8037b5038d7SDag-Erling Smørgravdnl Setup to use very large files (>2Gb).
8047b5038d7SDag-Erling Smørgravdnl setups fseeko and its own
8057b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_SYS_LARGEFILE],
8067b5038d7SDag-Erling Smørgrav[
8077b5038d7SDag-Erling SmørgravAC_SYS_LARGEFILE
8087b5038d7SDag-Erling Smørgravdnl try to see if an additional _LARGEFILE_SOURCE 1 is needed to get fseeko
8097b5038d7SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG_NEEDED(-D_LARGEFILE_SOURCE=1,
8107b5038d7SDag-Erling Smørgrav[
8117b5038d7SDag-Erling Smørgrav#include <stdio.h>
8127b5038d7SDag-Erling Smørgravint test() {
8137b5038d7SDag-Erling Smørgrav        int a = fseeko(stdin, 0, 0);
8147b5038d7SDag-Erling Smørgrav        return a;
8157b5038d7SDag-Erling Smørgrav}
8167b5038d7SDag-Erling Smørgrav], [CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE=1"])
8177b5038d7SDag-Erling Smørgrav])
8187b5038d7SDag-Erling Smørgrav
8197b5038d7SDag-Erling Smørgravdnl Check getaddrinfo.
8207b5038d7SDag-Erling Smørgravdnl Works on linux, solaris, bsd and windows(links winsock).
8217b5038d7SDag-Erling Smørgravdnl defines HAVE_GETADDRINFO, USE_WINSOCK.
8227b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_GETADDRINFO_WITH_INCLUDES],
8237b5038d7SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
8247b5038d7SDag-Erling SmørgravAC_MSG_CHECKING(for getaddrinfo)
8257b5038d7SDag-Erling Smørgravac_cv_func_getaddrinfo=no
8267b5038d7SDag-Erling SmørgravAC_LINK_IFELSE(
8277b5038d7SDag-Erling Smørgrav[AC_LANG_SOURCE([[
8287b5038d7SDag-Erling Smørgrav#ifdef __cplusplus
8297b5038d7SDag-Erling Smørgravextern "C"
8307b5038d7SDag-Erling Smørgrav{
8317b5038d7SDag-Erling Smørgrav#endif
8327b5038d7SDag-Erling Smørgravchar* getaddrinfo();
8337b5038d7SDag-Erling Smørgravchar* (*f) () = getaddrinfo;
8347b5038d7SDag-Erling Smørgrav#ifdef __cplusplus
8357b5038d7SDag-Erling Smørgrav}
8367b5038d7SDag-Erling Smørgrav#endif
8377b5038d7SDag-Erling Smørgravint main() {
8387b5038d7SDag-Erling Smørgrav        ;
8397b5038d7SDag-Erling Smørgrav        return 0;
8407b5038d7SDag-Erling Smørgrav}
8417b5038d7SDag-Erling Smørgrav]])],
8427b5038d7SDag-Erling Smørgravdnl this case on linux, solaris, bsd
8437b5038d7SDag-Erling Smørgrav[ac_cv_func_getaddrinfo="yes"
8447b5038d7SDag-Erling Smørgravdnl see if on windows
8457b5038d7SDag-Erling Smørgravif test "$ac_cv_header_windows_h" = "yes"; then
8467b5038d7SDag-Erling Smørgrav	AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
8477b5038d7SDag-Erling Smørgrav	USE_WINSOCK="1"
848*5afab0e5SDag-Erling Smørgrav	if echo $LIBS | grep 'lws2_32' >/dev/null; then
849*5afab0e5SDag-Erling Smørgrav		:
850*5afab0e5SDag-Erling Smørgrav	else
8517b5038d7SDag-Erling Smørgrav		LIBS="$LIBS -lws2_32"
8527b5038d7SDag-Erling Smørgrav	fi
853*5afab0e5SDag-Erling Smørgravfi
8547b5038d7SDag-Erling Smørgrav],
8557b5038d7SDag-Erling Smørgravdnl no quick getaddrinfo, try mingw32 and winsock2 library.
8567b5038d7SDag-Erling SmørgravORIGLIBS="$LIBS"
8577b5038d7SDag-Erling SmørgravLIBS="$LIBS -lws2_32"
8587b5038d7SDag-Erling SmørgravAC_LINK_IFELSE(
8597b5038d7SDag-Erling Smørgrav[AC_LANG_PROGRAM(
8607b5038d7SDag-Erling Smørgrav[
8617b5038d7SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H
8627b5038d7SDag-Erling Smørgrav#include <ws2tcpip.h>
8637b5038d7SDag-Erling Smørgrav#endif
8647b5038d7SDag-Erling Smørgrav],
8657b5038d7SDag-Erling Smørgrav[
8667b5038d7SDag-Erling Smørgrav        (void)getaddrinfo(NULL, NULL, NULL, NULL);
8677b5038d7SDag-Erling Smørgrav]
8687b5038d7SDag-Erling Smørgrav)],
8697b5038d7SDag-Erling Smørgrav[
8707b5038d7SDag-Erling Smørgravac_cv_func_getaddrinfo="yes"
8717b5038d7SDag-Erling Smørgravdnl already: LIBS="$LIBS -lws2_32"
8727b5038d7SDag-Erling SmørgravAC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
8737b5038d7SDag-Erling SmørgravUSE_WINSOCK="1"
8747b5038d7SDag-Erling Smørgrav],
8757b5038d7SDag-Erling Smørgrav[
8767b5038d7SDag-Erling Smørgravac_cv_func_getaddrinfo="no"
8777b5038d7SDag-Erling SmørgravLIBS="$ORIGLIBS"
8787b5038d7SDag-Erling Smørgrav])
8797b5038d7SDag-Erling Smørgrav)
8807b5038d7SDag-Erling Smørgrav
8817b5038d7SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_func_getaddrinfo)
8827b5038d7SDag-Erling Smørgravif test $ac_cv_func_getaddrinfo = yes; then
8837b5038d7SDag-Erling Smørgrav  AC_DEFINE(HAVE_GETADDRINFO, 1, [Whether getaddrinfo is available])
8847b5038d7SDag-Erling Smørgravfi
8857b5038d7SDag-Erling Smørgrav])dnl Endof AC_CHECK_GETADDRINFO_WITH_INCLUDES
8867b5038d7SDag-Erling Smørgrav
8877b5038d7SDag-Erling Smørgravdnl check if a function is deprecated. defines DEPRECATED_func in config.h.
8887b5038d7SDag-Erling Smørgravdnl $1: function name
8897b5038d7SDag-Erling Smørgravdnl $2: C-statement that calls the function.
8907b5038d7SDag-Erling Smørgravdnl $3: includes for the program.
8917b5038d7SDag-Erling Smørgravdnl $4: executes if yes
8927b5038d7SDag-Erling Smørgravdnl $5: executes if no
8937b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_FUNC_DEPRECATED],
8947b5038d7SDag-Erling Smørgrav[
8957b5038d7SDag-Erling SmørgravAC_REQUIRE([AC_PROG_CC])
8967b5038d7SDag-Erling SmørgravAC_MSG_CHECKING(if $1 is deprecated)
8977b5038d7SDag-Erling Smørgravcache=`echo $1 | sed 'y%.=/+-%___p_%'`
8987b5038d7SDag-Erling SmørgravAC_CACHE_VAL(cv_cc_deprecated_$cache,
8997b5038d7SDag-Erling Smørgrav[
9007b5038d7SDag-Erling Smørgravecho '$3' >conftest.c
9017b5038d7SDag-Erling Smørgravecho 'void f(){ $2 }' >>conftest.c
902*5afab0e5SDag-Erling Smørgravif test -z "`$CC $CPPFLAGS $CFLAGS -c conftest.c 2>&1 | grep -e deprecated -e unavailable`"; then
9037b5038d7SDag-Erling Smørgraveval "cv_cc_deprecated_$cache=no"
9047b5038d7SDag-Erling Smørgravelse
9057b5038d7SDag-Erling Smørgraveval "cv_cc_deprecated_$cache=yes"
9067b5038d7SDag-Erling Smørgravfi
9077b5038d7SDag-Erling Smørgravrm -f conftest conftest.o conftest.c
9087b5038d7SDag-Erling Smørgrav])
9097b5038d7SDag-Erling Smørgravif eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then
9107b5038d7SDag-Erling SmørgravAC_MSG_RESULT(yes)
9117b5038d7SDag-Erling SmørgravAC_DEFINE_UNQUOTED(AS_TR_CPP([DEPRECATED_$1]), 1, [Whether $1 is deprecated])
9127b5038d7SDag-Erling Smørgrav:
9137b5038d7SDag-Erling Smørgrav$4
9147b5038d7SDag-Erling Smørgravelse
9157b5038d7SDag-Erling SmørgravAC_MSG_RESULT(no)
9167b5038d7SDag-Erling Smørgrav:
9177b5038d7SDag-Erling Smørgrav$5
9187b5038d7SDag-Erling Smørgravfi
9197b5038d7SDag-Erling Smørgrav])dnl end of ACX_FUNC_DEPRECATED
9207b5038d7SDag-Erling Smørgrav
9217b5038d7SDag-Erling Smørgravdnl check if select and nonblocking sockets actually work.
9227b5038d7SDag-Erling Smørgravdnl Needs fork(2) and select(2).
9237b5038d7SDag-Erling Smørgravdnl defines NONBLOCKING_IS_BROKEN, and if that is true multiple reads from
9247b5038d7SDag-Erling Smørgravdnl a nonblocking socket do not work, a new call to select is necessary.
9257b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_NONBLOCKING_BROKEN],
9267b5038d7SDag-Erling Smørgrav[
9277b5038d7SDag-Erling SmørgravAC_MSG_CHECKING([if nonblocking sockets work])
928*5afab0e5SDag-Erling Smørgravif echo $host | grep mingw >/dev/null; then
9297b5038d7SDag-Erling Smørgrav	AC_MSG_RESULT([no (windows)])
9307b5038d7SDag-Erling Smørgrav	AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).])
9317b5038d7SDag-Erling Smørgravelse
9327b5038d7SDag-Erling SmørgravAC_RUN_IFELSE([
9337b5038d7SDag-Erling SmørgravAC_LANG_SOURCE([[
9347b5038d7SDag-Erling Smørgrav#include <stdio.h>
9357b5038d7SDag-Erling Smørgrav#include <string.h>
9367b5038d7SDag-Erling Smørgrav#include <stdlib.h>
9377b5038d7SDag-Erling Smørgrav#include <fcntl.h>
9387b5038d7SDag-Erling Smørgrav#include <errno.h>
9397b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_TYPES_H
9407b5038d7SDag-Erling Smørgrav#include <sys/types.h>
9417b5038d7SDag-Erling Smørgrav#endif
9427b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
9437b5038d7SDag-Erling Smørgrav#include <sys/socket.h>
9447b5038d7SDag-Erling Smørgrav#endif
9457b5038d7SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
9467b5038d7SDag-Erling Smørgrav#include <netinet/in.h>
9477b5038d7SDag-Erling Smørgrav#endif
9487b5038d7SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
9497b5038d7SDag-Erling Smørgrav#include <arpa/inet.h>
9507b5038d7SDag-Erling Smørgrav#endif
9517b5038d7SDag-Erling Smørgrav#ifdef HAVE_UNISTD_H
9527b5038d7SDag-Erling Smørgrav#include <unistd.h>
9537b5038d7SDag-Erling Smørgrav#endif
9547b5038d7SDag-Erling Smørgrav#ifdef HAVE_TIME_H
9557b5038d7SDag-Erling Smørgrav#include <time.h>
9567b5038d7SDag-Erling Smørgrav#endif
9577b5038d7SDag-Erling Smørgrav
9587b5038d7SDag-Erling Smørgravint main(void)
9597b5038d7SDag-Erling Smørgrav{
9607b5038d7SDag-Erling Smørgrav	int port;
9617b5038d7SDag-Erling Smørgrav	int sfd, cfd;
9627b5038d7SDag-Erling Smørgrav	int num = 10;
9637b5038d7SDag-Erling Smørgrav	int i, p;
9647b5038d7SDag-Erling Smørgrav	struct sockaddr_in a;
9657b5038d7SDag-Erling Smørgrav	/* test if select and nonblocking reads work well together */
9667b5038d7SDag-Erling Smørgrav	/* open port.
9677b5038d7SDag-Erling Smørgrav	   fork child to send 10 messages.
9687b5038d7SDag-Erling Smørgrav	   select to read.
9697b5038d7SDag-Erling Smørgrav	   then try to nonblocking read the 10 messages
9707b5038d7SDag-Erling Smørgrav	   then, nonblocking read must give EAGAIN
9717b5038d7SDag-Erling Smørgrav	*/
9727b5038d7SDag-Erling Smørgrav
9737b5038d7SDag-Erling Smørgrav	port = 12345 + (time(0)%32);
9747b5038d7SDag-Erling Smørgrav	sfd = socket(PF_INET, SOCK_DGRAM, 0);
9757b5038d7SDag-Erling Smørgrav	if(sfd == -1) {
9767b5038d7SDag-Erling Smørgrav		perror("socket");
9777b5038d7SDag-Erling Smørgrav		return 1;
9787b5038d7SDag-Erling Smørgrav	}
9797b5038d7SDag-Erling Smørgrav	memset(&a, 0, sizeof(a));
9807b5038d7SDag-Erling Smørgrav	a.sin_family = AF_INET;
9817b5038d7SDag-Erling Smørgrav	a.sin_port = htons(port);
9827b5038d7SDag-Erling Smørgrav	a.sin_addr.s_addr = inet_addr("127.0.0.1");
9837b5038d7SDag-Erling Smørgrav	if(bind(sfd, (struct sockaddr*)&a, sizeof(a)) < 0) {
9847b5038d7SDag-Erling Smørgrav		perror("bind");
9857b5038d7SDag-Erling Smørgrav		return 1;
9867b5038d7SDag-Erling Smørgrav	}
9877b5038d7SDag-Erling Smørgrav	if(fcntl(sfd, F_SETFL, O_NONBLOCK) == -1) {
9887b5038d7SDag-Erling Smørgrav		perror("fcntl");
9897b5038d7SDag-Erling Smørgrav		return 1;
9907b5038d7SDag-Erling Smørgrav	}
9917b5038d7SDag-Erling Smørgrav
9927b5038d7SDag-Erling Smørgrav	cfd = socket(PF_INET, SOCK_DGRAM, 0);
9937b5038d7SDag-Erling Smørgrav	if(cfd == -1) {
9947b5038d7SDag-Erling Smørgrav		perror("client socket");
9957b5038d7SDag-Erling Smørgrav		return 1;
9967b5038d7SDag-Erling Smørgrav	}
9977b5038d7SDag-Erling Smørgrav	a.sin_port = 0;
9987b5038d7SDag-Erling Smørgrav	if(bind(cfd, (struct sockaddr*)&a, sizeof(a)) < 0) {
9997b5038d7SDag-Erling Smørgrav		perror("client bind");
10007b5038d7SDag-Erling Smørgrav		return 1;
10017b5038d7SDag-Erling Smørgrav	}
10027b5038d7SDag-Erling Smørgrav	a.sin_port = htons(port);
10037b5038d7SDag-Erling Smørgrav
10047b5038d7SDag-Erling Smørgrav	/* no handler, causes exit in 10 seconds */
10057b5038d7SDag-Erling Smørgrav	alarm(10);
10067b5038d7SDag-Erling Smørgrav
10077b5038d7SDag-Erling Smørgrav	/* send and receive on the socket */
10087b5038d7SDag-Erling Smørgrav	if((p=fork()) == 0) {
10097b5038d7SDag-Erling Smørgrav		for(i=0; i<num; i++) {
10107b5038d7SDag-Erling Smørgrav			if(sendto(cfd, &i, sizeof(i), 0,
10117b5038d7SDag-Erling Smørgrav				(struct sockaddr*)&a, sizeof(a)) < 0) {
10127b5038d7SDag-Erling Smørgrav				perror("sendto");
10137b5038d7SDag-Erling Smørgrav				return 1;
10147b5038d7SDag-Erling Smørgrav			}
10157b5038d7SDag-Erling Smørgrav		}
10167b5038d7SDag-Erling Smørgrav	} else {
10177b5038d7SDag-Erling Smørgrav		/* parent */
10187b5038d7SDag-Erling Smørgrav		fd_set rset;
10197b5038d7SDag-Erling Smørgrav		int x;
10207b5038d7SDag-Erling Smørgrav		if(p == -1) {
10217b5038d7SDag-Erling Smørgrav			perror("fork");
10227b5038d7SDag-Erling Smørgrav			return 1;
10237b5038d7SDag-Erling Smørgrav		}
10247b5038d7SDag-Erling Smørgrav		FD_ZERO(&rset);
10257b5038d7SDag-Erling Smørgrav		FD_SET(sfd, &rset);
10267b5038d7SDag-Erling Smørgrav		if(select(sfd+1, &rset, NULL, NULL, NULL) < 1) {
10277b5038d7SDag-Erling Smørgrav			perror("select");
10287b5038d7SDag-Erling Smørgrav			return 1;
10297b5038d7SDag-Erling Smørgrav		}
10307b5038d7SDag-Erling Smørgrav		i = 0;
10317b5038d7SDag-Erling Smørgrav		while(i < num) {
10327b5038d7SDag-Erling Smørgrav			if(recv(sfd, &x, sizeof(x), 0) != sizeof(x)) {
10337b5038d7SDag-Erling Smørgrav				if(errno == EAGAIN)
10347b5038d7SDag-Erling Smørgrav					continue;
10357b5038d7SDag-Erling Smørgrav				perror("recv");
10367b5038d7SDag-Erling Smørgrav				return 1;
10377b5038d7SDag-Erling Smørgrav			}
10387b5038d7SDag-Erling Smørgrav			i++;
10397b5038d7SDag-Erling Smørgrav		}
10407b5038d7SDag-Erling Smørgrav		/* now we want to get EAGAIN: nonblocking goodness */
10417b5038d7SDag-Erling Smørgrav		errno = 0;
10427b5038d7SDag-Erling Smørgrav		recv(sfd, &x, sizeof(x), 0);
10437b5038d7SDag-Erling Smørgrav		if(errno != EAGAIN) {
10447b5038d7SDag-Erling Smørgrav			perror("trying to recv again");
10457b5038d7SDag-Erling Smørgrav			return 1;
10467b5038d7SDag-Erling Smørgrav		}
10477b5038d7SDag-Erling Smørgrav		/* EAGAIN encountered */
10487b5038d7SDag-Erling Smørgrav	}
10497b5038d7SDag-Erling Smørgrav
10507b5038d7SDag-Erling Smørgrav	close(sfd);
10517b5038d7SDag-Erling Smørgrav	close(cfd);
10527b5038d7SDag-Erling Smørgrav	return 0;
10537b5038d7SDag-Erling Smørgrav}
10547b5038d7SDag-Erling Smørgrav]])], [
10557b5038d7SDag-Erling Smørgrav	AC_MSG_RESULT([yes])
10567b5038d7SDag-Erling Smørgrav], [
10577b5038d7SDag-Erling Smørgrav	AC_MSG_RESULT([no])
10587b5038d7SDag-Erling Smørgrav	AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).])
10597b5038d7SDag-Erling Smørgrav], [
10607b5038d7SDag-Erling Smørgrav	AC_MSG_RESULT([crosscompile(yes)])
10617b5038d7SDag-Erling Smørgrav])
10627b5038d7SDag-Erling Smørgravfi
10637b5038d7SDag-Erling Smørgrav])dnl End of ACX_CHECK_NONBLOCKING_BROKEN
10647b5038d7SDag-Erling Smørgrav
10657b5038d7SDag-Erling Smørgravdnl Check if mkdir has one or two arguments.
10667b5038d7SDag-Erling Smørgravdnl defines MKDIR_HAS_ONE_ARG
10677b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_MKDIR_ONE_ARG],
10687b5038d7SDag-Erling Smørgrav[
10697b5038d7SDag-Erling SmørgravAC_MSG_CHECKING([whether mkdir has one arg])
1070*5afab0e5SDag-Erling SmørgravAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
10717b5038d7SDag-Erling Smørgrav#include <stdio.h>
10727b5038d7SDag-Erling Smørgrav#include <unistd.h>
10737b5038d7SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
10747b5038d7SDag-Erling Smørgrav#include <winsock2.h>
10757b5038d7SDag-Erling Smørgrav#endif
10767b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_STAT_H
10777b5038d7SDag-Erling Smørgrav#include <sys/stat.h>
10787b5038d7SDag-Erling Smørgrav#endif
1079*5afab0e5SDag-Erling Smørgrav]], [[
10807b5038d7SDag-Erling Smørgrav	(void)mkdir("directory");
1081*5afab0e5SDag-Erling Smørgrav]])],[AC_MSG_RESULT(yes)
10827b5038d7SDag-Erling SmørgravAC_DEFINE(MKDIR_HAS_ONE_ARG, 1, [Define if mkdir has one argument.])
1083*5afab0e5SDag-Erling Smørgrav],[AC_MSG_RESULT(no)
1084*5afab0e5SDag-Erling Smørgrav])
10857b5038d7SDag-Erling Smørgrav])dnl end of ACX_MKDIR_ONE_ARG
10867b5038d7SDag-Erling Smørgrav
10877b5038d7SDag-Erling Smørgravdnl Check for ioctlsocket function. works on mingw32 too.
10887b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_FUNC_IOCTLSOCKET],
10897b5038d7SDag-Erling Smørgrav[
10907b5038d7SDag-Erling Smørgrav# check ioctlsocket
10917b5038d7SDag-Erling SmørgravAC_MSG_CHECKING(for ioctlsocket)
10927b5038d7SDag-Erling SmørgravAC_LINK_IFELSE([AC_LANG_PROGRAM([
10937b5038d7SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
10947b5038d7SDag-Erling Smørgrav#include <winsock2.h>
10957b5038d7SDag-Erling Smørgrav#endif
10967b5038d7SDag-Erling Smørgrav], [
10977b5038d7SDag-Erling Smørgrav	(void)ioctlsocket(0, 0, NULL);
10987b5038d7SDag-Erling Smørgrav])], [
10997b5038d7SDag-Erling SmørgravAC_MSG_RESULT(yes)
11007b5038d7SDag-Erling SmørgravAC_DEFINE(HAVE_IOCTLSOCKET, 1, [if the function 'ioctlsocket' is available])
11017b5038d7SDag-Erling Smørgrav],[AC_MSG_RESULT(no)])
11027b5038d7SDag-Erling Smørgrav])dnl end of ACX_FUNC_IOCTLSOCKET
11037b5038d7SDag-Erling Smørgrav
11047b5038d7SDag-Erling Smørgravdnl detect malloc and provide malloc compat prototype.
11057b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
11067b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_FUNC_MALLOC],
11077b5038d7SDag-Erling Smørgrav[
11087b5038d7SDag-Erling Smørgrav	AC_MSG_CHECKING([for GNU libc compatible malloc])
11097b5038d7SDag-Erling Smørgrav	AC_RUN_IFELSE([AC_LANG_PROGRAM(
11107b5038d7SDag-Erling Smørgrav[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
11117b5038d7SDag-Erling Smørgrav#include <stdlib.h>
11127b5038d7SDag-Erling Smørgrav#else
11137b5038d7SDag-Erling Smørgravchar *malloc ();
11147b5038d7SDag-Erling Smørgrav#endif
11157b5038d7SDag-Erling Smørgrav]], [ if(malloc(0) != 0) return 1;])
11167b5038d7SDag-Erling Smørgrav],
11177b5038d7SDag-Erling Smørgrav	[AC_MSG_RESULT([no])
11187b5038d7SDag-Erling Smørgrav	AC_LIBOBJ(malloc)
11197b5038d7SDag-Erling Smørgrav	AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if  replacement function should be used.])] ,
11207b5038d7SDag-Erling Smørgrav	[AC_MSG_RESULT([yes])
11217b5038d7SDag-Erling Smørgrav	AC_DEFINE([HAVE_MALLOC], 1, [If have GNU libc compatible malloc])],
11227b5038d7SDag-Erling Smørgrav	[AC_MSG_RESULT([no (crosscompile)])
11237b5038d7SDag-Erling Smørgrav	AC_LIBOBJ(malloc)
11247b5038d7SDag-Erling Smørgrav	AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if  replacement function should be used.])] )
11257b5038d7SDag-Erling Smørgrav])
11267b5038d7SDag-Erling Smørgrav
11277b5038d7SDag-Erling Smørgravdnl Define fallback for fseeko and ftello if needed.
11287b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FSEEKO],
11297b5038d7SDag-Erling Smørgrav[
11307b5038d7SDag-Erling Smørgrav#ifndef HAVE_FSEEKO
11317b5038d7SDag-Erling Smørgrav#define fseeko fseek
11327b5038d7SDag-Erling Smørgrav#define ftello ftell
11337b5038d7SDag-Erling Smørgrav#endif /* HAVE_FSEEKO */
11347b5038d7SDag-Erling Smørgrav])
11357b5038d7SDag-Erling Smørgrav
11367b5038d7SDag-Erling Smørgravdnl Define RAND_MAX if not defined
11377b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_RAND_MAX],
11387b5038d7SDag-Erling Smørgrav[
11397b5038d7SDag-Erling Smørgrav#ifndef RAND_MAX
11407b5038d7SDag-Erling Smørgrav#define RAND_MAX	2147483647
11417b5038d7SDag-Erling Smørgrav#endif
11427b5038d7SDag-Erling Smørgrav])
11437b5038d7SDag-Erling Smørgrav
11447b5038d7SDag-Erling Smørgravdnl Define MAXHOSTNAMELEN if not defined
11457b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_MAXHOSTNAMELEN],
11467b5038d7SDag-Erling Smørgrav[
11477b5038d7SDag-Erling Smørgrav#ifndef MAXHOSTNAMELEN
11487b5038d7SDag-Erling Smørgrav#define MAXHOSTNAMELEN 256
11497b5038d7SDag-Erling Smørgrav#endif
11507b5038d7SDag-Erling Smørgrav])
11517b5038d7SDag-Erling Smørgrav
11527b5038d7SDag-Erling Smørgravdnl Define IPV6_MIN_MTU if not defined
11537b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_IPV6_MIN_MTU],
11547b5038d7SDag-Erling Smørgrav[
11557b5038d7SDag-Erling Smørgrav#ifndef IPV6_MIN_MTU
11567b5038d7SDag-Erling Smørgrav#define IPV6_MIN_MTU 1280
11577b5038d7SDag-Erling Smørgrav#endif /* IPV6_MIN_MTU */
11587b5038d7SDag-Erling Smørgrav])
11597b5038d7SDag-Erling Smørgrav
11607b5038d7SDag-Erling Smørgravdnl provide snprintf, vsnprintf compat prototype
11617b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
11627b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_SNPRINTF],
11637b5038d7SDag-Erling Smørgrav[
11647b5038d7SDag-Erling Smørgrav#ifndef HAVE_SNPRINTF
11657b5038d7SDag-Erling Smørgrav#define snprintf snprintf_$1
11667b5038d7SDag-Erling Smørgrav#define vsnprintf vsnprintf_$1
11677b5038d7SDag-Erling Smørgrav#include <stdarg.h>
11687b5038d7SDag-Erling Smørgravint snprintf (char *str, size_t count, const char *fmt, ...);
11697b5038d7SDag-Erling Smørgravint vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
11707b5038d7SDag-Erling Smørgrav#endif /* HAVE_SNPRINTF */
11717b5038d7SDag-Erling Smørgrav])
11727b5038d7SDag-Erling Smørgrav
11737b5038d7SDag-Erling Smørgravdnl provide inet_pton compat prototype.
11747b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
11757b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_INET_PTON],
11767b5038d7SDag-Erling Smørgrav[
11777b5038d7SDag-Erling Smørgrav#ifndef HAVE_INET_PTON
11787b5038d7SDag-Erling Smørgrav#define inet_pton inet_pton_$1
11797b5038d7SDag-Erling Smørgravint inet_pton(int af, const char* src, void* dst);
11807b5038d7SDag-Erling Smørgrav#endif /* HAVE_INET_PTON */
11817b5038d7SDag-Erling Smørgrav])
11827b5038d7SDag-Erling Smørgrav
11837b5038d7SDag-Erling Smørgravdnl provide inet_ntop compat prototype.
11847b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
11857b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_INET_NTOP],
11867b5038d7SDag-Erling Smørgrav[
11877b5038d7SDag-Erling Smørgrav#ifndef HAVE_INET_NTOP
11887b5038d7SDag-Erling Smørgrav#define inet_ntop inet_ntop_$1
11897b5038d7SDag-Erling Smørgravconst char *inet_ntop(int af, const void *src, char *dst, size_t size);
11907b5038d7SDag-Erling Smørgrav#endif
11917b5038d7SDag-Erling Smørgrav])
11927b5038d7SDag-Erling Smørgrav
11937b5038d7SDag-Erling Smørgravdnl provide inet_aton compat prototype.
11947b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
11957b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_INET_ATON],
11967b5038d7SDag-Erling Smørgrav[
11977b5038d7SDag-Erling Smørgrav#ifndef HAVE_INET_ATON
11987b5038d7SDag-Erling Smørgrav#define inet_aton inet_aton_$1
11997b5038d7SDag-Erling Smørgravint inet_aton(const char *cp, struct in_addr *addr);
12007b5038d7SDag-Erling Smørgrav#endif
12017b5038d7SDag-Erling Smørgrav])
12027b5038d7SDag-Erling Smørgrav
12037b5038d7SDag-Erling Smørgravdnl provide memmove compat prototype.
12047b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
12057b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_MEMMOVE],
12067b5038d7SDag-Erling Smørgrav[
12077b5038d7SDag-Erling Smørgrav#ifndef HAVE_MEMMOVE
12087b5038d7SDag-Erling Smørgrav#define memmove memmove_$1
12097b5038d7SDag-Erling Smørgravvoid *memmove(void *dest, const void *src, size_t n);
12107b5038d7SDag-Erling Smørgrav#endif
12117b5038d7SDag-Erling Smørgrav])
12127b5038d7SDag-Erling Smørgrav
12137b5038d7SDag-Erling Smørgravdnl provide strlcat compat prototype.
12147b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
12157b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_STRLCAT],
12167b5038d7SDag-Erling Smørgrav[
12177b5038d7SDag-Erling Smørgrav#ifndef HAVE_STRLCAT
12187b5038d7SDag-Erling Smørgrav#define strlcat strlcat_$1
12197b5038d7SDag-Erling Smørgravsize_t strlcat(char *dst, const char *src, size_t siz);
12207b5038d7SDag-Erling Smørgrav#endif
12217b5038d7SDag-Erling Smørgrav])
12227b5038d7SDag-Erling Smørgrav
12237b5038d7SDag-Erling Smørgravdnl provide strlcpy compat prototype.
12247b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
12257b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_STRLCPY],
12267b5038d7SDag-Erling Smørgrav[
12277b5038d7SDag-Erling Smørgrav#ifndef HAVE_STRLCPY
12287b5038d7SDag-Erling Smørgrav#define strlcpy strlcpy_$1
12297b5038d7SDag-Erling Smørgravsize_t strlcpy(char *dst, const char *src, size_t siz);
12307b5038d7SDag-Erling Smørgrav#endif
12317b5038d7SDag-Erling Smørgrav])
12327b5038d7SDag-Erling Smørgrav
12337b5038d7SDag-Erling Smørgravdnl provide gmtime_r compat prototype.
12347b5038d7SDag-Erling Smørgravdnl $1: unique name for compat code
12357b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_GMTIME_R],
12367b5038d7SDag-Erling Smørgrav[
12377b5038d7SDag-Erling Smørgrav#ifndef HAVE_GMTIME_R
12387b5038d7SDag-Erling Smørgrav#define gmtime_r gmtime_r_$1
12397b5038d7SDag-Erling Smørgravstruct tm *gmtime_r(const time_t *timep, struct tm *result);
12407b5038d7SDag-Erling Smørgrav#endif
12417b5038d7SDag-Erling Smørgrav])
12427b5038d7SDag-Erling Smørgrav
1243986ba33cSDag-Erling Smørgravdnl provide reallocarray compat prototype.
1244986ba33cSDag-Erling Smørgravdnl $1: unique name for compat code
1245986ba33cSDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_REALLOCARRAY],
1246986ba33cSDag-Erling Smørgrav[
1247986ba33cSDag-Erling Smørgrav#ifndef HAVE_REALLOCARRAY
1248986ba33cSDag-Erling Smørgrav#define reallocarray reallocarray$1
1249986ba33cSDag-Erling Smørgravvoid* reallocarray(void *ptr, size_t nmemb, size_t size);
1250986ba33cSDag-Erling Smørgrav#endif
1251986ba33cSDag-Erling Smørgrav])
1252986ba33cSDag-Erling Smørgrav
12537b5038d7SDag-Erling Smørgravdnl provide w32 compat definition for sleep
12547b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_SLEEP],
12557b5038d7SDag-Erling Smørgrav[
125617d15b25SDag-Erling Smørgrav#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H)
12577b5038d7SDag-Erling Smørgrav#define sleep(x) Sleep((x)*1000) /* on win32 */
12587b5038d7SDag-Erling Smørgrav#endif /* HAVE_SLEEP */
12597b5038d7SDag-Erling Smørgrav])
12607b5038d7SDag-Erling Smørgrav
12617b5038d7SDag-Erling Smørgravdnl provide w32 compat definition for usleep
12627b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_USLEEP],
12637b5038d7SDag-Erling Smørgrav[
12647b5038d7SDag-Erling Smørgrav#ifndef HAVE_USLEEP
12657b5038d7SDag-Erling Smørgrav#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */
12667b5038d7SDag-Erling Smørgrav#endif /* HAVE_USLEEP */
12677b5038d7SDag-Erling Smørgrav])
12687b5038d7SDag-Erling Smørgrav
12697b5038d7SDag-Erling Smørgravdnl provide w32 compat definition for random
12707b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_RANDOM],
12717b5038d7SDag-Erling Smørgrav[
12727b5038d7SDag-Erling Smørgrav#ifndef HAVE_RANDOM
12737b5038d7SDag-Erling Smørgrav#define random rand /* on win32, for tests only (bad random) */
12747b5038d7SDag-Erling Smørgrav#endif /* HAVE_RANDOM */
12757b5038d7SDag-Erling Smørgrav])
12767b5038d7SDag-Erling Smørgrav
12777b5038d7SDag-Erling Smørgravdnl provide w32 compat definition for srandom
12787b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_SRANDOM],
12797b5038d7SDag-Erling Smørgrav[
12807b5038d7SDag-Erling Smørgrav#ifndef HAVE_SRANDOM
12817b5038d7SDag-Erling Smørgrav#define srandom(x) srand(x) /* on win32, for tests only (bad random) */
12827b5038d7SDag-Erling Smørgrav#endif /* HAVE_SRANDOM */
12837b5038d7SDag-Erling Smørgrav])
12847b5038d7SDag-Erling Smørgrav
12857b5038d7SDag-Erling Smørgravdnl provide w32 compat definition for FD_SET_T
12867b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_W32_FD_SET_T],
12877b5038d7SDag-Erling Smørgrav[
12887b5038d7SDag-Erling Smørgrav/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */
12897b5038d7SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
12907b5038d7SDag-Erling Smørgrav#define FD_SET_T (u_int)
12917b5038d7SDag-Erling Smørgrav#else
12927b5038d7SDag-Erling Smørgrav#define FD_SET_T
12937b5038d7SDag-Erling Smørgrav#endif
12947b5038d7SDag-Erling Smørgrav])
12957b5038d7SDag-Erling Smørgrav
12967b5038d7SDag-Erling Smørgravdnl Remove an extension flag from CFLAGS, define replacement to be made.
12977b5038d7SDag-Erling Smørgravdnl Used by ACX_STRIP_EXT_FLAGS.
12987b5038d7SDag-Erling Smørgravdnl $1: the name of the flag, for example -D_GNU_SOURCE.
12997b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CFLAGS_STRIP],
13007b5038d7SDag-Erling Smørgrav[
13017b5038d7SDag-Erling Smørgrav  if echo $CFLAGS | grep " $1" >/dev/null 2>&1; then
13027b5038d7SDag-Erling Smørgrav    CFLAGS="`echo $CFLAGS | sed -e 's/ $1//g'`"
13037b5038d7SDag-Erling Smørgrav    AC_DEFINE(m4_bpatsubst(OMITTED_$1,[[-=]],_), 1, Put $1 define in config.h)
13047b5038d7SDag-Erling Smørgrav  fi
13057b5038d7SDag-Erling Smørgrav])
13067b5038d7SDag-Erling Smørgrav
13077b5038d7SDag-Erling Smørgravdnl Remove EXT flags from the CFLAGS and set them to be defined in config.h
13087b5038d7SDag-Erling Smørgravdnl use with ACX_DETERMINE_EXT_FLAGS.
13097b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_STRIP_EXT_FLAGS],
13107b5038d7SDag-Erling Smørgrav[
13117b5038d7SDag-Erling Smørgrav  AC_MSG_NOTICE([Stripping extension flags...])
13127b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_GNU_SOURCE)
13137b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_BSD_SOURCE)
1314986ba33cSDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_DEFAULT_SOURCE)
13157b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D__EXTENSIONS__)
13167b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_POSIX_C_SOURCE=200112)
13177b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE=600)
13187b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE_EXTENDED=1)
13197b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_ALL_SOURCE)
13207b5038d7SDag-Erling Smørgrav  ACX_CFLAGS_STRIP(-D_LARGEFILE_SOURCE=1)
13217b5038d7SDag-Erling Smørgrav]) dnl End of ACX_STRIP_EXT_FLAGS
13227b5038d7SDag-Erling Smørgrav
13237b5038d7SDag-Erling Smørgravdnl define one omitted flag for config.h
13247b5038d7SDag-Erling Smørgravdnl $1: flag name. -D_GNU_SOURCE
13257b5038d7SDag-Erling Smørgravdnl $2: replacement define. _GNU_SOURCE
13267b5038d7SDag-Erling Smørgravdnl $3: define value, 1
13277b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FLAG_OMITTED],
13287b5038d7SDag-Erling Smørgrav[#if defined($1) && !defined($2)
13297b5038d7SDag-Erling Smørgrav#define $2 $3
13307b5038d7SDag-Erling Smørgrav[#]endif ])
13317b5038d7SDag-Erling Smørgrav
13327b5038d7SDag-Erling Smørgravdnl Wrapper for AHX_CONFIG_FLAG_OMITTED for -D style flags
13337b5038d7SDag-Erling Smørgravdnl $1: the -DNAME or -DNAME=value string.
13347b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_FLAG_EXT],
13357b5038d7SDag-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,^.*=,)))
13367b5038d7SDag-Erling Smørgrav])
13377b5038d7SDag-Erling Smørgrav
13387b5038d7SDag-Erling Smørgravdnl config.h part to define omitted cflags, use with ACX_STRIP_EXT_FLAGS.
13397b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_CONFIG_EXT_FLAGS],
13407b5038d7SDag-Erling Smørgrav[AHX_CONFIG_FLAG_EXT(-D_GNU_SOURCE)
13417b5038d7SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_BSD_SOURCE)
1342986ba33cSDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_DEFAULT_SOURCE)
13437b5038d7SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D__EXTENSIONS__)
13447b5038d7SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_POSIX_C_SOURCE=200112)
13457b5038d7SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE=600)
13467b5038d7SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE_EXTENDED=1)
13477b5038d7SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_ALL_SOURCE)
13487b5038d7SDag-Erling SmørgravAHX_CONFIG_FLAG_EXT(-D_LARGEFILE_SOURCE=1)
13497b5038d7SDag-Erling Smørgrav])
13507b5038d7SDag-Erling Smørgrav
13517b5038d7SDag-Erling Smørgravdnl check if memcmp is using signed characters and replace if so.
13527b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_MEMCMP_SIGNED],
13537b5038d7SDag-Erling Smørgrav[AC_MSG_CHECKING([if memcmp compares unsigned])
13547b5038d7SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[
13557b5038d7SDag-Erling Smørgrav#include <stdio.h>
13567b5038d7SDag-Erling Smørgrav#include <stdlib.h>
13577b5038d7SDag-Erling Smørgrav#include <string.h>
13587b5038d7SDag-Erling Smørgravint main(void)
13597b5038d7SDag-Erling Smørgrav{
13607b5038d7SDag-Erling Smørgrav	char a = 255, b = 0;
13617b5038d7SDag-Erling Smørgrav	if(memcmp(&a, &b, 1) < 0)
13627b5038d7SDag-Erling Smørgrav		return 1;
13637b5038d7SDag-Erling Smørgrav	return 0;
13647b5038d7SDag-Erling Smørgrav}
13657b5038d7SDag-Erling Smørgrav]])], [AC_MSG_RESULT([yes]) ],
13667b5038d7SDag-Erling Smørgrav[ AC_MSG_RESULT([no])
13677b5038d7SDag-Erling Smørgrav  AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes])
13687b5038d7SDag-Erling Smørgrav  AC_LIBOBJ([memcmp])
13697b5038d7SDag-Erling Smørgrav], [ AC_MSG_RESULT([cross-compile no])
13707b5038d7SDag-Erling Smørgrav  AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes])
13717b5038d7SDag-Erling Smørgrav  AC_LIBOBJ([memcmp])
13727b5038d7SDag-Erling Smørgrav]) ])
13737b5038d7SDag-Erling Smørgrav
13747b5038d7SDag-Erling Smørgravdnl define memcmp to its replacement, pass unique id for program as arg
13757b5038d7SDag-Erling SmørgravAC_DEFUN([AHX_MEMCMP_BROKEN], [
13767b5038d7SDag-Erling Smørgrav#ifdef MEMCMP_IS_BROKEN
13777b5038d7SDag-Erling Smørgrav#include "compat/memcmp.h"
13787b5038d7SDag-Erling Smørgrav#define memcmp memcmp_$1
13797b5038d7SDag-Erling Smørgravint memcmp(const void *x, const void *y, size_t n);
13807b5038d7SDag-Erling Smørgrav#endif
13817b5038d7SDag-Erling Smørgrav])
13827b5038d7SDag-Erling Smørgrav
13837b5038d7SDag-Erling Smørgravdnl ACX_CHECK_SS_FAMILY           - check for sockaddr_storage.ss_family
13847b5038d7SDag-Erling SmørgravAC_DEFUN([ACX_CHECK_SS_FAMILY],
13857b5038d7SDag-Erling Smørgrav[AC_CHECK_MEMBER([struct sockaddr_storage.ss_family], [], [
13867b5038d7SDag-Erling Smørgrav        AC_CHECK_MEMBER([struct sockaddr_storage.__ss_family], [
13877b5038d7SDag-Erling Smørgrav                AC_DEFINE([ss_family], [__ss_family], [Fallback member name for socket family in struct sockaddr_storage])
13887b5038d7SDag-Erling Smørgrav        ],, [AC_INCLUDES_DEFAULT
13897b5038d7SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
13907b5038d7SDag-Erling Smørgrav#include <netinet/in.h>
13917b5038d7SDag-Erling Smørgrav#endif
13927b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
13937b5038d7SDag-Erling Smørgrav#include <sys/socket.h>
13947b5038d7SDag-Erling Smørgrav#endif
13957b5038d7SDag-Erling Smørgrav#ifdef HAVE_NETDB_H
13967b5038d7SDag-Erling Smørgrav#include <netdb.h>
13977b5038d7SDag-Erling Smørgrav#endif
13987b5038d7SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
13997b5038d7SDag-Erling Smørgrav#include <arpa/inet.h>
14007b5038d7SDag-Erling Smørgrav#endif
14017b5038d7SDag-Erling Smørgrav    ])
14027b5038d7SDag-Erling Smørgrav], [AC_INCLUDES_DEFAULT
14037b5038d7SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
14047b5038d7SDag-Erling Smørgrav#include <netinet/in.h>
14057b5038d7SDag-Erling Smørgrav#endif
14067b5038d7SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
14077b5038d7SDag-Erling Smørgrav#include <sys/socket.h>
14087b5038d7SDag-Erling Smørgrav#endif
14097b5038d7SDag-Erling Smørgrav#ifdef HAVE_NETDB_H
14107b5038d7SDag-Erling Smørgrav#include <netdb.h>
14117b5038d7SDag-Erling Smørgrav#endif
14127b5038d7SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
14137b5038d7SDag-Erling Smørgrav#include <arpa/inet.h>
14147b5038d7SDag-Erling Smørgrav#endif
14157b5038d7SDag-Erling Smørgrav]) ])
14167b5038d7SDag-Erling Smørgrav
1417986ba33cSDag-Erling Smørgravdnl Check if CC and linker support -fPIE and -pie.
1418986ba33cSDag-Erling Smørgravdnl If so, sets them in CFLAGS / LDFLAGS.
1419986ba33cSDag-Erling SmørgravAC_DEFUN([ACX_CHECK_PIE], [
1420986ba33cSDag-Erling Smørgrav    AC_ARG_ENABLE([pie], AS_HELP_STRING([--enable-pie], [Enable Position-Independent Executable (eg. to fully benefit from ASLR, small performance penalty)]))
1421986ba33cSDag-Erling Smørgrav    AS_IF([test "x$enable_pie" = "xyes"], [
1422986ba33cSDag-Erling Smørgrav	AC_MSG_CHECKING([if $CC supports PIE])
1423986ba33cSDag-Erling Smørgrav	BAKLDFLAGS="$LDFLAGS"
1424986ba33cSDag-Erling Smørgrav	BAKCFLAGS="$CFLAGS"
1425986ba33cSDag-Erling Smørgrav	LDFLAGS="$LDFLAGS -pie"
1426986ba33cSDag-Erling Smørgrav	CFLAGS="$CFLAGS -fPIE"
1427986ba33cSDag-Erling Smørgrav	AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
1428986ba33cSDag-Erling Smørgrav	    if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
1429986ba33cSDag-Erling Smørgrav		LDFLAGS="$BAKLDFLAGS"
1430986ba33cSDag-Erling Smørgrav		AC_MSG_RESULT(no)
1431986ba33cSDag-Erling Smørgrav	    else
1432986ba33cSDag-Erling Smørgrav		AC_MSG_RESULT(yes)
1433986ba33cSDag-Erling Smørgrav	    fi
1434986ba33cSDag-Erling Smørgrav	    rm -f conftest conftest.c conftest.o
1435986ba33cSDag-Erling Smørgrav	], [LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)])
1436986ba33cSDag-Erling Smørgrav    ])
1437986ba33cSDag-Erling Smørgrav])
1438986ba33cSDag-Erling Smørgrav
1439986ba33cSDag-Erling Smørgravdnl Check if linker supports -Wl,-z,relro,-z,now.
1440986ba33cSDag-Erling Smørgravdnl If so, adds it to LDFLAGS.
1441986ba33cSDag-Erling SmørgravAC_DEFUN([ACX_CHECK_RELRO_NOW], [
1442986ba33cSDag-Erling Smørgrav    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)]))
1443986ba33cSDag-Erling Smørgrav    AS_IF([test "x$enable_relro_now" = "xyes"], [
1444986ba33cSDag-Erling Smørgrav	AC_MSG_CHECKING([if $CC supports -Wl,-z,relro,-z,now])
1445986ba33cSDag-Erling Smørgrav	BAKLDFLAGS="$LDFLAGS"
1446986ba33cSDag-Erling Smørgrav	LDFLAGS="$LDFLAGS -Wl,-z,relro,-z,now"
1447986ba33cSDag-Erling Smørgrav	AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [
1448986ba33cSDag-Erling Smørgrav	    if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then
1449986ba33cSDag-Erling Smørgrav		LDFLAGS="$BAKLDFLAGS"
1450986ba33cSDag-Erling Smørgrav		AC_MSG_RESULT(no)
1451986ba33cSDag-Erling Smørgrav	    else
1452986ba33cSDag-Erling Smørgrav		AC_MSG_RESULT(yes)
1453986ba33cSDag-Erling Smørgrav	    fi
1454986ba33cSDag-Erling Smørgrav	    rm -f conftest conftest.c conftest.o
1455986ba33cSDag-Erling Smørgrav	], [LDFLAGS="$BAKLDFLAGS" ; AC_MSG_RESULT(no)])
1456986ba33cSDag-Erling Smørgrav    ])
1457986ba33cSDag-Erling Smørgrav])
1458986ba33cSDag-Erling Smørgrav
14597b5038d7SDag-Erling Smørgravdnl End of file
1460