1238106Sdes# acx_nlnetlabs.m4 - common macros for configure checks 2238106Sdes# Copyright 2009, Wouter Wijngaards, NLnet Labs. 3238106Sdes# BSD licensed. 4238106Sdes# 5369939Sgit2svn# Version 37 6369939Sgit2svn# 2021-01-05 fix defun for aclocal 7369939Sgit2svn# 2021-01-05 autoconf 2.70 autoupdate and fixes, no AC_TRY_COMPILE 8368129Scy# 2020-08-24 Use EVP_sha256 instead of HMAC_Update (for openssl-3.0.0). 9307729Sdes# 2016-03-21 Check -ldl -pthread for libcrypto for ldns and openssl 1.1.0. 10307729Sdes# 2016-03-21 Use HMAC_Update instead of HMAC_CTX_Init (for openssl-1.1.0). 11296415Sdes# 2016-01-04 -D_DEFAULT_SOURCE defined with -D_BSD_SOURCE for Linux glibc 2.20 12296415Sdes# 2015-12-11 FLTO check for new OSX, clang. 13292206Sdes# 2015-11-18 spelling check fix. 14292206Sdes# 2015-11-05 ACX_SSL_CHECKS no longer adds -ldl needlessly. 15289063Sdes# 2015-08-28 ACX_CHECK_PIE and ACX_CHECK_RELRO_NOW added. 16287917Sdes# 2015-03-17 AHX_CONFIG_REALLOCARRAY added 17266114Sdes# 2013-09-19 FLTO help text improved. 18266114Sdes# 2013-07-18 Enable ACX_CHECK_COMPILER_FLAG to test for -Wstrict-prototypes 19266114Sdes# 2013-06-25 FLTO has --disable-flto option. 20266114Sdes# 2013-05-03 Update W32_SLEEP for newer mingw that links but not defines it. 21266114Sdes# 2013-03-22 Fix ACX_RSRC_VERSION for long version numbers. 22238106Sdes# 2012-02-09 Fix AHX_MEMCMP_BROKEN with undef in compat/memcmp.h. 23238106Sdes# 2012-01-20 Fix COMPILER_FLAGS_UNBOUND for gcc 4.6.2 assigned-not-used-warns. 24238106Sdes# 2011-12-05 Fix getaddrinfowithincludes on windows with fedora16 mingw32-gcc. 25238106Sdes# Fix ACX_MALLOC for redefined malloc error. 26238106Sdes# Fix GETADDRINFO_WITH_INCLUDES to add -lws2_32 27238106Sdes# 2011-11-10 Fix FLTO test to not drop a.out in current directory. 28238106Sdes# 2011-11-01 Fix FLTO test for llvm on Lion. 29238106Sdes# 2011-08-01 Fix nonblock test (broken at v13). 30238106Sdes# 2011-08-01 Fix autoconf 2.68 warnings 31238106Sdes# 2011-06-23 Add ACX_CHECK_FLTO to check -flto. 32238106Sdes# 2010-08-16 Fix FLAG_OMITTED for AS_TR_CPP changes in autoconf-2.66. 33238106Sdes# 2010-07-02 Add check for ss_family (for minix). 34238106Sdes# 2010-04-26 Fix to use CPPFLAGS for CHECK_COMPILER_FLAGS. 35238106Sdes# 2010-03-01 Fix RPATH using CONFIG_COMMANDS to run at the very end. 36292206Sdes# 2010-02-18 WITH_SSL outputs the LIBSSL_LDFLAGS, LIBS, CPPFLAGS separate, -ldl 37238106Sdes# 2010-02-01 added ACX_CHECK_MEMCMP_SIGNED, AHX_MEMCMP_BROKEN 38238106Sdes# 2010-01-20 added AHX_COONFIG_STRLCAT 39238106Sdes# 2009-07-14 U_CHAR detection improved for windows crosscompile. 40238106Sdes# added ACX_FUNC_MALLOC 41238106Sdes# fixup some #if to #ifdef 42238106Sdes# NONBLOCKING test for mingw crosscompile. 43238106Sdes# 2009-07-13 added ACX_WITH_SSL_OPTIONAL 44238106Sdes# 2009-07-03 fixup LDFLAGS for empty ssl dir. 45238106Sdes# 46238106Sdes# Automates some of the checking constructs. Aims at portability for POSIX. 47238106Sdes# Documentation for functions is below. 48238106Sdes# 49238106Sdes# the following macro's are provided in this file: 50238106Sdes# (see below for details on each macro). 51238106Sdes# 52238106Sdes# ACX_ESCAPE_BACKSLASH - escape backslashes in var for C-preproc. 53238106Sdes# ACX_RSRC_VERSION - create windows resource version number. 54238106Sdes# ACX_CHECK_COMPILER_FLAG - see if cc supports a flag. 55238106Sdes# ACX_CHECK_ERROR_FLAGS - see which flag is -werror (used below). 56238106Sdes# ACX_CHECK_COMPILER_FLAG_NEEDED - see if flags make the code compile cleanly. 57238106Sdes# ACX_DEPFLAG - find cc dependency flags. 58238106Sdes# ACX_DETERMINE_EXT_FLAGS_UNBOUND - find out which flags enable BSD and POSIX. 59238106Sdes# ACX_CHECK_FORMAT_ATTRIBUTE - find cc printf format syntax. 60238106Sdes# ACX_CHECK_UNUSED_ATTRIBUTE - find cc variable unused syntax. 61238106Sdes# ACX_CHECK_FLTO - see if cc supports -flto and use it if so. 62238106Sdes# ACX_LIBTOOL_C_ONLY - create libtool for C only, improved. 63238106Sdes# ACX_TYPE_U_CHAR - u_char type. 64238106Sdes# ACX_TYPE_RLIM_T - rlim_t type. 65238106Sdes# ACX_TYPE_SOCKLEN_T - socklen_t type. 66238106Sdes# ACX_TYPE_IN_ADDR_T - in_addr_t type. 67238106Sdes# ACX_TYPE_IN_PORT_T - in_port_t type. 68238106Sdes# ACX_ARG_RPATH - add --disable-rpath option. 69238106Sdes# ACX_WITH_SSL - add --with-ssl option, link -lcrypto. 70238106Sdes# ACX_WITH_SSL_OPTIONAL - add --with-ssl option, link -lcrypto, 71238106Sdes# where --without-ssl is also accepted 72238106Sdes# ACX_LIB_SSL - setup to link -lssl. 73238106Sdes# ACX_SYS_LARGEFILE - improved sys_largefile, fseeko, >2G files. 74238106Sdes# ACX_CHECK_GETADDRINFO_WITH_INCLUDES - find getaddrinfo, portably. 75238106Sdes# ACX_FUNC_DEPRECATED - see if func is deprecated. 76238106Sdes# ACX_CHECK_NONBLOCKING_BROKEN - see if nonblocking sockets really work. 77238106Sdes# ACX_MKDIR_ONE_ARG - determine mkdir(2) number of arguments. 78238106Sdes# ACX_FUNC_IOCTLSOCKET - find ioctlsocket, portably. 79238106Sdes# ACX_FUNC_MALLOC - check malloc, define replacement . 80238106Sdes# AHX_CONFIG_FORMAT_ATTRIBUTE - config.h text for format. 81238106Sdes# AHX_CONFIG_UNUSED_ATTRIBUTE - config.h text for unused. 82238106Sdes# AHX_CONFIG_FSEEKO - define fseeko, ftello fallback. 83238106Sdes# AHX_CONFIG_RAND_MAX - define RAND_MAX if needed. 84238106Sdes# AHX_CONFIG_MAXHOSTNAMELEN - define MAXHOSTNAMELEN if needed. 85238106Sdes# AHX_CONFIG_IPV6_MIN_MTU - define IPV6_MIN_MTU if needed. 86238106Sdes# AHX_CONFIG_SNPRINTF - snprintf compat prototype 87238106Sdes# AHX_CONFIG_INET_PTON - inet_pton compat prototype 88238106Sdes# AHX_CONFIG_INET_NTOP - inet_ntop compat prototype 89238106Sdes# AHX_CONFIG_INET_ATON - inet_aton compat prototype 90238106Sdes# AHX_CONFIG_MEMMOVE - memmove compat prototype 91238106Sdes# AHX_CONFIG_STRLCAT - strlcat compat prototype 92238106Sdes# AHX_CONFIG_STRLCPY - strlcpy compat prototype 93238106Sdes# AHX_CONFIG_GMTIME_R - gmtime_r compat prototype 94238106Sdes# AHX_CONFIG_W32_SLEEP - w32 compat for sleep 95238106Sdes# AHX_CONFIG_W32_USLEEP - w32 compat for usleep 96238106Sdes# AHX_CONFIG_W32_RANDOM - w32 compat for random 97238106Sdes# AHX_CONFIG_W32_SRANDOM - w32 compat for srandom 98238106Sdes# AHX_CONFIG_W32_FD_SET_T - w32 detection of FD_SET_T. 99238106Sdes# ACX_CFLAGS_STRIP - strip one flag from CFLAGS 100238106Sdes# ACX_STRIP_EXT_FLAGS - strip extension flags from CFLAGS 101238106Sdes# AHX_CONFIG_FLAG_OMITTED - define omitted flag 102238106Sdes# AHX_CONFIG_FLAG_EXT - define omitted extension flag 103238106Sdes# AHX_CONFIG_EXT_FLAGS - define the stripped extension flags 104238106Sdes# ACX_CHECK_MEMCMP_SIGNED - check if memcmp uses signed characters. 105238106Sdes# AHX_MEMCMP_BROKEN - replace memcmp func for CHECK_MEMCMP_SIGNED. 106238106Sdes# ACX_CHECK_SS_FAMILY - check for sockaddr_storage.ss_family 107289063Sdes# ACX_CHECK_PIE - add --enable-pie option and check if works 108289063Sdes# ACX_CHECK_RELRO_NOW - add --enable-relro-now option and check it 109238106Sdes# 110238106Sdes 111238106Sdesdnl Escape backslashes as \\, for C:\ paths, for the C preprocessor defines. 112238106Sdesdnl for example, ACX_ESCAPE_BACKSLASH($from_var, to_var) 113238106Sdesdnl $1: the text to change. 114238106Sdesdnl $2: the result. 115238106SdesAC_DEFUN([ACX_ESCAPE_BACKSLASH], [$2="`echo $1 | sed -e 's/\\\\/\\\\\\\\/g'`" 116238106Sdes]) 117238106Sdes 118238106Sdesdnl Calculate comma separated windows-resource numbers from package version. 119238106Sdesdnl Picks the first three(,0) or four numbers out of the name. 120238106Sdesdnl $1: variable for the result 121238106SdesAC_DEFUN([ACX_RSRC_VERSION], 122266114Sdes[$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/' `] 123238106Sdes]) 124238106Sdes 125238106Sdesdnl Routine to help check for compiler flags. 126238106Sdesdnl Checks if the compiler will accept the flag. 127238106Sdesdnl $1: the flag without a - in front, so g to check -g. 128238106Sdesdnl $2: executed if yes 129238106Sdesdnl $3: executed if no 130238106SdesAC_DEFUN([ACX_CHECK_COMPILER_FLAG], 131238106Sdes[ 132238106SdesAC_REQUIRE([AC_PROG_CC]) 133238106SdesAC_MSG_CHECKING(whether $CC supports -$1) 134238106Sdescache=`echo $1 | sed 'y%.=/+-%___p_%'` 135238106SdesAC_CACHE_VAL(cv_prog_cc_flag_$cache, 136238106Sdes[ 137266114Sdesecho 'void f(void){}' >conftest.c 138238106Sdesif test -z "`$CC $CPPFLAGS $CFLAGS -$1 -c conftest.c 2>&1`"; then 139238106Sdeseval "cv_prog_cc_flag_$cache=yes" 140238106Sdeselse 141238106Sdeseval "cv_prog_cc_flag_$cache=no" 142238106Sdesfi 143238106Sdesrm -f conftest conftest.o conftest.c 144238106Sdes]) 145238106Sdesif eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then 146238106SdesAC_MSG_RESULT(yes) 147238106Sdes: 148238106Sdes$2 149238106Sdeselse 150238106SdesAC_MSG_RESULT(no) 151238106Sdes: 152238106Sdes$3 153238106Sdesfi 154238106Sdes]) 155238106Sdes 156238106Sdesdnl setup flags for ACX_CHECK_COMPILER_FLAG_NEEDED 157238106Sdesdnl ERRFLAG: result, compiler flag to turn warnings into errors 158238106SdesAC_DEFUN([ACX_CHECK_ERROR_FLAGS], 159238106Sdes[ 160238106SdesACX_CHECK_COMPILER_FLAG(Werror, [ERRFLAG="-Werror"], [ERRFLAG="-errwarn"]) 161238106SdesACX_CHECK_COMPILER_FLAG(Wall, [ERRFLAG="$ERRFLAG -Wall"], 162238106Sdes [ERRFLAG="$ERRFLAG -errfmt"]) 163238106Sdes]) 164238106Sdes 165238106Sdesdnl Routine to help check for needed compiler flags. 166238106Sdesdnl $1: flags for CC 167238106Sdesdnl $2: the includes and code 168238106Sdesdnl $3: if the given code only compiles with the flag, execute argument 3 169238106Sdesdnl $4: if the given code compiles without the flag, execute argument 4 170238106Sdesdnl $5: with and without flag the compile fails, execute argument 5. 171238106SdesAC_DEFUN([ACX_CHECK_COMPILER_FLAG_NEEDED], 172238106Sdes[ 173238106SdesAC_REQUIRE([AC_PROG_CC]) 174238106SdesAC_REQUIRE([ACX_CHECK_ERROR_FLAGS]) 175238106SdesAC_MSG_CHECKING(whether we need $1 as a flag for $CC) 176238106Sdescache=AS_TR_SH($1) 177238106Sdesdnl cache=`echo $1 | sed 'y%.=/+- %___p__%'` 178238106SdesAC_CACHE_VAL(cv_prog_cc_flag_needed_$cache, 179238106Sdes[ 180238106Sdesecho '$2' > conftest.c 181238106Sdesecho 'void f(){}' >>conftest.c 182238106Sdesif test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then 183238106Sdeseval "cv_prog_cc_flag_needed_$cache=no" 184238106Sdeselse 185238106Sdes[ 186238106Sdesif test -z "`$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`"; then 187238106Sdeseval "cv_prog_cc_flag_needed_$cache=yes" 188238106Sdeselse 189238106Sdeseval "cv_prog_cc_flag_needed_$cache=fail" 190238106Sdes#echo 'Test with flag fails too!' 191238106Sdes#cat conftest.c 192238106Sdes#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1" 193238106Sdes#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1` 194238106Sdes#exit 1 195238106Sdesfi 196238106Sdes] 197238106Sdesfi 198238106Sdesrm -f conftest conftest.c conftest.o 199238106Sdes]) 200238106Sdesif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then 201238106SdesAC_MSG_RESULT(yes) 202238106Sdes: 203238106Sdes$3 204238106Sdeselse 205238106Sdesif eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then 206238106SdesAC_MSG_RESULT(no) 207238106Sdes#echo 'Test with flag is no!' 208238106Sdes#cat conftest.c 209238106Sdes#echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1" 210238106Sdes#echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1` 211238106Sdes#exit 1 212238106Sdes: 213238106Sdes$4 214238106Sdeselse 215238106SdesAC_MSG_RESULT(failed) 216238106Sdes: 217238106Sdes$5 218238106Sdesfi 219238106Sdesfi 220238106Sdes]) 221238106Sdes 222238106Sdesdnl Check for CC dependency flag 223238106Sdesdnl DEPFLAG: set to flag that generates dependencies. 224238106SdesAC_DEFUN([ACX_DEPFLAG], 225238106Sdes[ 226238106SdesAC_MSG_CHECKING([$CC dependency flag]) 227238106Sdesecho 'void f(){}' >conftest.c 228238106Sdesif test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then 229238106Sdes DEPFLAG="-MM" 230238106Sdeselse 231238106Sdes if test "`$CC -xM1 conftest.c 2>&1`" = "conftest.o: conftest.c"; then 232238106Sdes DEPFLAG="-xM1" 233238106Sdes else 234238106Sdes DEPFLAG="-MM" # dunno do something 235238106Sdes fi 236238106Sdesfi 237238106SdesAC_MSG_RESULT($DEPFLAG) 238238106Sdesrm -f conftest.c 239238106SdesAC_SUBST(DEPFLAG) 240238106Sdes]) 241238106Sdes 242238106Sdesdnl Determine flags that gives POSIX and BSD functionality. 243238106Sdesdnl CFLAGS is modified for the result. 244238106SdesAC_DEFUN([ACX_DETERMINE_EXT_FLAGS_UNBOUND], 245238106Sdes[ 246238106SdesACX_CHECK_COMPILER_FLAG(std=c99, [C99FLAG="-std=c99"]) 247238106SdesACX_CHECK_COMPILER_FLAG(xc99, [C99FLAG="-xc99"]) 248238106Sdes 249238106SdesAC_CHECK_HEADERS([getopt.h time.h],,, [AC_INCLUDES_DEFAULT]) 250238106Sdes 251296415SdesACX_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, 252238106Sdes[ 253238106Sdes#include "confdefs.h" 254238106Sdes#include <stdlib.h> 255238106Sdes#include <ctype.h> 256238106Sdes#include <sys/time.h> 257238106Sdes#ifdef HAVE_TIME_H 258238106Sdes#include <time.h> 259238106Sdes#endif 260238106Sdes#include <unistd.h> 261238106Sdes#include <netdb.h> 262238106Sdes#ifdef HAVE_GETOPT_H 263238106Sdes#include <getopt.h> 264238106Sdes#endif 265238106Sdes 266238106Sdesint test() { 267238106Sdes int a; 268238106Sdes char **opts = NULL; 269238106Sdes struct timeval tv; 270238106Sdes char *t; 271238106Sdes time_t time = 0; 272238106Sdes char *buf = NULL; 273238106Sdes const char* str = NULL; 274238106Sdes struct msghdr msg; 275238106Sdes msg.msg_control = 0; 276238106Sdes t = ctime_r(&time, buf); 277238106Sdes tv.tv_usec = 10; 278238106Sdes srandom(32); 279238106Sdes a = getopt(2, opts, "a"); 280238106Sdes a = isascii(32); 281238106Sdes str = gai_strerror(0); 282238106Sdes if(str && t && tv.tv_usec && msg.msg_control) 283238106Sdes a = 0; 284238106Sdes return a; 285238106Sdes} 286296415Sdes], [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"]) 287238106Sdes 288296415SdesACX_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, 289238106Sdes[ 290238106Sdes#include "confdefs.h" 291238106Sdes#include <stdlib.h> 292238106Sdes#include <ctype.h> 293238106Sdes#include <sys/time.h> 294238106Sdes#ifdef HAVE_TIME_H 295238106Sdes#include <time.h> 296238106Sdes#endif 297238106Sdes#include <unistd.h> 298238106Sdes#include <netdb.h> 299238106Sdes#ifdef HAVE_GETOPT_H 300238106Sdes#include <getopt.h> 301238106Sdes#endif 302238106Sdes 303238106Sdesint test() { 304238106Sdes int a; 305238106Sdes char **opts = NULL; 306238106Sdes struct timeval tv; 307238106Sdes char *t; 308238106Sdes time_t time = 0; 309238106Sdes char *buf = NULL; 310238106Sdes const char* str = NULL; 311238106Sdes struct msghdr msg; 312238106Sdes msg.msg_control = 0; 313238106Sdes t = ctime_r(&time, buf); 314238106Sdes tv.tv_usec = 10; 315238106Sdes srandom(32); 316238106Sdes a = getopt(2, opts, "a"); 317238106Sdes a = isascii(32); 318238106Sdes str = gai_strerror(0); 319238106Sdes if(str && t && tv.tv_usec && msg.msg_control) 320238106Sdes a = 0; 321238106Sdes return a; 322238106Sdes} 323296415Sdes], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE"]) 324238106Sdes 325238106SdesACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG, 326238106Sdes[ 327238106Sdes#include <stdbool.h> 328238106Sdes#include <ctype.h> 329238106Sdesint test() { 330238106Sdes int a = 0; 331238106Sdes return a; 332238106Sdes} 333238106Sdes], [CFLAGS="$CFLAGS $C99FLAG"]) 334238106Sdes 335296415SdesACX_CHECK_COMPILER_FLAG_NEEDED(-D_BSD_SOURCE -D_DEFAULT_SOURCE, 336238106Sdes[ 337238106Sdes#include <ctype.h> 338238106Sdes 339238106Sdesint test() { 340238106Sdes int a; 341238106Sdes a = isascii(32); 342238106Sdes return a; 343238106Sdes} 344296415Sdes], [CFLAGS="$CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE"]) 345238106Sdes 346238106SdesACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE, 347238106Sdes[ 348238106Sdes#include <netinet/in.h> 349238106Sdes 350238106Sdesint test() { 351238106Sdes struct in6_pktinfo inf; 352238106Sdes int a = (int)sizeof(inf); 353238106Sdes return a; 354238106Sdes} 355238106Sdes], [CFLAGS="$CFLAGS -D_GNU_SOURCE"]) 356238106Sdes 357238106Sdes# check again for GNU_SOURCE for setresgid. May fail if setresgid 358238106Sdes# is not available at all. -D_FRSRESGID is to make this check unique. 359238106Sdes# otherwise we would get the previous cached result. 360238106SdesACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE -D_FRSRESGID, 361238106Sdes[ 362238106Sdes#include <unistd.h> 363238106Sdes 364238106Sdesint test() { 365238106Sdes int a = setresgid(0,0,0); 366238106Sdes a = setresuid(0,0,0); 367238106Sdes return a; 368238106Sdes} 369238106Sdes], [CFLAGS="$CFLAGS -D_GNU_SOURCE"]) 370238106Sdes 371238106SdesACX_CHECK_COMPILER_FLAG_NEEDED(-D_POSIX_C_SOURCE=200112, 372238106Sdes[ 373238106Sdes#include "confdefs.h" 374238106Sdes#ifdef HAVE_TIME_H 375238106Sdes#include <time.h> 376238106Sdes#endif 377238106Sdes#include <netdb.h> 378238106Sdes 379238106Sdesint test() { 380238106Sdes int a = 0; 381238106Sdes char *t; 382238106Sdes time_t time = 0; 383238106Sdes char *buf = NULL; 384238106Sdes const char* str = NULL; 385238106Sdes t = ctime_r(&time, buf); 386238106Sdes str = gai_strerror(0); 387238106Sdes if(t && str) 388238106Sdes a = 0; 389238106Sdes return a; 390238106Sdes} 391238106Sdes], [CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112"]) 392238106Sdes 393238106SdesACX_CHECK_COMPILER_FLAG_NEEDED(-D__EXTENSIONS__, 394238106Sdes[ 395238106Sdes#include "confdefs.h" 396238106Sdes#include <stdlib.h> 397238106Sdes#include <ctype.h> 398238106Sdes#include <sys/time.h> 399238106Sdes#ifdef HAVE_TIME_H 400238106Sdes#include <time.h> 401238106Sdes#endif 402238106Sdes#include <unistd.h> 403238106Sdes#ifdef HAVE_GETOPT_H 404238106Sdes#include <getopt.h> 405238106Sdes#endif 406238106Sdes 407238106Sdesint test() { 408238106Sdes int a; 409238106Sdes char **opts = NULL; 410238106Sdes struct timeval tv; 411238106Sdes tv.tv_usec = 10; 412238106Sdes srandom(32); 413238106Sdes a = getopt(2, opts, "a"); 414238106Sdes a = isascii(32); 415238106Sdes if(tv.tv_usec) 416238106Sdes a = 0; 417238106Sdes return a; 418238106Sdes} 419238106Sdes], [CFLAGS="$CFLAGS -D__EXTENSIONS__"]) 420238106Sdes 421238106Sdes])dnl End of ACX_DETERMINE_EXT_FLAGS_UNBOUND 422238106Sdes 423238106Sdesdnl Check if CC supports -flto. 424238106Sdesdnl in a way that supports clang and suncc (that flag does something else, 425238106Sdesdnl but fails to link). It sets it in CFLAGS if it works. 426266114SdesAC_DEFUN([ACX_CHECK_FLTO], [ 427266114Sdes AC_ARG_ENABLE([flto], AS_HELP_STRING([--disable-flto], [Disable link-time optimization (gcc specific option)])) 428266114Sdes AS_IF([test "x$enable_flto" != "xno"], [ 429266114Sdes AC_MSG_CHECKING([if $CC supports -flto]) 430266114Sdes BAKCFLAGS="$CFLAGS" 431266114Sdes CFLAGS="$CFLAGS -flto" 432266114Sdes AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ 433296415Sdes if $CC $CFLAGS -o conftest conftest.c 2>&1 | $GREP -e "warning: no debug symbols in executable" -e "warning: object" >/dev/null; then 434266114Sdes CFLAGS="$BAKCFLAGS" 435266114Sdes AC_MSG_RESULT(no) 436266114Sdes else 437266114Sdes AC_MSG_RESULT(yes) 438266114Sdes fi 439266114Sdes rm -f conftest conftest.c conftest.o 440266114Sdes ], [CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)]) 441266114Sdes ]) 442238106Sdes]) 443238106Sdes 444238106Sdesdnl Check the printf-format attribute (if any) 445238106Sdesdnl result in HAVE_ATTR_FORMAT. 446238106Sdesdnl Make sure you also include the AHX_CONFIG_FORMAT_ATTRIBUTE. 447238106SdesAC_DEFUN([ACX_CHECK_FORMAT_ATTRIBUTE], 448238106Sdes[AC_REQUIRE([AC_PROG_CC]) 449238106SdesAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "format" attribute) 450238106SdesAC_CACHE_VAL(ac_cv_c_format_attribute, 451238106Sdes[ac_cv_c_format_attribute=no 452369939Sgit2svnAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> 453238106Sdesvoid f (char *format, ...) __attribute__ ((format (printf, 1, 2))); 454238106Sdesvoid (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2))); 455369939Sgit2svn]], [[ 456238106Sdes f ("%s", "str"); 457369939Sgit2svn]])],[ac_cv_c_format_attribute="yes"],[ac_cv_c_format_attribute="no"]) 458238106Sdes]) 459238106Sdes 460238106SdesAC_MSG_RESULT($ac_cv_c_format_attribute) 461238106Sdesif test $ac_cv_c_format_attribute = yes; then 462238106Sdes AC_DEFINE(HAVE_ATTR_FORMAT, 1, [Whether the C compiler accepts the "format" attribute]) 463238106Sdesfi 464238106Sdes])dnl End of ACX_CHECK_FORMAT_ATTRIBUTE 465238106Sdes 466238106Sdesdnl Setup ATTR_FORMAT config.h parts. 467238106Sdesdnl make sure you call ACX_CHECK_FORMAT_ATTRIBUTE also. 468238106SdesAC_DEFUN([AHX_CONFIG_FORMAT_ATTRIBUTE], 469238106Sdes[ 470238106Sdes#ifdef HAVE_ATTR_FORMAT 471238106Sdes# define ATTR_FORMAT(archetype, string_index, first_to_check) \ 472238106Sdes __attribute__ ((format (archetype, string_index, first_to_check))) 473238106Sdes#else /* !HAVE_ATTR_FORMAT */ 474238106Sdes# define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ 475238106Sdes#endif /* !HAVE_ATTR_FORMAT */ 476238106Sdes]) 477238106Sdes 478238106Sdesdnl Check how to mark function arguments as unused. 479238106Sdesdnl result in HAVE_ATTR_UNUSED. 480238106Sdesdnl Make sure you include AHX_CONFIG_UNUSED_ATTRIBUTE also. 481238106SdesAC_DEFUN([ACX_CHECK_UNUSED_ATTRIBUTE], 482238106Sdes[AC_REQUIRE([AC_PROG_CC]) 483238106SdesAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "unused" attribute) 484238106SdesAC_CACHE_VAL(ac_cv_c_unused_attribute, 485238106Sdes[ac_cv_c_unused_attribute=no 486369939Sgit2svnAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> 487238106Sdesvoid f (char *u __attribute__((unused))); 488369939Sgit2svn]], [[ 489238106Sdes f ("x"); 490369939Sgit2svn]])],[ac_cv_c_unused_attribute="yes"],[ac_cv_c_unused_attribute="no"]) 491238106Sdes]) 492238106Sdes 493238106Sdesdnl Setup ATTR_UNUSED config.h parts. 494238106Sdesdnl make sure you call ACX_CHECK_UNUSED_ATTRIBUTE also. 495238106SdesAC_DEFUN([AHX_CONFIG_UNUSED_ATTRIBUTE], 496238106Sdes[ 497238106Sdes#if defined(DOXYGEN) 498238106Sdes# define ATTR_UNUSED(x) x 499238106Sdes#elif defined(__cplusplus) 500238106Sdes# define ATTR_UNUSED(x) 501238106Sdes#elif defined(HAVE_ATTR_UNUSED) 502238106Sdes# define ATTR_UNUSED(x) x __attribute__((unused)) 503238106Sdes#else /* !HAVE_ATTR_UNUSED */ 504238106Sdes# define ATTR_UNUSED(x) x 505238106Sdes#endif /* !HAVE_ATTR_UNUSED */ 506238106Sdes]) 507238106Sdes 508238106SdesAC_MSG_RESULT($ac_cv_c_unused_attribute) 509238106Sdesif test $ac_cv_c_unused_attribute = yes; then 510238106Sdes AC_DEFINE(HAVE_ATTR_UNUSED, 1, [Whether the C compiler accepts the "unused" attribute]) 511238106Sdesfi 512238106Sdes])dnl 513238106Sdes 514238106Sdesdnl Pre-fun for ACX_LIBTOOL_C_ONLY 515238106SdesAC_DEFUN([ACX_LIBTOOL_C_PRE], [ 516238106Sdes# skip these tests, we do not need them. 517238106SdesAC_DEFUN([AC_PROG_F77], [:]) 518238106SdesAC_DEFUN([AC_PROG_FC], [:]) 519238106SdesAC_DEFUN([AC_PROG_CXX], [:]) 520238106SdesAC_DEFUN([AC_PROG_CXXCPP], [:]) 521238106SdesAC_DEFUN([AC_PROG_OBJC], [:]) 522238106SdesAC_DEFUN([AC_PROG_OBJCCPP], [:]) 523238106SdesAC_DEFUN([AC_LIBTOOL_CXX], [:]) 524238106SdesAC_DEFUN([AC_LIBTOOL_F77], [:]) 525238106Sdes# always use ./libtool unless override from commandline (libtool=mylibtool) 526238106Sdesif test -z "$libtool"; then 527238106Sdes libtool="./libtool" 528238106Sdesfi 529238106SdesAC_SUBST(libtool) 530238106Sdes# avoid libtool max commandline length test on systems that fork slowly. 531238106SdesAC_CANONICAL_HOST 532238106Sdesif echo "$host_os" | grep "sunos4" >/dev/null; then 533238106Sdes lt_cv_sys_max_cmd_len=32750; 534238106Sdesfi 535238106SdesAC_PATH_TOOL(AR, ar, [false]) 536238106Sdesif test $AR = false; then 537238106Sdes AC_MSG_ERROR([Cannot find 'ar', please extend PATH to include it]) 538238106Sdesfi 539238106Sdes]) 540238106Sdes 541238106Sdesdnl Perform libtool check, portably, only for C 542238106SdesAC_DEFUN([ACX_LIBTOOL_C_ONLY], [ 543238106Sdesdnl as a requirement so that is gets called before LIBTOOL 544238106Sdesdnl because libtools 'AC_REQUIRE' names are right after this one, before 545238106Sdesdnl this function contents. 546238106SdesAC_REQUIRE([ACX_LIBTOOL_C_PRE]) 547369939Sgit2svnLT_INIT 548238106Sdes]) 549238106Sdes 550238106Sdesdnl Detect if u_char type is defined, otherwise define it. 551238106SdesAC_DEFUN([ACX_TYPE_U_CHAR], 552238106Sdes[AC_CHECK_TYPE([u_char], , 553238106Sdes [AC_DEFINE([u_char], [unsigned char], [Define to 'unsigned char if not defined])], [ 554238106SdesAC_INCLUDES_DEFAULT 555238106Sdes#ifdef HAVE_WINSOCK2_H 556238106Sdes# include <winsock2.h> 557238106Sdes#endif 558238106Sdes]) ]) 559238106Sdes 560238106Sdesdnl Detect if rlim_t type is defined, otherwise define it. 561238106SdesAC_DEFUN([ACX_TYPE_RLIM_T], 562238106Sdes[AC_CHECK_TYPE(rlim_t, , 563238106Sdes [AC_DEFINE([rlim_t], [unsigned long], [Define to 'int' if not defined])], [ 564238106SdesAC_INCLUDES_DEFAULT 565238106Sdes#ifdef HAVE_SYS_RESOURCE_H 566238106Sdes# include <sys/resource.h> 567238106Sdes#endif 568238106Sdes]) ]) 569238106Sdes 570238106Sdesdnl Detect if socklen_t type is defined, otherwise define it. 571238106SdesAC_DEFUN([ACX_TYPE_SOCKLEN_T], 572238106Sdes[ 573238106SdesAC_CHECK_TYPE(socklen_t, , 574238106Sdes [AC_DEFINE([socklen_t], [int], [Define to 'int' if not defined])], [ 575238106SdesAC_INCLUDES_DEFAULT 576238106Sdes#ifdef HAVE_SYS_SOCKET_H 577238106Sdes# include <sys/socket.h> 578238106Sdes#endif 579238106Sdes#ifdef HAVE_WS2TCPIP_H 580238106Sdes# include <ws2tcpip.h> 581238106Sdes#endif 582238106Sdes]) ]) 583238106Sdes 584238106Sdesdnl Detect if in_addr_t type is defined, otherwise define it. 585238106SdesAC_DEFUN([ACX_TYPE_IN_ADDR_T], 586238106Sdes[ AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [ 587238106SdesAC_INCLUDES_DEFAULT 588238106Sdes#ifdef HAVE_SYS_TYPES_H 589238106Sdes# include <sys/types.h> 590238106Sdes#endif 591238106Sdes#ifdef HAVE_NETINET_IN_H 592238106Sdes# include <netinet/in.h> 593238106Sdes#endif 594238106Sdes]) ]) 595238106Sdes 596238106Sdesdnl Detect if in_port_t type is defined, otherwise define it. 597238106SdesAC_DEFUN([ACX_TYPE_IN_PORT_T], 598238106Sdes[ AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [ 599238106SdesAC_INCLUDES_DEFAULT 600238106Sdes#ifdef HAVE_SYS_TYPES_H 601238106Sdes# include <sys/types.h> 602238106Sdes#endif 603238106Sdes#ifdef HAVE_NETINET_IN_H 604238106Sdes# include <netinet/in.h> 605238106Sdes#endif 606238106Sdes]) ]) 607238106Sdes 608238106Sdesdnl Add option to disable the evil rpath. Check whether to use rpath or not. 609238106Sdesdnl Adds the --disable-rpath option. Uses trick to edit the ./libtool. 610238106SdesAC_DEFUN([ACX_ARG_RPATH], 611238106Sdes[ 612238106SdesAC_ARG_ENABLE(rpath, 613238106Sdes [ --disable-rpath disable hardcoded rpath (default=enabled)], 614238106Sdes enable_rpath=$enableval, enable_rpath=yes) 615238106Sdesif test "x$enable_rpath" = xno; then 616238106Sdes dnl AC_MSG_RESULT([Fixing libtool for -rpath problems.]) 617238106Sdes AC_CONFIG_COMMANDS([disable-rpath], [ 618238106Sdes sed < libtool > libtool-2 \ 619238106Sdes 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_RPATH_SED__ "/' 620238106Sdes mv libtool-2 libtool 621238106Sdes chmod 755 libtool 622238106Sdes libtool="./libtool" 623238106Sdes ]) 624238106Sdesfi 625238106Sdes]) 626238106Sdes 627238106Sdesdnl Add a -R to the RUNTIME_PATH. Only if rpath is enabled and it is 628238106Sdesdnl an absolute path. 629238106Sdesdnl $1: the pathname to add. 630238106SdesAC_DEFUN([ACX_RUNTIME_PATH_ADD], [ 631238106Sdes if test "x$enable_rpath" = xyes; then 632238106Sdes if echo "$1" | grep "^/" >/dev/null; then 633238106Sdes RUNTIME_PATH="$RUNTIME_PATH -R$1" 634238106Sdes fi 635238106Sdes fi 636238106Sdes]) 637238106Sdes 638238106Sdesdnl Common code for both ACX_WITH_SSL and ACX_WITH_SSL_OPTIONAL 639238106Sdesdnl Takes one argument; the withval checked in those 2 functions 640238106Sdesdnl sets up the environment for the given openssl path 641238106SdesAC_DEFUN([ACX_SSL_CHECKS], [ 642238106Sdes withval=$1 643238106Sdes if test x_$withval != x_no; then 644238106Sdes AC_MSG_CHECKING(for SSL) 645238106Sdes if test x_$withval = x_ -o x_$withval = x_yes; then 646238106Sdes withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr" 647238106Sdes fi 648238106Sdes for dir in $withval; do 649238106Sdes ssldir="$dir" 650238106Sdes if test -f "$dir/include/openssl/ssl.h"; then 651238106Sdes found_ssl="yes" 652238106Sdes AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.]) 653238106Sdes dnl assume /usr/include is already in the include-path. 654238106Sdes if test "$ssldir" != "/usr"; then 655238106Sdes CPPFLAGS="$CPPFLAGS -I$ssldir/include" 656238106Sdes LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include" 657238106Sdes fi 658238106Sdes break; 659238106Sdes fi 660238106Sdes done 661238106Sdes if test x_$found_ssl != x_yes; then 662238106Sdes AC_MSG_ERROR(Cannot find the SSL libraries in $withval) 663238106Sdes else 664238106Sdes AC_MSG_RESULT(found in $ssldir) 665238106Sdes HAVE_SSL=yes 666238106Sdes dnl assume /usr is already in the lib and dynlib paths. 667238106Sdes if test "$ssldir" != "/usr" -a "$ssldir" != ""; then 668238106Sdes LDFLAGS="$LDFLAGS -L$ssldir/lib" 669238106Sdes LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib" 670238106Sdes ACX_RUNTIME_PATH_ADD([$ssldir/lib]) 671238106Sdes fi 672238106Sdes 673368129Scy AC_MSG_CHECKING([for EVP_sha256 in -lcrypto]) 674238106Sdes LIBS="$LIBS -lcrypto" 675238106Sdes LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto" 676369939Sgit2svn AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ 677368129Scy int EVP_sha256(void); 678368129Scy (void)EVP_sha256(); 679369939Sgit2svn ]])],[ 680238106Sdes AC_MSG_RESULT(yes) 681368129Scy AC_DEFINE([HAVE_EVP_SHA256], 1, 682368129Scy [If you have EVP_sha256]) 683369939Sgit2svn ],[ 684238106Sdes AC_MSG_RESULT(no) 685238106Sdes # check if -lwsock32 or -lgdi32 are needed. 686238106Sdes BAKLIBS="$LIBS" 687238106Sdes BAKSSLLIBS="$LIBSSL_LIBS" 688356345Scy LIBS="$LIBS -lgdi32 -lws2_32" 689356345Scy LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32" 690238106Sdes AC_MSG_CHECKING([if -lcrypto needs -lgdi32]) 691369939Sgit2svn AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ 692368129Scy int EVP_sha256(void); 693368129Scy (void)EVP_sha256(); 694369939Sgit2svn ]])],[ 695368129Scy AC_DEFINE([HAVE_EVP_SHA256], 1, 696368129Scy [If you have EVP_sha256]) 697238106Sdes AC_MSG_RESULT(yes) 698238106Sdes ],[ 699238106Sdes AC_MSG_RESULT(no) 700238106Sdes LIBS="$BAKLIBS" 701238106Sdes LIBSSL_LIBS="$BAKSSLLIBS" 702238106Sdes LIBS="$LIBS -ldl" 703238106Sdes LIBSSL_LIBS="$LIBSSL_LIBS -ldl" 704238106Sdes AC_MSG_CHECKING([if -lcrypto needs -ldl]) 705369939Sgit2svn AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ 706368129Scy int EVP_sha256(void); 707368129Scy (void)EVP_sha256(); 708369939Sgit2svn ]])],[ 709368129Scy AC_DEFINE([HAVE_EVP_SHA256], 1, 710368129Scy [If you have EVP_sha256]) 711238106Sdes AC_MSG_RESULT(yes) 712238106Sdes ],[ 713238106Sdes AC_MSG_RESULT(no) 714307729Sdes LIBS="$BAKLIBS" 715307729Sdes LIBSSL_LIBS="$BAKSSLLIBS" 716307729Sdes LIBS="$LIBS -ldl -pthread" 717307729Sdes LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread" 718307729Sdes AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread]) 719369939Sgit2svn AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ 720368129Scy int EVP_sha256(void); 721368129Scy (void)EVP_sha256(); 722369939Sgit2svn ]])],[ 723368129Scy AC_DEFINE([HAVE_EVP_SHA256], 1, 724368129Scy [If you have EVP_sha256]) 725307729Sdes AC_MSG_RESULT(yes) 726307729Sdes ],[ 727307729Sdes AC_MSG_RESULT(no) 728307729Sdes AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required]) 729307729Sdes ]) 730238106Sdes ]) 731238106Sdes ]) 732238106Sdes ]) 733238106Sdes fi 734238106Sdes AC_SUBST(HAVE_SSL) 735238106Sdes AC_SUBST(RUNTIME_PATH) 736238106Sdes fi 737238106SdesAC_CHECK_HEADERS([openssl/ssl.h],,, [AC_INCLUDES_DEFAULT]) 738238106SdesAC_CHECK_HEADERS([openssl/err.h],,, [AC_INCLUDES_DEFAULT]) 739238106SdesAC_CHECK_HEADERS([openssl/rand.h],,, [AC_INCLUDES_DEFAULT]) 740238106Sdes])dnl End of ACX_SSL_CHECKS 741238106Sdes 742238106Sdesdnl Check for SSL, where SSL is mandatory 743238106Sdesdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found 744238106Sdesdnl Setup of CPPFLAGS, CFLAGS. Adds -lcrypto to LIBS. 745238106Sdesdnl Checks main header files of SSL. 746238106Sdesdnl 747238106SdesAC_DEFUN([ACX_WITH_SSL], 748238106Sdes[ 749369939Sgit2svnAC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl 750238106Sdes /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[ 751238106Sdes ],[ 752238106Sdes withval="yes" 753238106Sdes ]) 754238106Sdes if test x_$withval = x_no; then 755238106Sdes AC_MSG_ERROR([Need SSL library to do digital signature cryptography]) 756238106Sdes fi 757238106Sdes ACX_SSL_CHECKS($withval) 758238106Sdes])dnl End of ACX_WITH_SSL 759238106Sdes 760238106Sdesdnl Check for SSL, where ssl is optional (--without-ssl is allowed) 761238106Sdesdnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found 762238106Sdesdnl Setup of CPPFLAGS, CFLAGS. Adds -lcrypto to LIBS. 763238106Sdesdnl Checks main header files of SSL. 764238106Sdesdnl 765238106SdesAC_DEFUN([ACX_WITH_SSL_OPTIONAL], 766238106Sdes[ 767369939Sgit2svnAC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl 768238106Sdes /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[ 769238106Sdes ],[ 770238106Sdes withval="yes" 771238106Sdes ]) 772238106Sdes ACX_SSL_CHECKS($withval) 773238106Sdes])dnl End of ACX_WITH_SSL_OPTIONAL 774238106Sdes 775238106Sdesdnl Setup to use -lssl 776238106Sdesdnl To use -lcrypto, use the ACX_WITH_SSL setup (before this one). 777238106SdesAC_DEFUN([ACX_LIB_SSL], 778238106Sdes[ 779238106Sdes# check if libssl needs libdl 780238106SdesBAKLIBS="$LIBS" 781238106SdesLIBS="-lssl $LIBS" 782238106SdesAC_MSG_CHECKING([if libssl needs libdl]) 783238106SdesAC_TRY_LINK_FUNC([SSL_CTX_new], [ 784238106Sdes AC_MSG_RESULT([no]) 785238106Sdes LIBS="$BAKLIBS" 786238106Sdes] , [ 787238106Sdes AC_MSG_RESULT([yes]) 788238106Sdes LIBS="$BAKLIBS" 789238106Sdes AC_SEARCH_LIBS([dlopen], [dl]) 790238106Sdes]) ])dnl End of ACX_LIB_SSL 791238106Sdes 792238106Sdesdnl Setup to use very large files (>2Gb). 793238106Sdesdnl setups fseeko and its own 794238106SdesAC_DEFUN([ACX_SYS_LARGEFILE], 795238106Sdes[ 796238106SdesAC_SYS_LARGEFILE 797238106Sdesdnl try to see if an additional _LARGEFILE_SOURCE 1 is needed to get fseeko 798238106SdesACX_CHECK_COMPILER_FLAG_NEEDED(-D_LARGEFILE_SOURCE=1, 799238106Sdes[ 800238106Sdes#include <stdio.h> 801238106Sdesint test() { 802238106Sdes int a = fseeko(stdin, 0, 0); 803238106Sdes return a; 804238106Sdes} 805238106Sdes], [CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE=1"]) 806238106Sdes]) 807238106Sdes 808238106Sdesdnl Check getaddrinfo. 809238106Sdesdnl Works on linux, solaris, bsd and windows(links winsock). 810238106Sdesdnl defines HAVE_GETADDRINFO, USE_WINSOCK. 811238106SdesAC_DEFUN([ACX_CHECK_GETADDRINFO_WITH_INCLUDES], 812238106Sdes[AC_REQUIRE([AC_PROG_CC]) 813238106SdesAC_MSG_CHECKING(for getaddrinfo) 814238106Sdesac_cv_func_getaddrinfo=no 815238106SdesAC_LINK_IFELSE( 816238106Sdes[AC_LANG_SOURCE([[ 817238106Sdes#ifdef __cplusplus 818238106Sdesextern "C" 819238106Sdes{ 820238106Sdes#endif 821238106Sdeschar* getaddrinfo(); 822238106Sdeschar* (*f) () = getaddrinfo; 823238106Sdes#ifdef __cplusplus 824238106Sdes} 825238106Sdes#endif 826238106Sdesint main() { 827238106Sdes ; 828238106Sdes return 0; 829238106Sdes} 830238106Sdes]])], 831238106Sdesdnl this case on linux, solaris, bsd 832238106Sdes[ac_cv_func_getaddrinfo="yes" 833238106Sdesdnl see if on windows 834238106Sdesif test "$ac_cv_header_windows_h" = "yes"; then 835238106Sdes AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used]) 836238106Sdes USE_WINSOCK="1" 837356345Scy if echo $LIBS | grep 'lws2_32' >/dev/null; then 838356345Scy : 839356345Scy else 840356345Scy LIBS="$LIBS -lws2_32" 841356345Scy fi 842238106Sdesfi 843238106Sdes], 844238106Sdesdnl no quick getaddrinfo, try mingw32 and winsock2 library. 845238106SdesORIGLIBS="$LIBS" 846238106SdesLIBS="$LIBS -lws2_32" 847238106SdesAC_LINK_IFELSE( 848238106Sdes[AC_LANG_PROGRAM( 849238106Sdes[ 850238106Sdes#ifdef HAVE_WS2TCPIP_H 851238106Sdes#include <ws2tcpip.h> 852238106Sdes#endif 853238106Sdes], 854238106Sdes[ 855238106Sdes (void)getaddrinfo(NULL, NULL, NULL, NULL); 856238106Sdes] 857238106Sdes)], 858238106Sdes[ 859238106Sdesac_cv_func_getaddrinfo="yes" 860238106Sdesdnl already: LIBS="$LIBS -lws2_32" 861238106SdesAC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used]) 862238106SdesUSE_WINSOCK="1" 863238106Sdes], 864238106Sdes[ 865238106Sdesac_cv_func_getaddrinfo="no" 866238106SdesLIBS="$ORIGLIBS" 867238106Sdes]) 868238106Sdes) 869238106Sdes 870238106SdesAC_MSG_RESULT($ac_cv_func_getaddrinfo) 871238106Sdesif test $ac_cv_func_getaddrinfo = yes; then 872238106Sdes AC_DEFINE(HAVE_GETADDRINFO, 1, [Whether getaddrinfo is available]) 873238106Sdesfi 874238106Sdes])dnl Endof AC_CHECK_GETADDRINFO_WITH_INCLUDES 875238106Sdes 876238106Sdesdnl check if a function is deprecated. defines DEPRECATED_func in config.h. 877238106Sdesdnl $1: function name 878238106Sdesdnl $2: C-statement that calls the function. 879238106Sdesdnl $3: includes for the program. 880238106Sdesdnl $4: executes if yes 881238106Sdesdnl $5: executes if no 882238106SdesAC_DEFUN([ACX_FUNC_DEPRECATED], 883238106Sdes[ 884238106SdesAC_REQUIRE([AC_PROG_CC]) 885238106SdesAC_MSG_CHECKING(if $1 is deprecated) 886238106Sdescache=`echo $1 | sed 'y%.=/+-%___p_%'` 887238106SdesAC_CACHE_VAL(cv_cc_deprecated_$cache, 888238106Sdes[ 889238106Sdesecho '$3' >conftest.c 890238106Sdesecho 'void f(){ $2 }' >>conftest.c 891238106Sdesif test -z "`$CC -c conftest.c 2>&1 | grep deprecated`"; then 892238106Sdeseval "cv_cc_deprecated_$cache=no" 893238106Sdeselse 894238106Sdeseval "cv_cc_deprecated_$cache=yes" 895238106Sdesfi 896238106Sdesrm -f conftest conftest.o conftest.c 897238106Sdes]) 898238106Sdesif eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then 899238106SdesAC_MSG_RESULT(yes) 900238106SdesAC_DEFINE_UNQUOTED(AS_TR_CPP([DEPRECATED_$1]), 1, [Whether $1 is deprecated]) 901238106Sdes: 902238106Sdes$4 903238106Sdeselse 904238106SdesAC_MSG_RESULT(no) 905238106Sdes: 906238106Sdes$5 907238106Sdesfi 908238106Sdes])dnl end of ACX_FUNC_DEPRECATED 909238106Sdes 910238106Sdesdnl check if select and nonblocking sockets actually work. 911238106Sdesdnl Needs fork(2) and select(2). 912238106Sdesdnl defines NONBLOCKING_IS_BROKEN, and if that is true multiple reads from 913238106Sdesdnl a nonblocking socket do not work, a new call to select is necessary. 914238106SdesAC_DEFUN([ACX_CHECK_NONBLOCKING_BROKEN], 915238106Sdes[ 916238106SdesAC_MSG_CHECKING([if nonblocking sockets work]) 917238106Sdesif echo $target | grep mingw32 >/dev/null; then 918238106Sdes AC_MSG_RESULT([no (windows)]) 919238106Sdes AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).]) 920238106Sdeselse 921238106SdesAC_RUN_IFELSE([ 922238106SdesAC_LANG_SOURCE([[ 923238106Sdes#include <stdio.h> 924238106Sdes#include <string.h> 925238106Sdes#include <stdlib.h> 926238106Sdes#include <fcntl.h> 927238106Sdes#include <errno.h> 928238106Sdes#ifdef HAVE_SYS_TYPES_H 929238106Sdes#include <sys/types.h> 930238106Sdes#endif 931238106Sdes#ifdef HAVE_SYS_SOCKET_H 932238106Sdes#include <sys/socket.h> 933238106Sdes#endif 934238106Sdes#ifdef HAVE_NETINET_IN_H 935238106Sdes#include <netinet/in.h> 936238106Sdes#endif 937238106Sdes#ifdef HAVE_ARPA_INET_H 938238106Sdes#include <arpa/inet.h> 939238106Sdes#endif 940238106Sdes#ifdef HAVE_UNISTD_H 941238106Sdes#include <unistd.h> 942238106Sdes#endif 943238106Sdes#ifdef HAVE_TIME_H 944238106Sdes#include <time.h> 945238106Sdes#endif 946238106Sdes 947238106Sdesint main(void) 948238106Sdes{ 949238106Sdes int port; 950238106Sdes int sfd, cfd; 951238106Sdes int num = 10; 952238106Sdes int i, p; 953238106Sdes struct sockaddr_in a; 954238106Sdes /* test if select and nonblocking reads work well together */ 955238106Sdes /* open port. 956238106Sdes fork child to send 10 messages. 957238106Sdes select to read. 958238106Sdes then try to nonblocking read the 10 messages 959238106Sdes then, nonblocking read must give EAGAIN 960238106Sdes */ 961238106Sdes 962238106Sdes port = 12345 + (time(0)%32); 963238106Sdes sfd = socket(PF_INET, SOCK_DGRAM, 0); 964238106Sdes if(sfd == -1) { 965238106Sdes perror("socket"); 966238106Sdes return 1; 967238106Sdes } 968238106Sdes memset(&a, 0, sizeof(a)); 969238106Sdes a.sin_family = AF_INET; 970238106Sdes a.sin_port = htons(port); 971238106Sdes a.sin_addr.s_addr = inet_addr("127.0.0.1"); 972238106Sdes if(bind(sfd, (struct sockaddr*)&a, sizeof(a)) < 0) { 973238106Sdes perror("bind"); 974238106Sdes return 1; 975238106Sdes } 976238106Sdes if(fcntl(sfd, F_SETFL, O_NONBLOCK) == -1) { 977238106Sdes perror("fcntl"); 978238106Sdes return 1; 979238106Sdes } 980238106Sdes 981238106Sdes cfd = socket(PF_INET, SOCK_DGRAM, 0); 982238106Sdes if(cfd == -1) { 983238106Sdes perror("client socket"); 984238106Sdes return 1; 985238106Sdes } 986238106Sdes a.sin_port = 0; 987238106Sdes if(bind(cfd, (struct sockaddr*)&a, sizeof(a)) < 0) { 988238106Sdes perror("client bind"); 989238106Sdes return 1; 990238106Sdes } 991238106Sdes a.sin_port = htons(port); 992238106Sdes 993238106Sdes /* no handler, causes exit in 10 seconds */ 994238106Sdes alarm(10); 995238106Sdes 996238106Sdes /* send and receive on the socket */ 997238106Sdes if((p=fork()) == 0) { 998238106Sdes for(i=0; i<num; i++) { 999238106Sdes if(sendto(cfd, &i, sizeof(i), 0, 1000238106Sdes (struct sockaddr*)&a, sizeof(a)) < 0) { 1001238106Sdes perror("sendto"); 1002238106Sdes return 1; 1003238106Sdes } 1004238106Sdes } 1005238106Sdes } else { 1006238106Sdes /* parent */ 1007238106Sdes fd_set rset; 1008238106Sdes int x; 1009238106Sdes if(p == -1) { 1010238106Sdes perror("fork"); 1011238106Sdes return 1; 1012238106Sdes } 1013238106Sdes FD_ZERO(&rset); 1014238106Sdes FD_SET(sfd, &rset); 1015238106Sdes if(select(sfd+1, &rset, NULL, NULL, NULL) < 1) { 1016238106Sdes perror("select"); 1017238106Sdes return 1; 1018238106Sdes } 1019238106Sdes i = 0; 1020238106Sdes while(i < num) { 1021238106Sdes if(recv(sfd, &x, sizeof(x), 0) != sizeof(x)) { 1022238106Sdes if(errno == EAGAIN) 1023238106Sdes continue; 1024238106Sdes perror("recv"); 1025238106Sdes return 1; 1026238106Sdes } 1027238106Sdes i++; 1028238106Sdes } 1029238106Sdes /* now we want to get EAGAIN: nonblocking goodness */ 1030238106Sdes errno = 0; 1031238106Sdes recv(sfd, &x, sizeof(x), 0); 1032238106Sdes if(errno != EAGAIN) { 1033238106Sdes perror("trying to recv again"); 1034238106Sdes return 1; 1035238106Sdes } 1036238106Sdes /* EAGAIN encountered */ 1037238106Sdes } 1038238106Sdes 1039238106Sdes close(sfd); 1040238106Sdes close(cfd); 1041238106Sdes return 0; 1042238106Sdes} 1043238106Sdes]])], [ 1044238106Sdes AC_MSG_RESULT([yes]) 1045238106Sdes], [ 1046238106Sdes AC_MSG_RESULT([no]) 1047238106Sdes AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).]) 1048238106Sdes], [ 1049238106Sdes AC_MSG_RESULT([crosscompile(yes)]) 1050238106Sdes]) 1051238106Sdesfi 1052238106Sdes])dnl End of ACX_CHECK_NONBLOCKING_BROKEN 1053238106Sdes 1054238106Sdesdnl Check if mkdir has one or two arguments. 1055238106Sdesdnl defines MKDIR_HAS_ONE_ARG 1056238106SdesAC_DEFUN([ACX_MKDIR_ONE_ARG], 1057238106Sdes[ 1058238106SdesAC_MSG_CHECKING([whether mkdir has one arg]) 1059369939Sgit2svnAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 1060238106Sdes#include <stdio.h> 1061238106Sdes#include <unistd.h> 1062238106Sdes#ifdef HAVE_WINSOCK2_H 1063238106Sdes#include <winsock2.h> 1064238106Sdes#endif 1065238106Sdes#ifdef HAVE_SYS_STAT_H 1066238106Sdes#include <sys/stat.h> 1067238106Sdes#endif 1068369939Sgit2svn]], [[ 1069238106Sdes (void)mkdir("directory"); 1070369939Sgit2svn]])],[AC_MSG_RESULT(yes) 1071238106SdesAC_DEFINE(MKDIR_HAS_ONE_ARG, 1, [Define if mkdir has one argument.]) 1072369939Sgit2svn],[AC_MSG_RESULT(no) 1073369939Sgit2svn]) 1074238106Sdes])dnl end of ACX_MKDIR_ONE_ARG 1075238106Sdes 1076238106Sdesdnl Check for ioctlsocket function. works on mingw32 too. 1077238106SdesAC_DEFUN([ACX_FUNC_IOCTLSOCKET], 1078238106Sdes[ 1079238106Sdes# check ioctlsocket 1080238106SdesAC_MSG_CHECKING(for ioctlsocket) 1081238106SdesAC_LINK_IFELSE([AC_LANG_PROGRAM([ 1082238106Sdes#ifdef HAVE_WINSOCK2_H 1083238106Sdes#include <winsock2.h> 1084238106Sdes#endif 1085238106Sdes], [ 1086238106Sdes (void)ioctlsocket(0, 0, NULL); 1087238106Sdes])], [ 1088238106SdesAC_MSG_RESULT(yes) 1089238106SdesAC_DEFINE(HAVE_IOCTLSOCKET, 1, [if the function 'ioctlsocket' is available]) 1090238106Sdes],[AC_MSG_RESULT(no)]) 1091238106Sdes])dnl end of ACX_FUNC_IOCTLSOCKET 1092238106Sdes 1093238106Sdesdnl detect malloc and provide malloc compat prototype. 1094238106Sdesdnl $1: unique name for compat code 1095238106SdesAC_DEFUN([ACX_FUNC_MALLOC], 1096238106Sdes[ 1097238106Sdes AC_MSG_CHECKING([for GNU libc compatible malloc]) 1098238106Sdes AC_RUN_IFELSE([AC_LANG_PROGRAM( 1099238106Sdes[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H 1100238106Sdes#include <stdlib.h> 1101238106Sdes#else 1102238106Sdeschar *malloc (); 1103238106Sdes#endif 1104238106Sdes]], [ if(malloc(0) != 0) return 1;]) 1105238106Sdes], 1106238106Sdes [AC_MSG_RESULT([no]) 1107238106Sdes AC_LIBOBJ(malloc) 1108238106Sdes AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if replacement function should be used.])] , 1109238106Sdes [AC_MSG_RESULT([yes]) 1110238106Sdes AC_DEFINE([HAVE_MALLOC], 1, [If have GNU libc compatible malloc])], 1111238106Sdes [AC_MSG_RESULT([no (crosscompile)]) 1112238106Sdes AC_LIBOBJ(malloc) 1113238106Sdes AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if replacement function should be used.])] ) 1114238106Sdes]) 1115238106Sdes 1116238106Sdesdnl Define fallback for fseeko and ftello if needed. 1117238106SdesAC_DEFUN([AHX_CONFIG_FSEEKO], 1118238106Sdes[ 1119238106Sdes#ifndef HAVE_FSEEKO 1120238106Sdes#define fseeko fseek 1121238106Sdes#define ftello ftell 1122238106Sdes#endif /* HAVE_FSEEKO */ 1123238106Sdes]) 1124238106Sdes 1125238106Sdesdnl Define RAND_MAX if not defined 1126238106SdesAC_DEFUN([AHX_CONFIG_RAND_MAX], 1127238106Sdes[ 1128238106Sdes#ifndef RAND_MAX 1129238106Sdes#define RAND_MAX 2147483647 1130238106Sdes#endif 1131238106Sdes]) 1132238106Sdes 1133238106Sdesdnl Define MAXHOSTNAMELEN if not defined 1134238106SdesAC_DEFUN([AHX_CONFIG_MAXHOSTNAMELEN], 1135238106Sdes[ 1136238106Sdes#ifndef MAXHOSTNAMELEN 1137238106Sdes#define MAXHOSTNAMELEN 256 1138238106Sdes#endif 1139238106Sdes]) 1140238106Sdes 1141238106Sdesdnl Define IPV6_MIN_MTU if not defined 1142238106SdesAC_DEFUN([AHX_CONFIG_IPV6_MIN_MTU], 1143238106Sdes[ 1144238106Sdes#ifndef IPV6_MIN_MTU 1145238106Sdes#define IPV6_MIN_MTU 1280 1146238106Sdes#endif /* IPV6_MIN_MTU */ 1147238106Sdes]) 1148238106Sdes 1149238106Sdesdnl provide snprintf, vsnprintf compat prototype 1150238106Sdesdnl $1: unique name for compat code 1151238106SdesAC_DEFUN([AHX_CONFIG_SNPRINTF], 1152238106Sdes[ 1153238106Sdes#ifndef HAVE_SNPRINTF 1154238106Sdes#define snprintf snprintf_$1 1155238106Sdes#define vsnprintf vsnprintf_$1 1156238106Sdes#include <stdarg.h> 1157238106Sdesint snprintf (char *str, size_t count, const char *fmt, ...); 1158238106Sdesint vsnprintf (char *str, size_t count, const char *fmt, va_list arg); 1159238106Sdes#endif /* HAVE_SNPRINTF */ 1160238106Sdes]) 1161238106Sdes 1162238106Sdesdnl provide inet_pton compat prototype. 1163238106Sdesdnl $1: unique name for compat code 1164238106SdesAC_DEFUN([AHX_CONFIG_INET_PTON], 1165238106Sdes[ 1166238106Sdes#ifndef HAVE_INET_PTON 1167238106Sdes#define inet_pton inet_pton_$1 1168238106Sdesint inet_pton(int af, const char* src, void* dst); 1169238106Sdes#endif /* HAVE_INET_PTON */ 1170238106Sdes]) 1171238106Sdes 1172238106Sdesdnl provide inet_ntop compat prototype. 1173238106Sdesdnl $1: unique name for compat code 1174238106SdesAC_DEFUN([AHX_CONFIG_INET_NTOP], 1175238106Sdes[ 1176238106Sdes#ifndef HAVE_INET_NTOP 1177238106Sdes#define inet_ntop inet_ntop_$1 1178238106Sdesconst char *inet_ntop(int af, const void *src, char *dst, size_t size); 1179238106Sdes#endif 1180238106Sdes]) 1181238106Sdes 1182238106Sdesdnl provide inet_aton compat prototype. 1183238106Sdesdnl $1: unique name for compat code 1184238106SdesAC_DEFUN([AHX_CONFIG_INET_ATON], 1185238106Sdes[ 1186238106Sdes#ifndef HAVE_INET_ATON 1187238106Sdes#define inet_aton inet_aton_$1 1188238106Sdesint inet_aton(const char *cp, struct in_addr *addr); 1189238106Sdes#endif 1190238106Sdes]) 1191238106Sdes 1192238106Sdesdnl provide memmove compat prototype. 1193238106Sdesdnl $1: unique name for compat code 1194238106SdesAC_DEFUN([AHX_CONFIG_MEMMOVE], 1195238106Sdes[ 1196238106Sdes#ifndef HAVE_MEMMOVE 1197238106Sdes#define memmove memmove_$1 1198238106Sdesvoid *memmove(void *dest, const void *src, size_t n); 1199238106Sdes#endif 1200238106Sdes]) 1201238106Sdes 1202238106Sdesdnl provide strlcat compat prototype. 1203238106Sdesdnl $1: unique name for compat code 1204238106SdesAC_DEFUN([AHX_CONFIG_STRLCAT], 1205238106Sdes[ 1206238106Sdes#ifndef HAVE_STRLCAT 1207238106Sdes#define strlcat strlcat_$1 1208238106Sdessize_t strlcat(char *dst, const char *src, size_t siz); 1209238106Sdes#endif 1210238106Sdes]) 1211238106Sdes 1212238106Sdesdnl provide strlcpy compat prototype. 1213238106Sdesdnl $1: unique name for compat code 1214238106SdesAC_DEFUN([AHX_CONFIG_STRLCPY], 1215238106Sdes[ 1216238106Sdes#ifndef HAVE_STRLCPY 1217238106Sdes#define strlcpy strlcpy_$1 1218238106Sdessize_t strlcpy(char *dst, const char *src, size_t siz); 1219238106Sdes#endif 1220238106Sdes]) 1221238106Sdes 1222238106Sdesdnl provide gmtime_r compat prototype. 1223238106Sdesdnl $1: unique name for compat code 1224238106SdesAC_DEFUN([AHX_CONFIG_GMTIME_R], 1225238106Sdes[ 1226238106Sdes#ifndef HAVE_GMTIME_R 1227238106Sdes#define gmtime_r gmtime_r_$1 1228238106Sdesstruct tm *gmtime_r(const time_t *timep, struct tm *result); 1229238106Sdes#endif 1230238106Sdes]) 1231238106Sdes 1232287917Sdesdnl provide reallocarray compat prototype. 1233287917Sdesdnl $1: unique name for compat code 1234287917SdesAC_DEFUN([AHX_CONFIG_REALLOCARRAY], 1235287917Sdes[ 1236287917Sdes#ifndef HAVE_REALLOCARRAY 1237287917Sdes#define reallocarray reallocarray$1 1238287917Sdesvoid* reallocarray(void *ptr, size_t nmemb, size_t size); 1239287917Sdes#endif 1240287917Sdes]) 1241287917Sdes 1242238106Sdesdnl provide w32 compat definition for sleep 1243238106SdesAC_DEFUN([AHX_CONFIG_W32_SLEEP], 1244238106Sdes[ 1245266114Sdes#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H) 1246238106Sdes#define sleep(x) Sleep((x)*1000) /* on win32 */ 1247238106Sdes#endif /* HAVE_SLEEP */ 1248238106Sdes]) 1249238106Sdes 1250238106Sdesdnl provide w32 compat definition for usleep 1251238106SdesAC_DEFUN([AHX_CONFIG_W32_USLEEP], 1252238106Sdes[ 1253238106Sdes#ifndef HAVE_USLEEP 1254238106Sdes#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */ 1255238106Sdes#endif /* HAVE_USLEEP */ 1256238106Sdes]) 1257238106Sdes 1258238106Sdesdnl provide w32 compat definition for random 1259238106SdesAC_DEFUN([AHX_CONFIG_W32_RANDOM], 1260238106Sdes[ 1261238106Sdes#ifndef HAVE_RANDOM 1262238106Sdes#define random rand /* on win32, for tests only (bad random) */ 1263238106Sdes#endif /* HAVE_RANDOM */ 1264238106Sdes]) 1265238106Sdes 1266238106Sdesdnl provide w32 compat definition for srandom 1267238106SdesAC_DEFUN([AHX_CONFIG_W32_SRANDOM], 1268238106Sdes[ 1269238106Sdes#ifndef HAVE_SRANDOM 1270238106Sdes#define srandom(x) srand(x) /* on win32, for tests only (bad random) */ 1271238106Sdes#endif /* HAVE_SRANDOM */ 1272238106Sdes]) 1273238106Sdes 1274238106Sdesdnl provide w32 compat definition for FD_SET_T 1275238106SdesAC_DEFUN([AHX_CONFIG_W32_FD_SET_T], 1276238106Sdes[ 1277238106Sdes/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */ 1278238106Sdes#ifdef HAVE_WINSOCK2_H 1279238106Sdes#define FD_SET_T (u_int) 1280238106Sdes#else 1281238106Sdes#define FD_SET_T 1282238106Sdes#endif 1283238106Sdes]) 1284238106Sdes 1285238106Sdesdnl Remove an extension flag from CFLAGS, define replacement to be made. 1286238106Sdesdnl Used by ACX_STRIP_EXT_FLAGS. 1287238106Sdesdnl $1: the name of the flag, for example -D_GNU_SOURCE. 1288238106SdesAC_DEFUN([ACX_CFLAGS_STRIP], 1289238106Sdes[ 1290238106Sdes if echo $CFLAGS | grep " $1" >/dev/null 2>&1; then 1291238106Sdes CFLAGS="`echo $CFLAGS | sed -e 's/ $1//g'`" 1292238106Sdes AC_DEFINE(m4_bpatsubst(OMITTED_$1,[[-=]],_), 1, Put $1 define in config.h) 1293238106Sdes fi 1294238106Sdes]) 1295238106Sdes 1296238106Sdesdnl Remove EXT flags from the CFLAGS and set them to be defined in config.h 1297238106Sdesdnl use with ACX_DETERMINE_EXT_FLAGS. 1298238106SdesAC_DEFUN([ACX_STRIP_EXT_FLAGS], 1299238106Sdes[ 1300238106Sdes AC_MSG_NOTICE([Stripping extension flags...]) 1301238106Sdes ACX_CFLAGS_STRIP(-D_GNU_SOURCE) 1302238106Sdes ACX_CFLAGS_STRIP(-D_BSD_SOURCE) 1303296415Sdes ACX_CFLAGS_STRIP(-D_DEFAULT_SOURCE) 1304238106Sdes ACX_CFLAGS_STRIP(-D__EXTENSIONS__) 1305238106Sdes ACX_CFLAGS_STRIP(-D_POSIX_C_SOURCE=200112) 1306238106Sdes ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE=600) 1307238106Sdes ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE_EXTENDED=1) 1308238106Sdes ACX_CFLAGS_STRIP(-D_ALL_SOURCE) 1309238106Sdes ACX_CFLAGS_STRIP(-D_LARGEFILE_SOURCE=1) 1310238106Sdes]) dnl End of ACX_STRIP_EXT_FLAGS 1311238106Sdes 1312238106Sdesdnl define one omitted flag for config.h 1313238106Sdesdnl $1: flag name. -D_GNU_SOURCE 1314238106Sdesdnl $2: replacement define. _GNU_SOURCE 1315238106Sdesdnl $3: define value, 1 1316238106SdesAC_DEFUN([AHX_CONFIG_FLAG_OMITTED], 1317238106Sdes[#if defined($1) && !defined($2) 1318238106Sdes#define $2 $3 1319238106Sdes[#]endif ]) 1320238106Sdes 1321238106Sdesdnl Wrapper for AHX_CONFIG_FLAG_OMITTED for -D style flags 1322238106Sdesdnl $1: the -DNAME or -DNAME=value string. 1323238106SdesAC_DEFUN([AHX_CONFIG_FLAG_EXT], 1324238106Sdes[AHX_CONFIG_FLAG_OMITTED(m4_bpatsubst(OMITTED_$1,[[-=]],_),m4_bpatsubst(m4_bpatsubst($1,-D,),=.*$,),m4_if(m4_bregexp($1,=),-1,1,m4_bpatsubst($1,^.*=,))) 1325238106Sdes]) 1326238106Sdes 1327238106Sdesdnl config.h part to define omitted cflags, use with ACX_STRIP_EXT_FLAGS. 1328238106SdesAC_DEFUN([AHX_CONFIG_EXT_FLAGS], 1329238106Sdes[AHX_CONFIG_FLAG_EXT(-D_GNU_SOURCE) 1330238106SdesAHX_CONFIG_FLAG_EXT(-D_BSD_SOURCE) 1331296415SdesAHX_CONFIG_FLAG_EXT(-D_DEFAULT_SOURCE) 1332238106SdesAHX_CONFIG_FLAG_EXT(-D__EXTENSIONS__) 1333238106SdesAHX_CONFIG_FLAG_EXT(-D_POSIX_C_SOURCE=200112) 1334238106SdesAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE=600) 1335238106SdesAHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE_EXTENDED=1) 1336238106SdesAHX_CONFIG_FLAG_EXT(-D_ALL_SOURCE) 1337238106SdesAHX_CONFIG_FLAG_EXT(-D_LARGEFILE_SOURCE=1) 1338238106Sdes]) 1339238106Sdes 1340238106Sdesdnl check if memcmp is using signed characters and replace if so. 1341238106SdesAC_DEFUN([ACX_CHECK_MEMCMP_SIGNED], 1342238106Sdes[AC_MSG_CHECKING([if memcmp compares unsigned]) 1343238106SdesAC_RUN_IFELSE([AC_LANG_SOURCE([[ 1344238106Sdes#include <stdio.h> 1345238106Sdes#include <stdlib.h> 1346238106Sdes#include <string.h> 1347238106Sdesint main(void) 1348238106Sdes{ 1349238106Sdes char a = 255, b = 0; 1350238106Sdes if(memcmp(&a, &b, 1) < 0) 1351238106Sdes return 1; 1352238106Sdes return 0; 1353238106Sdes} 1354238106Sdes]])], [AC_MSG_RESULT([yes]) ], 1355238106Sdes[ AC_MSG_RESULT([no]) 1356238106Sdes AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes]) 1357238106Sdes AC_LIBOBJ([memcmp]) 1358238106Sdes], [ AC_MSG_RESULT([cross-compile no]) 1359238106Sdes AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes]) 1360238106Sdes AC_LIBOBJ([memcmp]) 1361238106Sdes]) ]) 1362238106Sdes 1363238106Sdesdnl define memcmp to its replacement, pass unique id for program as arg 1364238106SdesAC_DEFUN([AHX_MEMCMP_BROKEN], [ 1365238106Sdes#ifdef MEMCMP_IS_BROKEN 1366238106Sdes#include "compat/memcmp.h" 1367238106Sdes#define memcmp memcmp_$1 1368238106Sdesint memcmp(const void *x, const void *y, size_t n); 1369238106Sdes#endif 1370238106Sdes]) 1371238106Sdes 1372238106Sdesdnl ACX_CHECK_SS_FAMILY - check for sockaddr_storage.ss_family 1373238106SdesAC_DEFUN([ACX_CHECK_SS_FAMILY], 1374238106Sdes[AC_CHECK_MEMBER([struct sockaddr_storage.ss_family], [], [ 1375238106Sdes AC_CHECK_MEMBER([struct sockaddr_storage.__ss_family], [ 1376238106Sdes AC_DEFINE([ss_family], [__ss_family], [Fallback member name for socket family in struct sockaddr_storage]) 1377238106Sdes ],, [AC_INCLUDES_DEFAULT 1378238106Sdes#ifdef HAVE_NETINET_IN_H 1379238106Sdes#include <netinet/in.h> 1380238106Sdes#endif 1381238106Sdes#ifdef HAVE_SYS_SOCKET_H 1382238106Sdes#include <sys/socket.h> 1383238106Sdes#endif 1384238106Sdes#ifdef HAVE_NETDB_H 1385238106Sdes#include <netdb.h> 1386238106Sdes#endif 1387238106Sdes#ifdef HAVE_ARPA_INET_H 1388238106Sdes#include <arpa/inet.h> 1389238106Sdes#endif 1390238106Sdes ]) 1391238106Sdes], [AC_INCLUDES_DEFAULT 1392238106Sdes#ifdef HAVE_NETINET_IN_H 1393238106Sdes#include <netinet/in.h> 1394238106Sdes#endif 1395238106Sdes#ifdef HAVE_SYS_SOCKET_H 1396238106Sdes#include <sys/socket.h> 1397238106Sdes#endif 1398238106Sdes#ifdef HAVE_NETDB_H 1399238106Sdes#include <netdb.h> 1400238106Sdes#endif 1401238106Sdes#ifdef HAVE_ARPA_INET_H 1402238106Sdes#include <arpa/inet.h> 1403238106Sdes#endif 1404238106Sdes]) ]) 1405238106Sdes 1406289063Sdesdnl Check if CC and linker support -fPIE and -pie. 1407289063Sdesdnl If so, sets them in CFLAGS / LDFLAGS. 1408289063SdesAC_DEFUN([ACX_CHECK_PIE], [ 1409289063Sdes AC_ARG_ENABLE([pie], AS_HELP_STRING([--enable-pie], [Enable Position-Independent Executable (eg. to fully benefit from ASLR, small performance penalty)])) 1410289063Sdes AS_IF([test "x$enable_pie" = "xyes"], [ 1411289063Sdes AC_MSG_CHECKING([if $CC supports PIE]) 1412289063Sdes BAKLDFLAGS="$LDFLAGS" 1413289063Sdes BAKCFLAGS="$CFLAGS" 1414289063Sdes LDFLAGS="$LDFLAGS -pie" 1415289063Sdes CFLAGS="$CFLAGS -fPIE" 1416289063Sdes AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ 1417289063Sdes if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then 1418289063Sdes LDFLAGS="$BAKLDFLAGS" 1419289063Sdes AC_MSG_RESULT(no) 1420289063Sdes else 1421289063Sdes AC_MSG_RESULT(yes) 1422289063Sdes fi 1423289063Sdes rm -f conftest conftest.c conftest.o 1424289063Sdes ], [LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)]) 1425289063Sdes ]) 1426289063Sdes]) 1427289063Sdes 1428289063Sdesdnl Check if linker supports -Wl,-z,relro,-z,now. 1429289063Sdesdnl If so, adds it to LDFLAGS. 1430289063SdesAC_DEFUN([ACX_CHECK_RELRO_NOW], [ 1431289063Sdes 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)])) 1432289063Sdes AS_IF([test "x$enable_relro_now" = "xyes"], [ 1433289063Sdes AC_MSG_CHECKING([if $CC supports -Wl,-z,relro,-z,now]) 1434289063Sdes BAKLDFLAGS="$LDFLAGS" 1435289063Sdes LDFLAGS="$LDFLAGS -Wl,-z,relro,-z,now" 1436289063Sdes AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ 1437289063Sdes if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then 1438289063Sdes LDFLAGS="$BAKLDFLAGS" 1439289063Sdes AC_MSG_RESULT(no) 1440289063Sdes else 1441289063Sdes AC_MSG_RESULT(yes) 1442289063Sdes fi 1443289063Sdes rm -f conftest conftest.c conftest.o 1444289063Sdes ], [LDFLAGS="$BAKLDFLAGS" ; AC_MSG_RESULT(no)]) 1445289063Sdes ]) 1446289063Sdes]) 1447289063Sdes 1448238106Sdesdnl End of file 1449