Replace strncat() with strlcpy()
[freeradius.git] / configure.in
index d1d8e30..d86e925 100644 (file)
@@ -22,15 +22,26 @@ dnl #############################################################
 
 AC_PREREQ([2.59])
 export CFLAGS LIBS LDFLAGS CPPFLAGS
+
+m4_define(PACKAGE_MAIN, freeradius)
+
 AC_INIT(src/main/radiusd.c)
 AC_CONFIG_HEADER(src/include/autoconf.h)
-AC_REVISION($Revision$)dnl
 
 dnl # The version of the software
-RADIUSD_VERSION=`cat VERSION`
+
 RADIUSD_MAJOR_VERSION=`cat VERSION | sed 's/\..*//'`
-RADIUSD_MINOR_VERSION=`cat VERSION | sed 's/^2\.//'`
-PACKAGE=freeradius
+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 }'`
+
+dnl # Still useful for custom builds
+RADIUSD_VERSION_STRING=`cat VERSION`
+PACKAGE=PACKAGE_MAIN
 
 dnl #############################################################
 dnl #
@@ -38,6 +49,9 @@ dnl #  0. Checks for compiler, libtool, and command line options.
 dnl #
 dnl #############################################################
 
+dnl Get system information
+AC_CANONICAL_SYSTEM
+
 dnl Check for GNU cc
 AC_PROG_CC
 AC_PROG_CXX
@@ -79,11 +93,14 @@ if test -z "$makever"; then
                from ftp://prep.ai.mit.edu/pub/gnu/make/ before continuing.)
 fi
 
+dnl See if we have Git.
+AC_CHECK_PROG(GIT, git, yes, no)
+
 AC_ARG_WITH(system-libltdl,
 [  --with-system-libltdl   Use the libltdl installed in your system (default=use our own)],
 [
 LIBLTDL="-lltdl"
-INCLTDL=
+INCLTDL=-DWITH_SYSTEM_LTDL
 LTDL_SUBDIRS=
 ],
 [
@@ -98,6 +115,9 @@ fi
 ])
 AC_SUBST(LTDL_SUBDIRS)
 
+dnl set this shit so it doesn't force CFLAGS...
+LTCFLAGS=" "
+
 dnl use system-wide libtool, if it exists
 AC_ARG_WITH(system-libtool,
 [  --with-system-libtool   Use the libtool installed in your system (default=use our own)],
@@ -258,18 +278,34 @@ if test "x$WITH_VMPS" = "xyes"; then
 fi
 
 dnl extra argument: --with-dhcp
+WITH_DHCP=yes
 AC_ARG_WITH(dhcp,
-[  --with-dhcp             Compile in DHCP support. (default=no)],
+[  --with-dhcp             Compile in DHCP support. (default=yes)],
 [ case "$withval" in
     yes)
-        AC_DEFINE(WITH_DHCP, [1], [Include experimental support for DHCP])
-       ;;
+        ;;
     *)
-       ;;
+       WITH_DHCP=no
   esac ]
 )
+if test "x$WITH_DHCP" = "xyes"; then
+       AC_DEFINE(WITH_DHCP, [1], [define if you want DHCP support])
+fi
 
 
+dnl extra argument: --with-post-proxy-authorize
+WITH_POST_PROXY_AUTHORIZE=
+AC_ARG_WITH(post-proxy-authorize,
+[  --with-post-proxy-authorize  1.x compatibility  (default=no) ],
+[ case "$withval" in
+    yes)
+       WITH_POST_PROXY_AUTHORIZE=""
+        ;;
+    *)
+       ;;
+  esac ]
+)
+
 dnl #
 dnl #  Allow the user to specify a list of modules to be linked
 dnl #  statically to the server.
@@ -304,14 +340,16 @@ AC_ARG_ENABLE(developer,
   esac ]
 )
 
-if test "x$developer" != "xno" -a -d $srcdir/CVS; then
-  dnl turn on the developer flag when taken from a CVS checkout (not a release)
-  developer="yes"
-fi
+if test -d $srcdir/.git; then
+  if test "x$developer" != "xno"; then
+    dnl turn on the developer flag when taken from a git checkout (not a release)
+    developer="yes"
+  fi
 
-if test "x$developer" != "xno" -a -d $srcdir/.git; then
-  dnl turn on the developer flag when taken from a git checkout (not a release)
-  developer="yes"
+  dnl append the current git hash onto the version string
+  if test "x$GIT" = "xyes"; then
+       RADIUSD_VERSION_COMMIT=`git log --pretty=format:'%h' -n 1`
+  fi
 fi
 
 dnl extra argument: --with-experimental-modules
