New build path variable
[freeradius.git] / acinclude.m4
index 2a57dc2..1dd8ad1 100644 (file)
@@ -1,6 +1,6 @@
 dnl See whether we need a declaration for a function.
 dnl RADIUSD_NEED_DECLARATION(FUNCTION [, EXTRA-HEADER-FILES])
-AC_DEFUN(RADIUSD_NEED_DECLARATION,
+AC_DEFUN([RADIUSD_NEED_DECLARATION],
 [AC_MSG_CHECKING([whether $1 must be declared])
 AC_CACHE_VAL(radius_cv_decl_needed_$1,
 [AC_TRY_COMPILE([
@@ -65,7 +65,7 @@ fi
 
 dnl Check multiple functions to see whether each needs a declaration.
 dnl RADIUSD_NEED_DECLARATIONS(FUNCTION... [, EXTRA-HEADER-FILES])
-AC_DEFUN(RADIUSD_NEED_DECLARATIONS,
+AC_DEFUN([RADIUSD_NEED_DECLARATIONS],
 [for ac_func in $1
 do
 RADIUSD_NEED_DECLARATION($ac_func, $2)
@@ -75,7 +75,7 @@ done
 dnl Checks to see if this is SUNPro we're building with
 dnl Usage:
 dnl AC_PROG_CC_SUNPRO
-AC_DEFUN(AC_PROG_CC_SUNPRO,
+AC_DEFUN([AC_PROG_CC_SUNPRO],
 [AC_CACHE_CHECK(whether we are using SUNPro C, ac_cv_prog_suncc,
 [dnl The semicolon is to pacify NeXT's syntax-checking cpp.
 cat > conftest.c <<EOF
@@ -95,7 +95,7 @@ dnl #
 dnl # This function is like AC_CHECK_TYPE, but you can give this one
 dnl # a list of include files to check.
 dnl #
-AC_DEFUN(FR_CHECK_TYPE_INCLUDE,
+AC_DEFUN([FR_CHECK_TYPE_INCLUDE],
 [
   AC_CACHE_CHECK(for $2, ac_cv_type_$2,
     [ ac_cv_type_$2=no
@@ -111,220 +111,6 @@ AC_DEFUN(FR_CHECK_TYPE_INCLUDE,
   fi
 ])
 
-dnl #######################################################################
-dnl #
-dnl #  Look for SNMP in a variety of places.
-dnl #
-AC_DEFUN(SNMP_CHECKS, [
-       AC_SUBST(SNMP_LIBS)
-       AC_SUBST(SNMP_INCLUDE)
-
-AC_MSG_CHECKING([for asn1.h,snmp.h,snmp_impl.h])
-
-dnl #
-dnl #  First, see if we can build it WITHOUT using any special includes and in ucd-snmp
-dnl #
-AC_TRY_COMPILE([
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <ucd-snmp/ucd-snmp-config.h>
-#include <ucd-snmp/asn1.h>
-#include <ucd-snmp/snmp.h>
-#include <ucd-snmp/snmp_impl.h>],
-               [ int a = 1;],
-               SNMP_INCLUDE="";ucdsnmp=yes,
-               ucdsnmp=)
-
-dnl #
-dnl #  If not, look for it in a number of directories and in ucd-snmp.
-dnl #
-if test "x$ucdsnmp" = "x"; then
-  old_CFLAGS="$CFLAGS"
-  for try in /usr/include /usr/local/include $snmp_include_dir; do
-    CFLAGS="$old_CFLAGS -I$try"
-    AC_TRY_COMPILE([
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <ucd-snmp/ucd-snmp-config.h>
-#include <ucd-snmp/asn1.h>
-#include <ucd-snmp/snmp.h>
-#include <ucd-snmp/snmp_impl.h>],
-                   [ int a = 1;],
-                   SNMP_INCLUDE="-I$try";ucdsnmp=yes,
-                   ucdsnmp=)
-    if test "x$ucdsnmp" != "x"; then
-      break;
-    fi
-  done
-  CFLAGS="$old_CFLAGS"
-fi
-
-if test "x$ucdsnmp" = "x"; then
-  old_CFLAGS="$CFLAGS"
-  for try in /usr/include/ucd-snmp /usr/local/include/ucd-snmp $snmp_include_dir; do
-    CFLAGS="$old_CFLAGS -I$try"
-dnl #
-dnl #  First, see if we can build it WITHOUT using any special includes and without ucd-snmp
-dnl #
-AC_TRY_COMPILE([
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <asn1.h>
-#include <snmp.h>
-#include <snmp_impl.h>],
-               [ int a = 1;],
-               SNMP_INCLUDE="";ucdsnmp=no,
-               ucdsnmp=)
-    if test "x$ucdsnmp" != "x"; then
-      break;
-    fi
-  done
-  CFLAGS="$old_CFLAGS"
-fi
-
-dnl #
-dnl #  If not, look for it in a number of directories and without ucd-snmp
-dnl #
-if test "x$ucdsnmp" = "x"; then
-  old_CFLAGS="$CFLAGS"
-  for try in /usr/include/ucd-snmp /usr/local/include/ucd-snmp $snmp_include_dir; do
-    CFLAGS="$old_CFLAGS -I$try"
-    AC_TRY_COMPILE([
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <asn1.h>
-#include <snmp.h>
-#include <snmp_impl.h>],
-                   [ int a = 1;],
-                   SNMP_INCLUDE="-I$try";ucdsnmp=no,
-                   ucdsnmp=)
-    if test "x$ucdsnmp" != "x"; then
-      break;
-    fi
-  done
-  CFLAGS="$old_CFLAGS"
-fi
-
-if test "x$ucdsnmp" = "x"; then
-  AC_MSG_RESULT(no)
-else
-  if test "x$ucdsnmp" = "xyes"; then
-    AC_MSG_RESULT((ucd-snmp)yes)
-    AC_DEFINE(HAVE_UCD_SNMP_ASN1_SNMP_SNMPIMPL_H, [], [Define if you have the <ucd-snmp/asn1.h>, <ucd-snmp/snmp_impl.h> and <ucd-snmp/snmp.h> header file.])
-  else
-    AC_MSG_RESULT(yes)
-    AC_DEFINE(HAVE_ASN1_SNMP_SNMPIMPL_H, [], [Define if you have the <asn1.h>, <snmp_impl.h> and <snmp.h> header file.])
-  fi
-dnl #
-dnl #  Now do the same thing, looking for the SNMP library directory
-dnl #
-  AC_MSG_CHECKING([for snmp_build_var_op in -lsnmp])
-
-dnl #
-dnl #  First, see if we can build it WITHOUT using any special includes
-dnl #
-  old_LIBS="$LIBS"
-  LIBS="$old_LIBS -lsnmp"
-  AC_TRY_LINK([extern char snmp_build_var_op();],
-              [ snmp_build_var_op()],
-              SNMP_LIBS="-lsnmp",
-              SNMP_LIBS=)
-
-  if test "x$SNMP_LIBS" = "x"; then
-    for try in /usr/lib /usr/local/lib /usr/local/snmp/lib $snmp_lib_dir; do
-      LIBS="$old_LIBS -L$try -lsnmp"
-      AC_TRY_LINK([extern char snmp_build_var_op();],
-                  [ snmp_build_var_op()],
-                  SNMP_LIBS="-L$try -lsnmp",
-                  SNMP_LIBS=)
-      if test "x$SNMP_LIBS" != "x"; then
-        break;
-      fi
-dnl   #
-dnl   #  That didn't work.  Try adding the '-lcrypto' line.
-dnl   #  Some SNMP libraries are linked against SSL...
-dnl   #
-      LIBS="$old_LIBS -L$try -lsnmp -lcrypto"
-      AC_TRY_LINK([extern char snmp_build_var_op();],
-                  [ snmp_build_var_op()],
-                  SNMP_LIBS="-L$try -lsnmp -lcrypto",
-                  SNMP_LIBS=)
-      if test "x$SNMP_LIBS" != "x"; then
-        break;
-      fi
-    done
-  fi
-  LIBS="$old_LIBS"
-
-  dnl #
-  dnl #  If one or the other isn't found, disable them both..
-  dnl #  If both are found, enable them both.
-  dnl #
-  CFLAGS="$old_CFLAGS"
-  if test "x$SNMP_LIBS" = "x"; then
-    AC_MSG_RESULT(no)
-    SNMP_INCLUDE=
-  else
-    AC_MSG_RESULT(yes)
-    AC_DEFINE(WITH_SNMP, [], [Include SNMP subagent])
-    AC_DEFINE(HAVE_LIBSNMP, [], [Define if you have the snmp library (-lsnmp).])
-  fi
-fi
-])
-
-
 dnl #
 dnl #  Locate the directory in which a particular file is found.
 dnl #
@@ -334,7 +120,7 @@ dnl #    Defines the variable MYSQLLIB_DIR to be the directory(s) in
 dnl #    which the file libmysqlclient.a is to be found.
 dnl #
 dnl #
-AC_DEFUN(FR_LOCATE_DIR,
+AC_DEFUN([FR_LOCATE_DIR],
 [
 dnl # If we have the program 'locate', then the problem of finding a
 dnl # particular file becomes MUCH easier.
@@ -396,51 +182,75 @@ dnl #######################################################################
 dnl #
 dnl #  Look for a library in a number of places.
 dnl #
-AC_DEFUN(FR_SMART_CHECK_LIB, [
+dnl #  FR_SMART_CHECK_LIB(library, function)
+dnl #
+AC_DEFUN([FR_SMART_CHECK_LIB], [
 
 sm_lib_safe=`echo "$1" | sed 'y%./+-%__p_%'`
 sm_func_safe=`echo "$2" | sed 'y%./+-%__p_%'`
 AC_MSG_CHECKING([for $2 in -l$1])
 
+old_LIBS="$LIBS"
 smart_lib=
 smart_lib_dir=
 
 dnl #
-dnl #  Try to link it first, using the default libs && library paths
+dnl #  Try first any user-specified directory, otherwise we may pick up
+dnl #  the wrong version.
 dnl #
-  old_LIBS="$LIBS"
-  LIBS="$LIBS -l$1"
+if test "x$smart_try_dir" != "x"; then
+  for try in $smart_try_dir; do
+    LIBS="-L$try -l$1 $old_LIBS"
+    AC_TRY_LINK([extern char $2();],
+               [ $2()],
+               smart_lib="-L$try -l$1")
+    if test "x$smart_lib" != "x"; then
+      break;
+    fi
+  done
+  LIBS="$old_LIBS"
+fi
+
+dnl #
+dnl #  Try using the default library path
+dnl #
+if test "x$smart_lib" = "x"; then
+  LIBS="-l$1 $old_LIBS"
   AC_TRY_LINK([extern char $2();],
-              [ $2()],
+             [ $2()],
              smart_lib="-l$1")
+  LIBS="$old_LIBS"
+fi
 
-  if test "x$smart_lib" = "x"; then
-    FR_LOCATE_DIR(smart_lib_dir,[lib$1${libltdl_cv_shlibext}])
-    FR_LOCATE_DIR(smart_lib_dir,[lib$1.a])
-
-    for try in $smart_try_dir $smart_lib_dir /usr/local/lib/ /opt/lib; do
-      LIBS="$old_LIBS -L$try -l$1"
+dnl #
+dnl #  Try to guess possible locations.
+dnl #
+if test "x$smart_lib" = "x"; then
+  FR_LOCATE_DIR(smart_lib_dir,[lib$1${libltdl_cv_shlibext}])
+  FR_LOCATE_DIR(smart_lib_dir,[lib$1.a])
 
-      AC_TRY_LINK([extern char $2();],
-                  [ $2()],
-                 smart_lib="-L$try -l$1")
-      if test "x$smart_lib" != "x"; then
-        break;
-      fi
-    done
-    LIBS="$old_LIBS"
-  fi
+  for try in $smart_lib_dir /usr/local/lib /opt/lib; do
+    LIBS="-L$try -l$1 $old_LIBS"
+    AC_TRY_LINK([extern char $2();],
+               [ $2()],
+               smart_lib="-L$try -l$1")
+    if test "x$smart_lib" != "x"; then
+      break;
+    fi
+  done
+  LIBS="$old_LIBS"
+fi
 
-  dnl #
-  dnl #  Found it, set the appropriate variable.
-  dnl #
-  if test "x$smart_lib" != "x"; then
-    AC_MSG_RESULT(yes)
-    eval "ac_cv_lib_${sm_lib_safe}_${sm_func_safe}=yes"
-    LIBS="$old_LIBS $smart_lib"
-    SMART_LIBS="$SMART_LIBS $smart_lib"
-  else
-    AC_MSG_RESULT(no) 
+dnl #
+dnl #  Found it, set the appropriate variable.
+dnl #
+if test "x$smart_lib" != "x"; then
+  AC_MSG_RESULT(yes)
+  eval "ac_cv_lib_${sm_lib_safe}_${sm_func_safe}=yes"
+  LIBS="$smart_lib $old_LIBS"
+  SMART_LIBS="$smart_lib $SMART_LIBS"
+else
+  AC_MSG_RESULT(no)
 fi
 ])
 
@@ -450,53 +260,75 @@ dnl #  Look for a header file in a number of places.
 dnl #
 dnl #  FR_SMART_CHECK_INCLUDE(foo.h, [ #include <other.h> ])
 dnl #
-AC_DEFUN(FR_SMART_CHECK_INCLUDE, [
+AC_DEFUN([FR_SMART_CHECK_INCLUDE], [
 
 ac_safe=`echo "$1" | sed 'y%./+-%__pm%'`
 AC_MSG_CHECKING([for $1])
 
+old_CFLAGS="$CFLAGS"
 smart_include=
 smart_include_dir=
 
 dnl #
-dnl #  Try to link it first, using the default includes
+dnl #  Try first any user-specified directory, otherwise we may pick up
+dnl #  the wrong version.
+dnl #
+if test "x$smart_try_dir" != "x"; then
+  for try in $smart_try_dir; do
+    CFLAGS="$old_CFLAGS -I$try"
+    AC_TRY_COMPILE([$2
+                   #include <$1>],
+                  [ int a = 1;],
+                  smart_include="-I$try",
+                  smart_include=)
+    if test "x$smart_include" != "x"; then
+      break;
+    fi
+  done
+  CFLAGS="$old_CFLAGS"
+fi
+
+dnl #
+dnl #  Try using the default includes.
 dnl #
-  old_CFLAGS="$CFLAGS"
+if test "x$smart_include" = "x"; then
   AC_TRY_COMPILE([$2
                  #include <$1>],
-                 [ int a = 1;],
-                 smart_include=" ",
-                 smart_include=)
-
-  if test "x$smart_include" = "x"; then
-    FR_LOCATE_DIR(smart_include_dir,$1)
-
-    for try in $smart_try_dir $smart_include_dir /usr/local/include/ /opt/include; do
-      CFLAGS="$old_CFLAGS -I$try"
+                [ int a = 1;],
+                smart_include=" ",
+                smart_include=)
+fi
 
-      AC_TRY_COMPILE([$2
-                      #include <$1>],
-                     [ int a = 1;],
-                     smart_include="-I$try",
-                     smart_include=)
+dnl #
+dnl #  Try to guess possible locations.
+dnl #
+if test "x$smart_include" = "x"; then
+  FR_LOCATE_DIR(smart_include_dir,$1)
 
-      if test "x$smart_include" != "x"; then
-        break;
-      fi
-    done
-    CFLAGS="$old_CFLAGS"
-  fi
+  for try in $smart_include_dir /usr/local/include /opt/include; do
+    CFLAGS="$old_CFLAGS -I$try"
+    AC_TRY_COMPILE([$2
+                   #include <$1>],
+                  [ int a = 1;],
+                  smart_include="-I$try",
+                  smart_include=)
+    if test "x$smart_include" != "x"; then
+      break;
+    fi
+  done
+  CFLAGS="$old_CFLAGS"
+fi
 
-  dnl #
-  dnl #  Found it, set the appropriate variable.
-  dnl #
-  if test "x$smart_include" != "x"; then
-    AC_MSG_RESULT(yes)
-    eval "ac_cv_header_$ac_safe=yes"
-    CFLAGS="$old_CFLAGS $smart_include"
-    SMART_CFLAGS="$SMART_CFLAGS $smart_include"
-  else
-    AC_MSG_RESULT(no) 
+dnl #
+dnl #  Found it, set the appropriate variable.
+dnl #
+if test "x$smart_include" != "x"; then
+  AC_MSG_RESULT(yes)
+  eval "ac_cv_header_$ac_safe=yes"
+  CFLAGS="$old_CFLAGS $smart_include"
+  SMART_CFLAGS="$SMART_CFLAGS $smart_include"
+else
+  AC_MSG_RESULT(no)
 fi
 ])
 
@@ -508,7 +340,7 @@ dnl #  Usage:  FR_CHECK_STRUCT_HAS_MEMBER([#include <foo.h>], [struct foo], memb
 dnl #  If the member is defined, then the variable
 dnl #     ac_cv_type_struct_foo_has_member is set to 'yes'
 dnl #
-AC_DEFUN(FR_CHECK_STRUCT_HAS_MEMBER, [
+AC_DEFUN([FR_CHECK_STRUCT_HAS_MEMBER], [
   AC_MSG_CHECKING([for $3 in $2])
 
 dnl BASED on 'offsetof':
@@ -535,12 +367,74 @@ $1
  fi
 ])
 
-AC_DEFUN(FR_LIBLTDL_PATH,
+dnl Autoconf 2.61 breaks the support for chained configure scripts
+dnl in combination with config.cache
+m4_pushdef([AC_OUTPUT],
+[
+  unset ac_cv_env_LIBS_set
+  unset ac_cv_env_LIBS_value
+  m4_popdef([AC_OUTPUT])
+  AC_OUTPUT([$1],[$2],[$3])
+])
+
+
+#  See if the compilation works with __thread, for thread-local storage
+#
+AC_DEFUN([FR_TLS],
 [
-   LIBLTDLPATH=
-   if test x"$enable_ltdl_install" = x"yes"; then
-     AC_CONFIG_SUBDIRS('libltdl')
-     LIBLTDLPATH=libltdl
+    AC_MSG_CHECKING(for TLS)
+    AC_RUN_IFELSE([AC_LANG_SOURCE([[ static __thread int val; int main(int argc, char *argv[]) { return val = argc; } ]])],[have_tls=yes],[have_tls=no],[have_tls=no ])
+    AC_MSG_RESULT($have_tls)
+    if test "$have_tls" = "yes"; then
+        AC_DEFINE([HAVE_THREAD_TLS],[1],[Define if the compiler supports __thread])
     fi
-   AC_SUBST(LIBLTDLPATH)
 ])
+
+
+AC_DEFUN([AC_LIB_READLINE], [
+  AC_CACHE_CHECK([for a readline compatible library],
+                 ac_cv_lib_readline, [
+    ORIG_LIBS=$LIBS
+    for readline_lib in readline edit editline; do
+      for termcap_lib in "" termcap curses ncurses; do
+        if test -z "$termcap_lib"; then
+          TRY_LIB="-l$readline_lib"
+        else
+          TRY_LIB="-l$readline_lib -l$termcap_lib"
+        fi
+        LIBS="$ORIG_LIBS $TRY_LIB"
+        AC_TRY_LINK_FUNC(readline, ac_cv_lib_readline="$TRY_LIB")
+        if test -n "$ac_cv_lib_readline"; then
+          LIBREADLINE="$TRY_LIB"
+          AC_SUBST(LIBREADLINE)
+          break
+        fi
+      done
+      if test -n "$ac_cv_lib_readline"; then
+        break
+      fi
+    done
+    if test -z "$ac_cv_lib_readline"; then
+      ac_cv_lib_readline="no"
+    fi
+    LIBS=$ORIG_LIBS
+  ])
+
+  if test "$ac_cv_lib_readline" != "no"; then
+    AC_DEFINE(HAVE_LIBREADLINE, 1,
+              [Define if you have a readline compatible library])
+    AC_CHECK_HEADERS(readline.h readline/readline.h)
+    AC_CACHE_CHECK([whether readline supports history],
+                   ac_cv_lib_readline_history, [
+      ac_cv_lib_readline_history="no"
+      AC_TRY_LINK_FUNC(add_history, ac_cv_lib_readline_history="yes")
+    ])
+    if test "$ac_cv_lib_readline_history" = "yes"; then
+      AC_DEFINE(HAVE_READLINE_HISTORY, 1,
+                [Define if your readline library has \`add_history'])
+      AC_CHECK_HEADERS(history.h readline/history.h)
+    fi
+  fi
+])
+
+AC_INCLUDE(aclocal.m4)