dnl # Custom hackery to discover version at configure time
dnl #
dnl #############################################################
+RADIUSD_MAJOR_VERSION=`cat VERSION | cut -f1 -d.`
+RADIUSD_MINOR_VERSION=`cat VERSION | cut -f2 -d.`
+RADIUSD_INCRM_VERSION=`cat VERSION | cut -f3 -d. | sed 's/[[\.-]].*$//'`
-RADIUSD_MAJOR_VERSION=`cat VERSION | sed 's/\..*//'`
-RADIUSD_MINOR_VERSION=`cat VERSION | sed 's/^[[^\.]]*\.//' | sed 's/\..*$//'`
-RADIUSD_INCRM_VERSION=`cat VERSION | sed 's/^.*\..*\.//' | sed 's/[[\.-]].*$//'`
-
-RADIUSD_VERSION=`echo | awk -v major="$RADIUSD_MAJOR_VERSION" \
--v minor="$RADIUSD_MINOR_VERSION" \
--v incrm="$RADIUSD_INCRM_VERSION" \
-'{ printf "%02i%02i%02i", major, minor, incrm }'`
+RADIUSD_VERSION=`printf "%02i%02i%02i" $RADIUSD_MAJOR_VERSION $RADIUSD_MINOR_VERSION $RADIUSD_INCRM_VERSION`
dnl #
dnl # Still useful for custom builds
AC_CANONICAL_SYSTEM
dnl #
-dnl # As of OSX 10.9 (Mavericks), /usr is no longer populated with the
-dnl # standard set of headers and libraries, instead were meant to use
-dnl # one of the SDKs which contains system headers and libraries for
-dnl # different versions of OSX and iOS.
-dnl #
-case "$host" in
- *-darwin*)
- dnl #
- dnl # The version of GCC apple ships with Mavericks works out of the
- dnl # box, and presumably selects the highest version SDK for OSX.
- dnl #
- AC_MSG_CHECKING([if cc is apple llvm])
- if ! $CC --version 2>&1 | grep -I 'Apple LLVM' > /dev/null; then
- AC_MSG_RESULT(no)
- AC_CHECK_PROG(SW_VERS, sw_vers, yes, no)
- AC_CHECK_PROG(XCODEBUILD, xcodebuild, yes, no)
-
- if test "x$SW_VERS" = "xyes" && test "x$XCODEBUILD" = "xyes"; then
- AC_MSG_NOTICE([determining OSX SDK path])
- osx_sdk_path=$(xcodebuild -version -sdk macosx$(sw_vers -productVersion | egrep -o '^[[0-9]]+\.[[0-9]]+') Path)
- AC_MSG_RESULT([$osx_sdk_path])
-
- dnl #
- dnl # We need to export these, else the child configure scripts all fail
- dnl # their compiler checks.
- dnl #
- export CFLAGS="$CFLAGS --sysroot=$osx_sdk_path"
- export CPPFLAGS="$CPPFLAGS --sysroot=$osx_sdk_path"
- export LDFLAGS="$LDFLAGS -L$osx_sdk_path/usr/lib/"
- DARWIN_CFLAGS="--sysroot=$osx_sdk_path"
- AC_SUBST(DARWIN_CFLAGS)
- fi
- else
- AC_MSG_RESULT(yes)
- fi
- ;;
-esac
-
-dnl #
dnl # Check for GNU cc
dnl #
AC_PROG_CC
dnl # Set Default CFLAGS for GCC compatible compilers
dnl #
if test "x$GCC" = "xyes"; then
- CFLAGS="$CFLAGS -Wall -D_GNU_SOURCE"
+ CFLAGS="$CFLAGS -Wall -std=c99 -D_GNU_SOURCE"
fi
dnl #
dnl # check for system bytesex
dnl # AC_DEFINES WORDS_BIGENDIAN
dnl #
-AC_C_BIGENDIAN
+AC_C_BIGENDIAN(
+ [AC_DEFINE(FR_BIG_ENDIAN, 1, [Define if your processor stores words with the most significant byte first])],
+ [AC_DEFINE(FR_LITTLE_ENDIAN, 1, [Define if your processor stores words with the least significant byte first])]
+)
dnl #
dnl # Find GNU Make.
AC_SUBST(raddbdir)
AC_MSG_RESULT($raddbdir)
+dnl #
+dnl # extra argument: --with-dictdir
+dnl #
+dictdir='${datarootdir}/freeradius'
+AC_MSG_CHECKING(dictdir)
+AC_ARG_WITH(dictdir,
+[ --with-dictdir=DIR directory for dictionary files [DATAROOTDIR/freeradius] ],
+[ case "$withval" in
+ no)
+ AC_MSG_ERROR([Need dictdir])
+ ;;
+ yes)
+ ;;
+ [[\\/$]]* | ?:[[\\/]]* )
+ dictdir="$withval"
+ ;;
+ *)
+ AC_MSG_ERROR([expected an absolute directory name for --with-dictdir: $withval])
+ ;;
+ esac ]
+)
+AC_SUBST(dictdir)
+AC_MSG_RESULT($dictdir)
+
modconfdir='${raddbdir}/mods-config'
AC_SUBST(modconfdir)
USE_SHARED_LIBS=yes
AC_ARG_WITH(shared-libs,
-[ --with-shared-libs build dynamic libraries and link against them. (default=yes)],
+[AS_HELP_STRING([--with-shared-libs ],
+[build dynamic libraries and link against them. (default=yes)])],
[ case "$withval" in
no)
USE_SHARED_LIBS=no
dnl #
EXPERIMENTAL=
AC_ARG_WITH(experimental-modules,
-[ --with-experimental-modules use experimental and unstable modules. (default=no, unless --enable-developer=yes) ],
+[AS_HELP_STRING([--with-experimental-modules],
+[use experimental and unstable modules. (default=no, unless --enable-developer=yes)])],
[ case "$withval" in
yes)
EXPERIMENTAL=yes
dnl #
WITH_UDPFROMTO=yes
AC_ARG_WITH(udpfromto,
-[ --with-udpfromto compile in UDPFROMTO support. (default=yes)],
+[ --with-udpfromto compile in UDPFROMTO support. (default=yes)],
[ case "$withval" in
yes)
WITH_UDPFROMTO=yes
fi
dnl #
-dnl # extra argument: --with-openssl
+dnl # These next two arguments don't actually do anything. They're
+dnl # place holders so that the top-level configure script can tell
+dnl # the user how to configure lower-level modules
dnl #
-WITH_OPENSSL=yes
-AC_ARG_WITH(openssl,
-[ --with-openssl use OpenSSL. (default=yes)],
+
+dnl #
+dnl # extra argument: --with-rlm-FOO-lib-dir
+dnl #
+AC_ARG_WITH(rlm-FOO-lib-dir,
+[AS_HELP_STRING([--with-rlm-FOO-lib-dir=DIR],
+[directory in which to look for library files used by module FOO])],
[ case "$withval" in
- no)
- WITH_OPENSSL=no
- ;;
*)
- WITH_OPENSSL=yes
;;
esac ]
)
dnl #
-dnl # extra argument: --with-openssl-includes=dir
+dnl # extra argument: --with-rlm-FOO-include-dir
dnl #
-OPENSSL_INCLUDE_DIR=
-AC_ARG_WITH(openssl-includes,
-[ --with-openssl-includes=DIR directory to look for OpenSSL include files in],
+AC_ARG_WITH(rlm-FOO-include-dir,
+[AS_HELP_STRING([--with-rlm-FOO-include-dir=DIR],
+[directory in which to look for include files used by module FOO])],
[ case "$withval" in
- *) OPENSSL_INCLUDE_DIR="$withval"
+ *)
;;
esac ]
)
dnl #
-dnl # extra argument: --with-openssl-libraries=dir
+dnl # extra argument: --with-openssl
dnl #
-OPENSSL_LIB_DIR=
-AC_ARG_WITH(openssl-libraries,
-[ --with-openssl-libraries=DIR directory to look for OpenSSL library files in],
+WITH_OPENSSL=yes
+AC_ARG_WITH(openssl,
+[ --with-openssl use OpenSSL. (default=yes)],
[ case "$withval" in
- *) OPENSSL_LIB_DIR="$withval"
+ no)
+ WITH_OPENSSL=no
+ ;;
+ *)
+ WITH_OPENSSL=yes
;;
esac ]
)
dnl #
-dnl # These next two arguments don't actually do anything. They're
-dnl # place holders so that the top-level configure script can tell
-dnl # the user how to configure lower-level modules
-dnl #
-
-dnl #
-dnl # extra argument: --with-rlm-FOO-lib-dir
+dnl # extra argument: --with-openssl-lib-dir=dir
dnl #
-AC_ARG_WITH(rlm-FOO-lib-dir,
-[ --with-rlm-FOO-lib-dir=DIR directory to look for library files used by module FOO in],
+openssl_lib_dir=
+AC_ARG_WITH(openssl-lib-dir,
+[AS_HELP_STRING([--with-openssl-lib-dir=DIR],
+[directory to look for OpenSSL library files])],
[ case "$withval" in
- *)
+ *) openssl_lib_dir="$withval"
;;
esac ]
)
dnl #
-dnl # extra argument: --with-rlm-FOO-include-dir
+dnl # extra argument: --with-openssl-includes=dir
dnl #
-AC_ARG_WITH(rlm-FOO-include-dir,
-[ --with-rlm-FOO-include-dir=DIR directory to look for include files used by module FOO in],
+openssl_include_dir=
+AC_ARG_WITH(openssl-include-dir,
+[AS_HELP_STRING([--with-openssl-include-dir=DIR],
+[directory to look for OpenSSL include files])],
[ case "$withval" in
- *)
+ *) openssl_include_dir="$withval"
;;
esac ]
)
+dnl #
+dnl # extra argument: --disable-openssl-version-check
+dnl #
+AC_ARG_ENABLE(openssl-version-check,
+[AS_HELP_STRING([--disable-openssl-version-check],
+ [disable vulnerable OpenSSL version check])]
+)
+if test "x$enable_openssl_version_check" != "xno"; then
+ AC_DEFINE(ENABLE_OPENSSL_VERSION_CHECK, [1],
+ [Define to 1 to have OpenSSL version check enabled])
+ openssl_version_check_config="\
+ #
+ # allow_vulnerable_openssl: Allow the server to start with
+ # versions of OpenSSL known to have critical vulnerabilities.
+ #
+ # This check is based on the version number reported by libssl
+ # and may not reflect patches applied to libssl by
+ # distribution maintainers.
+ #
+ allow_vulnerable_openssl = no"
+else
+ openssl_version_check_config=
+fi
+AC_SUBST([openssl_version_check_config])
+
+
dnl #############################################################
dnl #
dnl # 1. Checks for programs
dnl #
dnl #############################################################
+dnl Check for talloc
+dnl extra argument: --with-talloc-lib-dir=DIR
+talloc_lib_dir=
+AC_ARG_WITH(talloc-lib-dir,
+ [AS_HELP_STRING([--with-talloc-lib-dir=DIR],
+ [directory in which to look for talloc library files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need talloc-lib-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ talloc_lib_dir="$withval"
+ ;;
+ esac])
+
+dnl extra argument: --with-talloc-include-dir=DIR
+talloc_include_dir=
+AC_ARG_WITH(talloc-include-dir,
+ [AS_HELP_STRING([--with-talloc-include-dir=DIR],
+ [directory in which to look for talloc include files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need talloc-include-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ talloc_include_dir="$withval"
+ ;;
+ esac])
+
+smart_try_dir="$talloc_lib_dir"
+FR_SMART_CHECK_LIB(talloc, _talloc)
+if test "x$ac_cv_lib_talloc__talloc" != "xyes"; then
+ AC_MSG_WARN([talloc library not found. Use --with-talloc-lib-dir=<path>.])
+ AC_MSG_ERROR([FreeRADIUS requires libtalloc])
+fi
+
+TALLOC_LIBS="${smart_lib}"
+TALLOC_LDFLAGS="${smart_ldflags}"
+AC_SUBST(TALLOC_LIBS)
+AC_SUBST(TALLOC_LDFLAGS)
+LIBS="$old_LIBS"
+
dnl #
dnl # If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
dnl #
CFLAGS="$CFLAGS -mt"
fi
- AC_CHECK_HEADERS(pthread.h, [], [ WITH_THREADS="no" ])
+ AC_CHECK_HEADERS(pthread.h, [],
+ [
+ WITH_THREADS="no"
+ fail=[pthread.h]
+ ])
dnl #
dnl # pthread stuff is usually in -lpthread
dnl # On Some systems, we need extra pre-processor flags, to get them to
dnl # to do the threading properly.
dnl #
- AC_CHECK_LIB(pthread, pthread_create,
- [
- CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
- LIBS="-lpthread $LIBS"
- ],
- [
+ if test "x$WITH_THREADS" != "xno"; then
+ AC_CHECK_LIB(pthread, pthread_create,
+ [
+ HAVE_LPTHREAD='yes'
+ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
+ LIBS="-lpthread $LIBS"
+
+ dnl #
+ dnl # -pthread should add all required CPP definitions and linker
+ dnl # arguments. But not all compilers support it, or some compilers
+ dnl # only support it on certain platforms.
+ dnl #
+ AX_CC_PTHREAD_FLAG
+ if test "x$ax_cv_cc_pthread_flag" != 'xyes'; then
+ CFLAGS="$CFLAGS -pthread"
+ fi
+ ]
+ )
+
+ dnl #
+ dnl # Check for libc_r which used to be the threading library used
+ dnl # for FreeBSD. Internet says it may be deprecated, but if we
+ dnl # can't find lpthread it's probably worth checking.
+ dnl #
+ if test "x$HAVE_LPTHREAD" != "xyes"; then
AC_CHECK_LIB(c_r, pthread_create,
- [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
- [ WITH_THREADS="no" ]
+ [
+ CFLAGS="$CFLAGS -D_THREAD_SAFE"
+
+ dnl #
+ dnl # -pthread should add all required CPP definitions and linker
+ dnl # arguments. But not all compilers support it, or some compilers
+ dnl # only support it on certain platforms.
+ dnl #
+ AX_CC_PTHREAD_FLAG
+ if test "x$ax_cv_cc_pthread_flag" != 'xyes'; then
+ LIBS="-lc_r $LIBS"
+ else
+ CFLAGS="$CFLAGS -pthread"
+ fi
+ ],
+ [ fail=[-lc_r or -lpthread] ]
)
- ]
- )
+ fi
+ fi
+
+ if test "x$WITH_THREADS" != "xyes"; then
+ AC_MSG_WARN([silently not building with thread support.])
+ AC_MSG_WARN([FAILURE: thread support requires: $fail.])
+ else
+ AC_DEFINE(WITH_THREADS, [1], [define if you want thread support])
+ fi
fi
dnl #
)
fi
-if test "x$WITH_THREADS" = "xyes"; then
- AC_DEFINE(WITH_THREADS, [1], [define if you want thread support])
-fi
-
dnl #
-dnl # Check if we need -lsocket
+dnl # Check if we have -ldl
dnl #
AC_CHECK_LIB(dl, dlopen)
dnl #
dnl # Check the pcap library for the RADIUS sniffer.
dnl #
-PCAP_LIBS=
-AC_CHECK_LIB(pcap, pcap_open_live,
- [
- PCAP_LIBS="-lpcap"
- AC_DEFINE(HAVE_LIBPCAP, 1,
- [Define to 1 if you have the `pcap' library (-lpcap).]
- )
- ],
- [
- AC_MSG_WARN([pcap library not found, silently disabling the RADIUS sniffer.])
- ]
-)
+dnl extra argument: --with-pcap-lib-dir=DIR
+pcap_lib_dir=
+AC_ARG_WITH(pcap-lib-dir,
+ [AS_HELP_STRING([--with-pcap-lib-dir=DIR],
+ [directory in which to look for pcap library files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need pcap-lib-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ pcap_lib_dir="$withval"
+ ;;
+ esac])
+
+dnl extra argument: --with-pcap-include-dir=DIR
+pcap_include_dir=
+AC_ARG_WITH(pcap-include-dir,
+ [AS_HELP_STRING([--with-pcap-include-dir=DIR],
+ [directory in which to look for pcap include files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need pcap-include-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ pcap_include_dir="$withval"
+ ;;
+ esac])
+
+smart_try_dir="$pcap_lib_dir"
+FR_SMART_CHECK_LIB(pcap, pcap_open_live)
+if test "x$ac_cv_lib_pcap_pcap_open_live" != "xyes"; then
+ AC_MSG_WARN([pcap library not found, silently disabling the RADIUS sniffer, and ARP listener. Use --with-pcap-lib-dir=<path>.])
+else
+ AC_DEFINE(HAVE_LIBPCAP, 1,
+ [Define to 1 if you have the `pcap' library (-lpcap).]
+ )
+
+ AC_CHECK_FUNCS(\
+ pcap_fopen_offline \
+ pcap_dump_fopen \
+ pcap_create \
+ pcap_activate
+ )
+
+ PCAP_LIBS="${smart_lib}"
+ PCAP_LDFLAGS="${smart_ldflags}"
+fi
+dnl Set by FR_SMART_CHECK_LIB
+LIBS="${old_LIBS}"
+
+dnl Check for collectdclient
+dnl extra argument: --with-collectdclient-lib-dir=DIR
+collectdclient_lib_dir=
+AC_ARG_WITH(collectdclient-lib-dir,
+ [AS_HELP_STRING([--with-collectdclient-lib-dir=DIR],
+ [directory in which to look for collectdclient library files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need collectdclient-lib-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ collectdclient_lib_dir="$withval"
+ ;;
+ esac])
+
+dnl extra argument: --with-collectdclient-include-dir=DIR
+collectdclient_include_dir=
+AC_ARG_WITH(collectdclient-include-dir,
+ [AS_HELP_STRING([--with-collectdclient-include-dir=DIR],
+ [directory in which to look for collectdclient include files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need collectdclient-include-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ collectdclient_include_dir="$withval"
+ ;;
+ esac])
+
+smart_try_dir="$collectdclient_lib_dir"
+FR_SMART_CHECK_LIB(collectdclient, lcc_connect)
+if test "x$ac_cv_lib_collectdclient_lcc_connect" != "xyes"; then
+ AC_MSG_WARN([collectdclient library not found. Use --with-collectdclient-lib-dir=<path>.])
+else
+ COLLECTDC_LIBS="${smart_lib}"
+ COLLECTDC_LDFLAGS="${smart_ldflags}"
+fi
+dnl Set by FR_SMART_CHECKLIB
+LIBS="${old_LIBS}"
+
+dnl Check for cap
+dnl extra argument: --with-cap-lib-dir=DIR
+cap_lib_dir=
+AC_ARG_WITH(cap-lib-dir,
+ [AS_HELP_STRING([--with-cap-lib-dir=DIR],
+ [directory in which to look for cap library files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need cap-lib-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ cap_lib_dir="$withval"
+ ;;
+ esac])
+
+dnl extra argument: --with-cap-include-dir=DIR
+cap_include_dir=
+AC_ARG_WITH(cap-include-dir,
+ [AS_HELP_STRING([--with-cap-include-dir=DIR],
+ [directory in which to look for cap include files])],
+ [case "$withval" in
+ no)
+ AC_MSG_ERROR([Need cap-include-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ cap_include_dir="$withval"
+ ;;
+ esac])
+
+smart_try_dir="$cap_lib_dir"
+FR_SMART_CHECK_LIB(cap, cap_get_proc)
+if test "x$ac_cv_lib_cap_cap_get_proc" != "xyes"; then
+ AC_MSG_WARN([cap library not found, debugger checks will not be enabled. Use --with-cap-lib-dir=<path>.])
+else
+ AC_DEFINE(HAVE_LIBCAP, 1,
+ [Define to 1 if you have the `cap' library (-lcap).]
+ )
+ HAVE_LIBCAP=1
+fi
VL_LIB_READLINE
dnl #############################################################
dnl #
+dnl # Check for talloc header files
+dnl #
+smart_try_dir="$talloc_include_dir"
+FR_SMART_CHECK_INCLUDE([talloc.h])
+if test "x$ac_cv_header_talloc_h" != "xyes"; then
+ AC_MSG_WARN([talloc headers not found. Use --with-talloc-include-dir=<path>.])
+ AC_MSG_ERROR([FreeRADIUS requires libtalloc])
+fi
+
+dnl #
dnl # Interix requires us to set -D_ALL_SOURCE, otherwise
dnl # getopt will be #included, but won't link. <sigh>
dnl #
-dnl #
case "$host" in
*-interix*)
CFLAGS="$CFLAGS -D_ALL_SOURCE"
*-darwin*)
CFLAGS="$CFLAGS -DDARWIN"
LIBS="-framework DirectoryService $LIBS"
+ AC_DEFINE([__APPLE_USE_RFC_3542], 1, [Force OSX >= 10.7 Lion to use RFC2292 IPv6 socket options])
;;
esac
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS( \
- dlfcn.h \
- unistd.h \
+ arpa/inet.h \
crypt.h \
+ dlfcn.h \
errno.h \
- resource.h \
- sys/resource.h \
+ fcntl.h \
+ features.h \
+ fnmatch.h \
getopt.h \
+ glob.h \
+ grp.h \
+ inttypes.h \
+ limits.h \
malloc.h \
- utmp.h \
- utmpx.h \
+ netdb.h \
+ netinet/in.h \
+ prot.h \
+ pwd.h \
+ resource.h \
+ semaphore.h \
+ sia.h \
+ siad.h \
signal.h \
- sys/select.h \
- syslog.h \
- inttypes.h \
+ stdbool.h \
+ stddef.h \
stdint.h \
stdio.h \
- netdb.h \
- semaphore.h \
- arpa/inet.h \
- netinet/in.h \
- sys/types.h \
- sys/socket.h \
- winsock.h \
- utime.h \
- sys/time.h \
- sys/wait.h \
- sys/security.h \
- fcntl.h \
+ sys/event.h \
sys/fcntl.h \
sys/prctl.h \
+ sys/ptrace.h \
+ sys/resource.h \
+ sys/security.h \
+ sys/select.h \
+ sys/socket.h \
+ sys/time.h \
+ sys/types.h \
sys/un.h \
- glob.h \
- prot.h \
- pwd.h \
- grp.h \
- stddef.h \
- fnmatch.h \
- sia.h \
- siad.h
+ sys/wait.h \
+ syslog.h \
+ unistd.h \
+ utime.h \
+ utmp.h \
+ utmpx.h \
+ winsock.h
)
dnl #
dnl # FreeBSD requires sys/socket.h before net/if.h
dnl #
AC_CHECK_HEADERS(net/if.h, [], [],
-[#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-# endif
-])
+ [
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ ]
+)
dnl #
dnl # other checks which require headers
dnl # Were we told to use OpenSSL, if we were and we find an error, call AC_MSG_FAILURE and exit
dnl #
if test "x$WITH_OPENSSL" = xyes; then
- old_LIBS=$LIBS
- old_LDFLAGS="$LDFLAGS"
-
- OPENSSL_INCLUDE="-DNO_OPENSSL"
- OPENSSL_LIBS=
- if test "x$OPENSSL_LIB_DIR" != "x"; then
- LDFLAGS="-L$OPENSSL_LIB_DIR $LDFLAGS"
- fi
+ OLD_LIBS="$LIBS"
dnl #
- dnl # Check we can link to libssl
+ dnl # Apparently OpenSSL will attempt to build with kerberos if we don't pass this?!
dnl #
- AC_CHECK_LIB(crypto, DH_new,
- [
- LIBS="-lcrypto $LIBS"
- AC_DEFINE(HAVE_LIBCRYPTO, 1, [Define to 1 if you have the `crypto' library (-lcrypto).])
- AC_CHECK_LIB(ssl, SSL_new,
- [
- AC_DEFINE(HAVE_LIBSSL, 1, [Define to 1 if you have the `ssl' library (-lssl).])
- if test "x$OPENSSL_LIB_DIR" != "x"; then
- OPENSSL_LIBS="-L$OPENSSL_LIB_DIR"
- fi
- OPENSSL_LIBS="$OPENSSL_LIBS -lcrypto -lssl -lcrypto"
- LIBS="$OPENSSL_LIBS $LIBS"
- ],
- [
- AC_MSG_FAILURE([failed linking to libssl])
- ]
- )
- ],
- []
- )
+ CFLAGS="$CFLAGS -DOPENSSL_NO_KRB5"
dnl #
- dnl # Check we can find required headers
+ dnl # Check we can link to libcrypto and libssl
dnl #
- old_CPPFLAGS=$CPPFLAGS
- old_CFLAGS=$CFLAGS
- if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
- CPPFLAGS="-I$OPENSSL_INCLUDE_DIR $CPPFLAGS"
- CFLAGS="-I$OPENSSL_INCLUDE_DIR $CFLAGS"
+ smart_try_dir="$openssl_lib_dir"
+ FR_SMART_CHECK_LIB(crypto, DH_new)
+ if test "x$ac_cv_lib_crypto_DH_new" = "xyes"; then
+ AC_DEFINE(HAVE_LIBCRYPTO, 1, [Define to 1 if you have the `crypto' library (-lcrypto).])
+ OPENSSL_LIBS="$smart_lib"
+ OPENSSL_LDFLAGS="$smart_ldflags"
+
+ FR_SMART_CHECK_LIB(ssl, SSL_new)
+ if test "x$ac_cv_lib_ssl_SSL_new" != "xyes"; then
+ AC_MSG_FAILURE([failed linking to libssl. Use --with-openssl-lib-dir=<path>, or --with-openssl=no (builds without OpenSSL)])
+ else
+ AC_DEFINE(HAVE_LIBSSL, 1, [Define to 1 if you have the `ssl' library (-lssl).])
+ OPENSSL_LIBS="$OPENSSL_LIBS $smart_lib"
+
+ if test "$OPENSSL_LDFLAGS" != "$smart_ldflags"; then
+ AC_MSG_FAILURE(["inconsistent LDFLAGS between -lssl '$smart_ldflags' and -lcrypto '$OPENSSL_LDFLAGS'"])
+ fi
+ fi
+ else
+ AC_MSG_FAILURE([failed linking to libcrypto. Use --with-openssl-lib-dir=<path>, or --with-openssl=no (builds without OpenSSL)])
fi
- dnl #
- dnl # Stupid RedHat shit
- dnl #
- CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
- AC_CHECK_HEADERS( \
- openssl/ssl.h \
- openssl/crypto.h \
- openssl/err.h \
- openssl/evp.h \
- openssl/md5.h \
- openssl/md4.h \
- openssl/sha.h \
- openssl/ocsp.h \
- openssl/engine.h,
- [],
- [
- AC_MSG_FAILURE([failed locating OpenSSL headers])
- ]
- )
+ smart_try_dir="$openssl_include_dir"
+ FR_SMART_CHECK_INCLUDE(openssl/ssl.h)
+ if test "x$ac_cv_header_openssl_ssl_h" = "xyes"; then
+ AC_DEFINE(HAVE_OPENSSL_SSL_H, 1, [Define to 1 if you have the <openssl/ssl.h> header file.])
+
+ AC_CHECK_HEADERS( \
+ openssl/crypto.h \
+ openssl/err.h \
+ openssl/evp.h \
+ openssl/md5.h \
+ openssl/md4.h \
+ openssl/sha.h \
+ openssl/ssl.h \
+ openssl/ocsp.h \
+ openssl/engine.h,
+ [ OPENSSL_CPPFLAGS="$smart_include" ],
+ [
+ AC_MSG_FAILURE([failed locating OpenSSL headers. Use --with-openssl-include-dir=<path>, or --with-openssl=no (builds without OpenSSL)])
+ ]
+ )
- AC_MSG_CHECKING([for OpenSSL version >= 0.9.7])
- AC_EGREP_CPP(yes,
- [#include <openssl/crypto.h>
- #if (OPENSSL_VERSION_NUMBER >= 0x00907000L)
- yes
- #endif
- ],
- [
- AC_MSG_RESULT(yes)
- ],
- [
- AC_MSG_RESULT(no)
- AC_MSG_FAILURE([OpenSSL version too old])
- ]
- )
+ AC_MSG_CHECKING([for OpenSSL version >= 0.9.7])
+ AC_EGREP_CPP(yes,
+ [#include <openssl/crypto.h>
+ #if (OPENSSL_VERSION_NUMBER >= 0x00907000L)
+ yes
+ #endif
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_FAILURE([OpenSSL version too old])
+ ]
+ )
- if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
- OPENSSL_INCLUDE="-I$OPENSSL_INCLUDE_DIR -DOPENSSL_NO_KRB5"
- else
- OPENSSL_INCLUDE="-DOPENSSL_NO_KRB5"
- fi
+ dnl #
+ dnl # CPPFLAGS are passed to the compiler first, so we use
+ dnl # them to ensure things like --sysroot don't override the
+ dnl # library location we discovered previously.
+ dnl #
+ old_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$OPENSSL_CPPFLAGS $CPPFLAGS"
- dnl #
- dnl # Now check that the header versions match the library
- dnl #
- AC_MSG_CHECKING([OpenSSL library and header version consistency])
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM(
- [[
- #include <stdio.h>
- #include <openssl/opensslv.h>
- #include <openssl/crypto.h>
- ]],
- [[
- if (SSLeay() == OPENSSL_VERSION_NUMBER) {
- return 0;
- } else {
+ dnl #
+ dnl # Now check that the header versions match the library
+ dnl #
+ AC_MSG_CHECKING([OpenSSL library and header version consistency])
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <stdio.h>
+ #include <openssl/opensslv.h>
+ #include <openssl/crypto.h>
+ ]],
+ [[
printf("library: %lx header: %lx... ", (unsigned long) SSLeay(), (unsigned long) OPENSSL_VERSION_NUMBER);
- return 1;
- }
- ]]
- )],
- [
- AC_MSG_RESULT(yes)
- ],
- [
- AC_MSG_RESULT(no)
- AC_MSG_FAILURE([OpenSSL library version does not match header version])
- ]
- )
-
- if test "x$OPENSSL_LIBS" = x; then
- LIBS=$old_LIBS
- LDFLAGS="$old_LDFLAGS"
- fi
- if test "x$OPENSSL_INCLUDE" = x; then
- CPPFLAGS=$old_CPPFLAGS
- CFLAGS=$old_CFLAGS
+ if (SSLeay() == OPENSSL_VERSION_NUMBER) {
+ return 0;
+ } else {
+ return 1;
+ }
+ ]]
+ )],
+ [
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_FAILURE([OpenSSL library version does not match header version])
+ ],
+ [
+ AC_MSG_RESULT([cross-compiling (assuming yes)])
+ ]
+ )
+ CPPFLAGS="$old_CPPFLAGS"
fi
-fi
-AC_SUBST(OPENSSL_INCLUDE)
-AC_SUBST(OPENSSL_LIBS)
-export OPENSSL_LIBS
+ LIBS="$OLD_LIBS"
+ AC_SUBST(OPENSSL_LIBS)
+ AC_SUBST(OPENSSL_LDFLAGS)
+ AC_SUBST(OPENSSL_CPPFLAGS)
+ export OPENSSL_LIBS OPENSSL_LDFLAGS OPENSSL_CPPFLAGS
+ AC_CHECK_FUNCS(SSL_get_client_random,SSL_get_server_random)
+fi
dnl #
dnl # Check the pcap includes for the RADIUS sniffer.
if test "x$PCAP_LIBS" = x; then
AC_MSG_NOTICE([skipping test for pcap.h.])
else
- AC_CHECK_HEADER(pcap.h,
- [
- AC_DEFINE(HAVE_PCAP_H, 1, [Define to 1 if you have the <pcap.h> header file.])
+ dnl #
+ dnl # Check for pcap header files
+ dnl #
+ smart_try_dir="$pcap_include_dir"
+ FR_SMART_CHECK_INCLUDE([pcap.h])
+ if test "x$ac_cv_header_pcap_h" == "xyes"; then
+ AC_DEFINE(HAVE_PCAP_H, 1, [Define to 1 if you have the <pcap.h> header file.])
+ AC_SUBST(PCAP_LIBS)
+ AC_SUBST(PCAP_LDFLAGS)
+ else
+ AC_MSG_WARN([pcap headers not found, silently disabling the RADIUS sniffer, and ARP listener. Use --with-pcap-include-dir=<path>.])
+ fi
+fi
- AC_CHECK_LIB(pcap, pcap_fopen_offline,
- [
- AC_DEFINE(HAVE_PCAP_FOPEN_OFFLINE, 1, [Define to 1 if you have the function pcap_fopen_offline.])
- ]
- )
+dnl Check for collectd-client
+if test "x$COLLECTDC_LIBS" = x; then
+ AC_MSG_NOTICE([skipping test for collectd/client.h.])
+else
+ dnl #
+ dnl # Check for collectd-client header files
+ dnl #
+ smart_try_dir="$collectdclient_include_dir"
+ FR_SMART_CHECK_INCLUDE([collectd/client.h])
+ if test "x$ac_cv_header_collectd_client_h" == "xyes"; then
+ AC_DEFINE(HAVE_COLLECTDC_H, 1, [Define to 1 if you have the `collectdclient' library (-lcollectdclient).])
+ AC_SUBST(COLLECTDC_LIBS)
+ AC_SUBST(COLLECTDC_LDFLAGS)
+ else
+ AC_MSG_WARN([collectdclient headers not found. Use --with-collectdclient-include-dir=<path>.])
+ fi
+fi
- AC_CHECK_LIB(pcap, pcap_dump_fopen,
- [
- AC_DEFINE(HAVE_PCAP_DUMP_FOPEN, 1, [Define to 1 if you have the function pcap_dump_fopen.])
- ]
- )
- ],
- [
- PCAP_LIBS=
- AC_MSG_WARN([pcap.h not found, silently disabling the RADIUS sniffer.])
- ]
- )
+dnl #
+dnl # Check the CAP includes for debugger checks
+dnl #
+if test "x$HAVE_LIBCAP" = x; then
+ AC_MSG_NOTICE([skipping test for cap.h.])
+else
+ dnl #
+ dnl # Check for CAP header files
+ dnl #
+ smart_try_dir="$cap_include_dir"
+ FR_SMART_CHECK_INCLUDE([sys/capability.h])
+ if test "x$ac_cv_header_sys_capability_h" == "xyes"; then
+ AC_DEFINE(HAVE_CAPABILITY_H, 1, [Define to 1 if you have the <sys/capability.h> header file.])
+ else
+ AC_MSG_WARN([cap headers not found, will not perform debugger checks. Use --with-cap-include-dir=<path>.])
+ fi
fi
-AC_SUBST(PCAP_LIBS)
dnl #############################################################
dnl #
uint32_t, unsigned int, [uint32_t should be the canonical 'network integer']
)
+dnl #
+dnl # Check for uint64_t
+dnl #
+FR_CHECK_TYPE_INCLUDE(
+ [
+ #ifdef HAVE_INTTYPES_H
+ # include <inttypes.h>
+ #endif
+
+ #ifdef HAVE_STDINT_H
+ # include <stdint.h>
+ #endif
+ ],
+ uint64_t, unsigned long long, [uint64_t is required for larger counters]
+)
+
+dnl #
+dnl # Check for __uint128_t (compiler builtin)
+dnl #
+AC_CHECK_TYPE(__uint128_t, AC_DEFINE(HAVE___UINT128_T, 1, [compiler specific 128 bit unsigned integer]), [], [])
+
+dnl #
+dnl # Check for uint128_t (fictitious future data type)
+dnl #
+AC_CHECK_TYPE(uint128_t, AC_DEFINE(HAVE_UINT128_T, 1, [128 bit unsigned integer]), [],
+ [
+ #ifdef HAVE_INTTYPES_H
+ # include <inttypes.h>
+ #endif
+
+ #ifdef HAVE_STDINT_H
+ # include <stdint.h>
+ #endif
+ ]
+)
+
AC_CHECK_TYPE(struct in6_addr, AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1, [IPv6 address structure]), [],
[
#ifdef HAVE_NETINET_IN_H
]
)
+dnl #
+dnl # Check for sig_t
+dnl #
+dnl # FR_CHECK_TYPE_INCLUDE doesn't work for callbacks as it doesn't produce typedefs
+dnl #
+AC_MSG_CHECKING([if sig_t is defined])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #ifdef HAVE_SIGNAL_H
+ # include <signal.h>
+ #endif
+ ]],
+ [[
+ sig_t func;
+ return 0;
+ ]]
+ )],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SIG_T, 1, [Define if the type sig_t is defined by signal.h])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
+)
+
dnl #############################################################
dnl #
dnl # 5. Checks for structures and functions
dnl #
dnl #############################################################
AC_CHECK_FUNCS( \
- getopt_long \
- fcntl \
- strsignal \
- sigaction \
- sigprocmask \
- pthread_sigmask \
- snprintf \
- vsnprintf \
- setsid \
- strncasecmp \
- strcasecmp \
- localtime_r \
+ bindat \
+ clock_gettime \
+ closefrom \
ctime_r \
+ dladdr \
+ fcntl \
+ fopencookie \
+ funopen \
+ getaddrinfo \
+ getnameinfo \
+ getopt_long \
+ getpeereid \
+ getresuid \
+ gettimeofday \
+ getusershell \
gmtime_r \
- strsep \
+ if_indextoname \
inet_aton \
- inet_pton \
inet_ntop \
- setlinebuf \
- setvbuf \
- getusershell \
+ inet_pton \
initgroups \
- getaddrinfo \
- getnameinfo \
- closefrom \
- gettimeofday \
- getpeereid \
- setuid \
+ kqueue \
+ localtime_r \
+ mallopt \
+ mkdirat \
+ openat \
+ pthread_sigmask \
+ setlinebuf \
setresuid \
- getresuid \
+ setsid \
+ setuid \
+ setvbuf \
+ sigaction \
+ sigprocmask \
+ snprintf \
+ strcasecmp \
strlcat \
- strlcpy
+ strlcpy \
+ strncasecmp \
+ strsep \
+ strsignal \
+ unlinkat \
+ vdprintf \
+ vsnprintf
)
AC_TYPE_SIGNAL
AC_DEFINE(HAVE_IN6_PKTINFO, [], [define if you have IN6_PKTINFO (Linux)])
fi
+dnl #
+dnl # Check for htonll and htonlll
+dnl #
+AC_MSG_CHECKING([if htonll is defined])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ ]],
+ [[
+ return htonll(0);
+ ]]
+ )],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_HTONLL, 1, [Define if the function (or macro) htonll exists.])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
+)
+
+AC_MSG_CHECKING([if htonlll is defined])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ ]],
+ [[
+ return htonlll(0);
+ ]]
+ )],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_HTONLLL, 1, [Define if the function (or macro) htonlll exists.])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
+)
+
dnl #############################################################
dnl #
dnl # 6. Checks for compiler characteristics
devflags="-Wdocumentation"
fi
- if test "x$GCC" = "xyes"; then
- devflags="$devflags -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -W -Wredundant-decls -Wundef -Wformat-y2k -Wno-format-extra-args -Wno-format-zero-length -Wno-cast-align -Wformat-nonliteral -Wformat-security -Wformat=2 -DWITH_VERIFY_PTR=1"
- INSTALLSTRIP=""
+ dnl #
+ dnl # If we have -Weverything, it really means *everything* unlike -Wall
+ dnl # It's so verbose we need to turn off warnings which aren't useful.
+ dnl #
+ AX_CC_WEVERYTHING_FLAG
+ if test "x$ax_cv_cc_weverything_flag" = "xyes"; then
+ devflags="$devflags -W -Weverything -Wformat=2 -Wno-missing-field-initializers -Wno-date-time -Wno-padded -Wno-gnu-zero-variadic-macro-arguments -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-conversion -Wno-switch-enum -Wno-gnu-statement-expression -Wno-extended-offsetof -Wno-cast-align -Wno-documentation-unknown-command -Wno-covered-switch-default -Wno-packed -DWITH_VERIFY_PTR=1"
+ else
+ if test "x$GCC" = "xyes"; then
+ devflags="$devflags -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -W -Wredundant-decls -Wundef -Wformat-y2k -Wno-format-extra-args -Wno-format-zero-length -Wno-cast-align -Wformat-nonliteral -Wformat-security -Wformat=2 -DWITH_VERIFY_PTR=1"
+ INSTALLSTRIP=""
+ fi
fi
AC_MSG_NOTICE([Developer CFLAGS are "$devflags"])
dnl #
if test -d $srcdir/.git -a "x$GIT" = "xyes"; then
RADIUSD_VERSION_COMMIT=`git log --pretty=format:'%h' -n 1`
- AC_DEFINE_UNQUOTED([RADIUSD_VERSION_COMMIT],["${RADIUSD_VERSION_COMMIT}"],[Commit HEAD at time of configuring])
+ AC_DEFINE_UNQUOTED([RADIUSD_VERSION_COMMIT],[${RADIUSD_VERSION_COMMIT}],[Commit HEAD at time of configuring])
fi
+dnl #
+dnl # check for some compiler features
+dnl #
FR_TLS
+FR_HAVE_BUILTIN_CHOOSE_EXPR
+FR_HAVE_BUILTIN_TYPES_COMPATIBLE_P
+FR_HAVE_BUILTIN_BSWAP64
+FR_HAVE_BOUNDED_ATTRIBUTE
dnl #############################################################
dnl #
dnl #
dnl #############################################################
-dnl Check for talloc
-dnl extra argument: --with-talloc-include-dir=DIR
-talloc_include_dir=
-AC_ARG_WITH(talloc-include-dir,
- [ --with-talloc-include-dir=DIR directory to look for talloc include files in],
- [case "$withval" in
- no)
- AC_MSG_ERROR([Need talloc-include-dir])
- ;;
- yes)
- ;;
- *)
- talloc_include_dir="$withval"
- ;;
- esac])
-
-dnl Check for talloc
-dnl extra argument: --with-talloc-lib-dir=DIR
-talloc_lib_dir=
-AC_ARG_WITH(talloc-lib-dir,
- [ --with-talloc-lib-dir=DIR directory to look for talloc library files in],
- [case "$withval" in
- no)
- AC_MSG_ERROR([Need talloc-lib-dir])
- ;;
- yes)
- ;;
- *)
- talloc_lib_dir="$withval"
- ;;
- esac])
-
dnl #
-dnl # Check for talloc header files
+dnl # Check for talloc_set_memlimit
+dnl # This was only included in version 2.0.8
dnl #
-smart_try_dir="$talloc_include_dir"
-FR_SMART_CHECK_INCLUDE([talloc.h])
-if test "x$ac_cv_header_talloc_h" != "xyes"; then
- AC_MSG_WARN([talloc headers not found. Use --with-talloc-include-dir=<path>.])
- AC_MSG_ERROR([FreeRADIUS requires libtalloc])
-fi
-
-smart_try_dir="$talloc_lib_dir"
-FR_SMART_CHECK_LIB(talloc, _talloc)
-if test "x$ac_cv_lib_talloc__talloc" != "xyes"; then
- AC_MSG_WARN([talloc library not found. Use --with-talloc-lib-dir=<path>.])
- AC_MSG_ERROR([FreeRADIUS requires libtalloc])
-fi
+AC_CHECK_LIB(talloc, talloc_set_memlimit,
+ [
+ AC_DEFINE(HAVE_TALLOC_SET_MEMLIMIT, 1, [Define to 1 if you have the function talloc_set_memlimit.])
+ ]
+)
dnl #
dnl # Check for libcrypt
)
AC_SUBST(CRYPTLIB)
+dnl #
+dnl # Check for libexecinfo support, on some systems this is built into libc
+dnl # on others it's a separate library.
+dnl #
+dnl extra argument: --with-execinfo-lib-dir
+execinfo_lib_dir=
+AC_ARG_WITH(execinfo-lib-dir,
+[AS_HELP_STRING([--with-execinfo-lib-dir=DIR],
+[directory in which to look for execinfo library files])],
+[ case "$withval" in
+ no)
+ AC_MSG_ERROR([Need execinfo-lib-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ execinfo_lib_dir="$withval"
+ ;;
+ esac ]
+)
+
+dnl extra argument: --with-execinfo-include-dir
+execinfo_include_dir=
+AC_ARG_WITH(execinfo-include-dir,
+[AS_HELP_STRING([--with-execinfo-include-dir=DIR],
+[directory in which to look for execinfo include files])],
+[ case "$withval" in
+ no)
+ AC_MSG_ERROR([Need execinfo-include-dir])
+ ;;
+ yes)
+ ;;
+ *)
+ execinfo_include_dir="$withval"
+ ;;
+ esac ]
+)
dnl #
-dnl # Check for regular expression support, if were using PCRE it MUST be included
-dnl # before all others, else we seem to still pickup the posix symbols for regcomp
-dnl # and regexec, which results in crashes as soon as we call any posix regex
-dnl # functions.
+dnl # Look for execinfo.h and symbols
dnl #
+smart_try_dir=$execinfo_include_dir
+FR_SMART_CHECK_INCLUDE(execinfo.h)
+if test "x$ac_cv_header_execinfo_h" = "xyes"; then
+ smart_try_dir=$execinfo_lib_dir
+ FR_SMART_CHECK_LIB(execinfo, backtrace_symbols)
+ if test "x$ac_cv_lib_execinfo_backtrace_symbols" != "xyes"; then
+ dnl # Might be provided as part of libc
+ AC_MSG_CHECKING([if execinfo provided as part of libc])
+ AC_TRY_LINK(
+ [
+ #include <execinfo.h>
+ ],
+ [
+ void *sym[1];
+ backtrace_symbols(&sym, sizeof(sym)) ],
+ [
+ AC_MSG_RESULT(yes)
+ ac_cv_lib_execinfo_backtrace_symbols="yes"
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
+ )
+ fi
+
+ if test "x$ac_cv_lib_execinfo_backtrace_symbols" = "xyes"; then
+ AC_DEFINE(HAVE_EXECINFO, [1], [define this if we have <execinfo.h> and symbols])
+ fi
+fi
+
+dnl #
+dnl # Check for regular expression support.
+dnl #
+dnl extra argument: --with-pcre
+PCRE=yes
+AC_ARG_WITH(pcre,
+[AS_HELP_STRING([--with-pcre],
+[use libpcre (if available). (default=yes)])],
+[ case "$withval" in
+ no)
+ PCRE=no
+ ;;
+ yes)
+ PCRE=yes
+ ;;
+ esac ]
+)
+
dnl extra argument: --with-pcre-lib-dir
pcre_lib_dir=
-AC_ARG_WITH(rlm-pcre-lib-dir,
-[ --with-pcre-lib-dir=DIR directory to look for PCRE library files in],
+AC_ARG_WITH(pcre-lib-dir,
+[AS_HELP_STRING([--with-pcre-lib-dir=DIR],
+[directory in which to look for pcre library files])],
[ case "$withval" in
no)
- AC_MSG_ERROR(Need rlm-pcre-lib-dir)
+ AC_MSG_ERROR(Need pcre-lib-dir)
;;
yes)
;;
esac ]
)
-dnl extra argument: --with-pcre-include--dir
+dnl extra argument: --with-pcre-include-dir
pcre_include_dir=
-AC_ARG_WITH(rlm-pcre-include-dir,
-[ --with-pcre-include-dir=DIR directory to look for PCRE include files in],
+AC_ARG_WITH(pcre-include-dir,
+[AS_HELP_STRING([--with-pcre-include-dir=DIR],
+[directory in which to look for pcre include files])],
[ case "$withval" in
no)
- AC_MSG_ERROR(Need rlm-pcre-include-dir)
+ AC_MSG_ERROR(Need pcre-include-dir)
;;
yes)
;;
esac ]
)
-REGEX=no
-REGEX_EXTENDED=no
-REGEX_PCRE=no
+dnl extra argument: --with-regex
+REGEX=
+AC_ARG_WITH(regex,
+[AS_HELP_STRING([--with-regex],
+[Whether to build with regular expressions (default=yes)])],
+[ case "$withval" in
+ no)
+ REGEX=no
+ ;;
+ *)
+ ;;
+ esac ]
+)
dnl #
dnl # First look for PCRE
dnl #
-smart_try_dir=$pcre_include_dir
-FR_SMART_CHECK_INCLUDE(pcreposix.h)
-if test "x$ac_cv_header_pcreposix_h" = "xyes"; then
- AC_DEFINE(HAVE_REGEX_H, [1], [define if we have any regex])
- AC_DEFINE(HAVE_PCREPOSIX_H, [1], [define this if we have the <pcreposix.h> header file])
- REGEX=yes
- REGEX_EXTENDED=yes
- REGEX_PCRE=yes
- LIBS="-lpcre -lpcreposix $LIBS"
+if test "x$REGEX" != "xno" && test "x$PCRE" != "xno"; then
+ smart_try_dir=$pcre_include_dir
+ FR_SMART_CHECK_INCLUDE(pcre.h)
+ if test "x$ac_cv_header_pcre_h" = "xyes"; then
+ smart_try_dir=$pcre_lib_dir
+ FR_SMART_CHECK_LIB(pcre, pcre_compile)
+ if test "x$ac_cv_lib_pcre_pcre_compile" = "xyes"; then
+ REGEX=yes
+ AC_DEFINE(HAVE_PCRE, [1], [define this if we have libpcre])
+ AC_DEFINE(HAVE_BINSAFE_REGEX, 1, [Define if we have a binary safe regular expression library])
+ fi
+ fi
+fi
dnl #
-dnl # Then fallback to POSIX regular expressions
+dnl # If no PCRE, fallback to POSIX regular expressions
dnl #
-else
+if test "x$REGEX" = "x"; then
smart_try_dir=
FR_SMART_CHECK_INCLUDE(regex.h)
if test "x$ac_cv_header_regex_h" = "xyes"; then
- AC_DEFINE(HAVE_REGEX_H, [1], [define if we have any regex])
REGEX=yes
+ AC_MSG_CHECKING([for extended regular expressions])
AC_EGREP_CPP(yes,
[
#include <regex.h>
#ifdef REG_EXTENDED
yes
#endif
- ],
- [AC_DEFINE(HAVE_REG_EXTENDED, [1], [define this if we have REG_EXTENDED (from <regex.h>)]) REGEX_EXTENDED=yes]
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_REG_EXTENDED, [1], [define this if we have REG_EXTENDED (from <regex.h>)])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
)
-dnl #
-dnl # Fixme, this is needed for mingw builds, but not available on some Linux systems
-dnl # despite the presence of regex.h
-dnl #
-dnl # LIBS="$LIBS -lregex"
+
+ dnl #
+ dnl # Some platforms require the regex library to be linked explicitly
+ dnl #
+ AC_CHECK_LIB(regex, regcomp,
+ [
+ LIBS="-lregex $LIBS"
+ ]
+ )
+
+ dnl #
+ dnl # Check for some BSD extensions which allow normal regexes to be
+ dnl # binary safe.
+ dnl #
+ AC_CHECK_FUNCS(\
+ regncomp \
+ regnexec
+ )
+ if test x"$ac_cv_func_regncomp" = x"yes" && test x"$ac_cv_func_regnexec" = x"yes"; then
+ AC_DEFINE(HAVE_BINSAFE_REGEX, 1, [Define if we have a binary safe regular expression library])
+ fi
fi
fi
-AC_SUBST(REGEX)
-AC_SUBST(REGEX_PCRE)
-AC_SUBST(REGEX_EXTENDED)
+if test "x$REGEX" = "xyes"; then
+ AC_DEFINE(HAVE_REGEX, 1, [Define if we have any regular expression library])
+fi
dnl #
dnl # Check the style of gethostbyaddr, in order of preference
fi
dnl #
+dnl # Check for thread-safe getpwnam_r and getgrnam_r
+dnl #
+if test "x$ac_cv_header_pwd_h" = "xyes"; then
+ AC_MSG_CHECKING([getpwnam_r])
+ AC_TRY_LINK(
+ [
+ #include <stdlib.h>
+ #include <sys/types.h>
+ #include <pwd.h>
+ ],
+ [ getpwnam_r(NULL, NULL, NULL, 0, NULL) ],
+ [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_GETPWNAM_R, 1,
+ [Define to 1 if you have the getpwnam_r.]
+ )
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
+ )
+fi
+
+if test "x$ac_cv_header_grp_h" = "xyes"; then
+ AC_MSG_CHECKING([getgrnam_r])
+ AC_TRY_LINK(
+ [
+ #include <stdlib.h>
+ #include <sys/types.h>
+ #include <grp.h>
+ ],
+ [ getgrnam_r(NULL, NULL, NULL, 0, NULL) ],
+ [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_GETGRNAM_R, 1,
+ [Define to 1 if you have the getgrnam_r.]
+ )
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ]
+ )
+fi
+
+
+dnl #
dnl # Check for non-posix solaris ctime_r (extra buflen int arg)
dnl #
AC_DEFINE(POSIXSTYLE, [1], [Posix-Style ctime_r])
AC_CONFIG_COMMANDS([stamp-h], [echo timestamp > src/include/stamp-h])
AC_CONFIG_COMMANDS([build-radpaths-h], [(cd ./src/include && /bin/sh ./build-radpaths-h)])
AC_CONFIG_COMMANDS([main-chmod], [(cd ./src/main && chmod +x checkrad radlast radtest)])
-AC_CONFIG_COMMANDS([scripts-chmod], [(cd ./scripts && chmod +x rc.radiusd radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
+AC_CONFIG_COMMANDS([scripts-chmod], [(cd ./scripts && chmod +x rc.radiusd cron/radiusd.cron.daily cron/radiusd.cron.monthly cryptpasswd)])
dnl #
dnl # Substitute whatever libraries we found to be necessary
./src/main/radlast \
./src/main/radtest \
./scripts/rc.radiusd \
- ./scripts/radiusd.cron.daily \
- ./scripts/radiusd.cron.monthly \
+ ./scripts/cron/radiusd.cron.daily \
+ ./scripts/cron/radiusd.cron.monthly \
./scripts/cryptpasswd \
- ./raddb/dictionary \
./raddb/radrelay.conf \
./raddb/radiusd.conf
)