@@ -484,7 +522,7 @@ dnl # to do the threading properly.
 dnl #
   AC_CHECK_LIB(pthread, pthread_create,
                [ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
-                  LIBS="$LIBS -lpthread" ],
+                  LIBS="-lpthread $LIBS" ],
                AC_CHECK_LIB(c_r, pthread_create,
                            [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
                            [ WITH_THREADS="no" ]
@@ -532,7 +570,7 @@ if test "x$WITH_OPENSSL" = xyes; then
   old_LIBS=$LIBS
   old_LDFLAGS="$LDFLAGS"
   if test "x$OPENSSL_LIB_DIR" != "x"; then
-    LDFLAGS="$LDFLAGS -L$OPENSSL_LIB_DIR"
+    LDFLAGS="-L$OPENSSL_LIB_DIR $LDFLAGS"
   fi
   AC_CHECK_LIB(crypto, DH_new,
     [
@@ -584,6 +622,7 @@ case "$host" in
 *-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
 
@@ -596,6 +635,7 @@ AC_CHECK_HEADERS( \
        unistd.h \
        crypt.h \
        errno.h \
+       execinfo.h \
        resource.h \
        sys/resource.h \
        getopt.h \
@@ -667,51 +707,134 @@ then
   AC_DEFINE(OSFSIA, [], [define if you have OSFSIA authentication])
 fi
 
-dnl Check for OpenSSL includes.
-OPENSSL_INCLUDE="-DNO_OPENSSL"
+dnl #
+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
-  if test "x$OPENSSL_LIBS" = "x"; then
-    AC_MSG_NOTICE([skipping test for openssl/ssl.h])
+  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
+
+  dnl #
+  dnl #  Check we can link to libssl
+  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])
+        ]
+      )
+    ],
+    []
+  )
+
+  dnl #
+  dnl #  Check we can find required headers
+  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"
+  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])
+    ]
+  )
+
+  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
-    old_CPPFLAGS=$CPPFLAGS
-    if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
-       CPPFLAGS="$CPPFLAGS -I$OPENSSL_INCLUDE_DIR"
-    fi
-    dnl # stupid RedHat shit
-    CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
-    AC_CHECK_HEADERS( \
-       openssl/ssl.h \
-       openssl/crypto.h \
-       openssl/err.h \
-       openssl/evp.h \
-       openssl/ocsp.h \
-       openssl/engine.h,
-       [],
-       OPENSSL_LIBS=
-    )
-    if test "x$OPENSSL_LIBS" != "x"; then
-       AC_MSG_CHECKING([for OpenSSL version >= 0.9.7])
-       AC_EGREP_CPP(yes,
-           [#include <openssl/crypto.h>
-            #if (OPENSSL_VERSION_NUMBER >= 0x00907000L)
-            yes
-            #endif
-           ], goodssl="yes")
-       if test "x$goodssl" != "xyes"; then
-           AC_MSG_RESULT(no)
-           OPENSSL_LIBS=
-       else
-           AC_MSG_RESULT(yes)
-           if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
-               OPENSSL_INCLUDE="-I$OPENSSL_INCLUDE_DIR -DOPENSSL_NO_KRB5"
-           else
-               OPENSSL_INCLUDE="-DOPENSSL_NO_KRB5"
-           fi
-       fi
-    fi
+    OPENSSL_INCLUDE="-DOPENSSL_NO_KRB5"
+  fi
+
+  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 {
+          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
   fi
 fi
+
 AC_SUBST(OPENSSL_INCLUDE)
 AC_SUBST(OPENSSL_LIBS)
 export OPENSSL_LIBS
@@ -792,6 +915,12 @@ FR_CHECK_TYPE_INCLUDE([
 #endif
 ],uint32_t, unsigned int, [uint32_t should be the canonical 'network integer])
 
+AC_CHECK_TYPE(sig_t, AC_DEFINE(HAVE_SIG_T, 1, [signal action callback function]), [], [
+    #ifdef HAVE_SIGNAL_H
+    #  include <signal.h>
+    #endif
+])
+
 AC_CHECK_TYPE(struct in6_addr, AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1, [IPv6 address structure]), [], [
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
@@ -1110,6 +1239,10 @@ fi
 
 AC_SUBST(HOSTINFO, $host)
 
+if test "x$WITH_POST_PROXY_AUTHORIZE" != "x"; then
+       AC_DEFINE(WITH_POST_PROXY_AUTHORIZE, 1, [1.x compatibility])
+fi
+
 dnl #############################################################
 dnl #
 dnl #  8. Checks for system services
@@ -1197,7 +1330,10 @@ AC_SUBST(USE_STATIC_LIBS)
 AC_SUBST(STATIC_MODULES)
 AC_SUBST(RADIUSD_MAJOR_VERSION)
 AC_SUBST(RADIUSD_MINOR_VERSION)
+AC_SUBST(RADIUSD_INCRM_VERSION)
 AC_SUBST(RADIUSD_VERSION)
+AC_SUBST(RADIUSD_VERSION_STRING)
+AC_SUBST(RADIUSD_VERSION_COMMIT)
 
 AC_OUTPUT(\
        ./Make.inc \