1 dnl Checks to see if this is SUNPro we're building with
4 AC_DEFUN([AC_PROG_CC_SUNPRO],
5 [AC_CACHE_CHECK(whether we are using SUNPro C, ac_cv_prog_suncc,
6 [dnl The semicolon is to pacify NeXT's syntax-checking cpp.
12 if AC_TRY_COMMAND(${CC-cc} -E conftest.c) | egrep yes >/dev/null 2>&1; then
19 dnl # FR_CHECK_TYPE_INCLUDE([#includes ...], type, default-C-types)
21 dnl # This function is like AC_CHECK_TYPE, but you can give this one
22 dnl # a list of include files to check.
24 AC_DEFUN([FR_CHECK_TYPE_INCLUDE],
26 AC_CACHE_CHECK(for $2, ac_cv_type_$2,
35 if test "$ac_cv_type_$2" != "yes"; then
41 dnl # Locate the directory in which a particular file is found.
43 dnl # Usage: FR_LOCATE_DIR(MYSQLLIB_DIR, libmysqlclient.a)
45 dnl # Defines the variable MYSQLLIB_DIR to be the directory(s) in
46 dnl # which the file libmysqlclient.a is to be found.
49 AC_DEFUN([FR_LOCATE_DIR],
51 dnl # If we have the program 'locate', then the problem of finding a
52 dnl # particular file becomes MUCH easier.
56 dnl # No 'locate' defined, do NOT do anything.
58 if test "x$LOCATE" != "x"; then
60 dnl # Root through a series of directories, looking for the given file.
65 for x in `${LOCATE} $file 2>/dev/null`; do
67 dnl # When asked for 'foo', locate will also find 'foo_bar', which we
68 dnl # don't want. We want that EXACT filename.
70 dnl # We ALSO want to be able to look for files like 'mysql/mysql.h',
71 dnl # and properly match them, too. So we try to strip off the last
72 dnl # part of the filename, using the name of the file we're looking
73 dnl # for. If we CANNOT strip it off, then the name will be unchanged.
75 base=`echo $x | sed "s%/${file}%%"`
76 if test "x$x" = "x$base"; then
80 dir=`${DIRNAME} $x 2>/dev/null`
82 dnl # Exclude a number of directories.
84 exclude=`echo ${dir} | ${GREP} /home`
85 if test "x$exclude" != "x"; then
90 dnl # OK, we have an exact match. Let's be sure that we only find ONE
91 dnl # matching directory.
93 already=`echo \$$1 ${DIRS} | ${GREP} ${dir}`
94 if test "x$already" = "x"; then
101 dnl # And remember the directory in which we found the file.
103 eval "$1=\"\$$1 $DIRS\""
107 dnl #######################################################################
109 dnl # Look for a library in a number of places.
111 dnl # FR_SMART_CHECK_LIB(library, function)
113 AC_DEFUN([FR_SMART_CHECK_LIB], [
115 sm_lib_safe=`echo "$1" | sed 'y%./+-%__p_%'`
116 sm_func_safe=`echo "$2" | sed 'y%./+-%__p_%'`
119 dnl # We pass all arguments for linker testing in CCPFLAGS as these
120 dnl # will be passed to the compiler (then linker) first.
122 dnl # The linker will search through -L directories in the order they
123 dnl # appear on the command line. Unfortunately the same rules appear
124 dnl # to apply to directories specified with --sysroot, so we must
125 dnl # pass the user specified directory first.
127 dnl # Really we should be using LDFLAGS (-L<dir>) for this.
130 old_CPPFLAGS="$CPPFLAGS"
136 dnl # Try first any user-specified directory, otherwise we may pick up
137 dnl # the wrong version.
139 if test "x$smart_try_dir" != "x"; then
140 for try in $smart_try_dir; do
141 AC_MSG_CHECKING([for $2 in -l$1 in $try])
142 LIBS="-l$1 $old_LIBS"
143 CPPFLAGS="-L$try -Wl,-rpath,$try $old_CPPFLAGS"
144 AC_TRY_LINK([extern char $2();],
148 smart_ldflags="-L$try -Wl,-rpath,$try"
155 CPPFLAGS="$old_CPPFLAGS"
159 dnl # Try using the default library path
161 if test "x$smart_lib" = "x"; then
162 AC_MSG_CHECKING([for $2 in -l$1])
163 LIBS="-l$1 $old_LIBS"
164 AC_TRY_LINK([extern char $2();],
175 dnl # Try to guess possible locations.
177 if test "x$smart_lib" = "x"; then
178 FR_LOCATE_DIR(smart_lib_dir,[lib$1${libltdl_cv_shlibext}])
179 FR_LOCATE_DIR(smart_lib_dir,[lib$1.a])
181 for try in $smart_lib_dir /usr/local/lib /opt/lib; do
182 AC_MSG_CHECKING([for $2 in -l$1 in $try])
183 LIBS="-l$1 $old_LIBS"
184 CPPFLAGS="-L$try -Wl,-rpath,$try $old_CPPFLAGS"
185 AC_TRY_LINK([extern char $2();],
189 smart_ldflags="-L$try -Wl,-rpath,$try"
196 CPPFLAGS="$old_CPPFLAGS"
200 dnl # Found it, set the appropriate variable.
202 if test "x$smart_lib" != "x"; then
203 eval "ac_cv_lib_${sm_lib_safe}_${sm_func_safe}=yes"
204 LIBS="$smart_ldflags $smart_lib $old_LIBS"
205 SMART_LIBS="$smart_ldflags $smart_lib $SMART_LIBS"
209 dnl #######################################################################
211 dnl # Look for a header file in a number of places.
213 dnl # FR_SMART_CHECK_INCLUDE(foo.h, [ #include <other.h> ])
215 AC_DEFUN([FR_SMART_CHECK_INCLUDE], [
217 ac_safe=`echo "$1" | sed 'y%./+-%__pm%'`
218 old_CPPFLAGS="$CPPFLAGS"
220 dnl # The default directories we search in (in addition to the compilers search path)
221 smart_include_dir="/usr/local/include /opt/include"
223 dnl # Our local versions
227 dnl # Add variants with the different prefixes and one with no prefix
228 for _prefix in $smart_prefix ""; do
229 for _dir in $smart_try_dir; do
230 _smart_try_dir="${_smart_try_dir} ${_dir}/${_prefix}"
233 for _dir in $smart_include_dir; do
234 _smart_include_dir="${_smart_include_dir} ${_dir}/${_prefix}"
239 dnl # Try any user-specified directory first otherwise we may pick up
240 dnl # the wrong version.
242 if test "x$_smart_try_dir" != "x"; then
243 for try in $_smart_try_dir; do
244 AC_MSG_CHECKING([for $1 in $try])
245 CPPFLAGS="-isystem $try $old_CPPFLAGS"
250 smart_include="-isystem $try"
259 CPPFLAGS="$old_CPPFLAGS"
263 dnl # Try using the default includes (with prefixes).
265 if test "x$smart_include" = "x"; then
266 for _prefix in $smart_prefix; do
267 AC_MSG_CHECKING([for ${_prefix}/$1])
273 smart_include="-isystem ${_prefix}/"
285 dnl # Try using the default includes (without prefixes).
287 if test "x$smart_include" = "x"; then
288 AC_MSG_CHECKING([for $1])
305 dnl # Try to guess possible locations.
307 if test "x$smart_include" = "x"; then
309 for prefix in $smart_prefix; do
310 FR_LOCATE_DIR(_smart_include_dir,"${_prefix}/${1}")
312 FR_LOCATE_DIR(_smart_include_dir, $1)
314 for try in $_smart_include_dir; do
315 AC_MSG_CHECKING([for $1 in $try])
316 CPPFLAGS="-isystem $try $old_CPPFLAGS"
321 smart_include="-isystem $try"
330 CPPFLAGS="$old_CPPFLAGS"
334 dnl # Found it, set the appropriate variable.
336 if test "x$smart_include" != "x"; then
337 eval "ac_cv_header_$ac_safe=yes"
338 CPPFLAGS="$smart_include $old_CPPFLAGS"
339 SMART_CPPFLAGS="$smart_include $SMART_CPPFLAGS"
343 dnl # Consume prefix, it's not likely to be used
344 dnl # between multiple calls.
349 dnl #######################################################################
351 dnl # Look for a header file in a number of places.
353 dnl # Usage: FR_CHECK_STRUCT_HAS_MEMBER([#include <foo.h>], [struct foo], member)
354 dnl # If the member is defined, then the variable
355 dnl # ac_cv_type_struct_foo_has_member is set to 'yes'
357 AC_DEFUN([FR_CHECK_STRUCT_HAS_MEMBER], [
358 AC_MSG_CHECKING([for $3 in $2])
360 dnl BASED on 'offsetof':
361 dnl #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
370 #define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)
373 [ int foo = offsetof($2, $3) ],
377 ac_safe_type=`echo "$2" | sed 'y% %_%'`
378 if test "x$has_element" != "x"; then
380 eval "ac_cv_type_${ac_safe_type}_has_$3=yes"
383 eval "ac_cv_type_${ac_safe_type}_has_$3="
387 dnl Autoconf 2.61 breaks the support for chained configure scripts
388 dnl in combination with config.cache
389 m4_pushdef([AC_OUTPUT],
391 unset ac_cv_env_LIBS_set
392 unset ac_cv_env_LIBS_value
393 m4_popdef([AC_OUTPUT])
394 AC_OUTPUT([$1],[$2],[$3])
398 dnl # Figure out which storage class specifier for Thread Local Storage is supported by the compiler
403 dnl # See if the compilation works with __thread, for thread-local storage
405 AC_MSG_CHECKING(for __thread support in compiler)
409 static __thread int val;
410 int main(int argc, char **argv) {
415 ],[have_tls=yes],[have_tls=no],[have_tls=no])
416 AC_MSG_RESULT($have_tls)
417 if test "x$have_tls" = "xyes"; then
418 AC_DEFINE([TLS_STORAGE_CLASS],[__thread],[Define if the compiler supports a thread local storage class])
422 dnl # __declspec(thread) does exactly the same thing as __thread, but is supported by MSVS
424 if test "x$have_tls" = "xno"; then
425 AC_MSG_CHECKING(for __declspec(thread) support in compiler)
429 static _Thread_local int val;
430 int main(int argc, char **argv) {
435 ],[have_tls=yes],[have_tls=no],[have_tls=no])
436 AC_MSG_RESULT($have_tls)
437 if test "x$have_tls" = "xyes"; then
438 AC_DEFINE([TLS_STORAGE_CLASS],[__declspec(thread)],[Define if the compiler supports a thread local storage class])
442 dnl # _Thread_local does exactly the same thing as __thread, but it's standards compliant with C11.
443 dnl # we, however, state we are only compliant with C99, so the compiler will probably emit warnings
444 dnl # if we use it. So save it as a last resort.
446 if test "x$have_tls" = "xno"; then
447 AC_MSG_CHECKING(for _Thread_local support in compiler)
451 static _Thread_local int val;
452 int main(int argc, char **argv) {
457 ],[have_tls=yes],[have_tls=no],[have_tls=no])
458 AC_MSG_RESULT($have_tls)
459 if test "x$have_tls" = "xyes"; then
460 AC_DEFINE([TLS_STORAGE_CLASS],[_Thread_local],[Define if the compiler supports a thread local storage class])
465 AC_DEFUN([VL_LIB_READLINE], [
466 AC_CACHE_CHECK([for a readline compatible library],
467 vl_cv_lib_readline, [
469 for readline_lib in readline edit editline; do
470 for termcap_lib in "" termcap curses ncurses; do
471 if test -z "$termcap_lib"; then
472 TRY_LIB="-l$readline_lib"
474 TRY_LIB="-l$readline_lib -l$termcap_lib"
476 LIBS="$ORIG_LIBS $TRY_LIB"
477 AC_TRY_LINK_FUNC(readline, vl_cv_lib_readline="$TRY_LIB")
478 if test -n "$vl_cv_lib_readline"; then
482 if test -n "$vl_cv_lib_readline"; then
486 if test -z "$vl_cv_lib_readline"; then
487 vl_cv_lib_readline="no"
492 if test "$vl_cv_lib_readline" != "no"; then
493 LIBREADLINE="$vl_cv_lib_readline"
494 AC_DEFINE(HAVE_LIBREADLINE, 1,
495 [Define if you have a readline compatible library])
496 AC_CHECK_HEADERS(readline.h readline/readline.h)
497 AC_CACHE_CHECK([whether readline supports history],
498 [vl_cv_lib_readline_history], [
499 vl_cv_lib_readline_history="no"
500 AC_TRY_LINK_FUNC([add_history], [vl_cv_lib_readline_history="yes"])
502 if test "$vl_cv_lib_readline_history" = "yes"; then
503 AC_DEFINE(HAVE_READLINE_HISTORY, 1,
504 [Define if your readline library has \`add_history'])
505 AC_CHECK_HEADERS(history.h readline/history.h)
508 AC_SUBST(LIBREADLINE)
512 dnl # Check if we have the choose expr builtin
514 AC_DEFUN([FR_HAVE_BUILTIN_CHOOSE_EXPR],
516 AC_CACHE_CHECK([for __builtin_choose_expr support in compiler], [ax_cv_cc_builtin_choose_expr],[
521 int main(int argc, char **argv) {
522 if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
523 return __builtin_choose_expr(0, 1, 0);
527 [ax_cv_cc_builtin_choose_expr=yes],
528 [ax_cv_cc_builtin_choose_expr=no]
531 if test "x$ax_cv_cc_builtin_choose_expr" = "xyes"; then
532 AC_DEFINE([HAVE_BUILTIN_CHOOSE_EXPR],1,[Define if the compiler supports __builtin_choose_expr])
537 dnl # Check if we have the types compatible p builtin
539 AC_DEFUN([FR_HAVE_BUILTIN_TYPES_COMPATIBLE_P],
541 AC_CACHE_CHECK([for __builtin_types_compatible_p support in compiler], [ax_cv_cc_builtin_types_compatible_p],[
546 int main(int argc, char **argv) {
547 if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
548 return !(__builtin_types_compatible_p(char *, char *));
552 [ax_cv_cc_builtin_types_compatible_p=yes],
553 [ax_cv_cc_builtin_types_compatible_p=no]
556 if test "x$ax_cv_cc_builtin_types_compatible_p" = "xyes"; then
557 AC_DEFINE([HAVE_BUILTIN_TYPES_COMPATIBLE_P],1,[Define if the compiler supports __builtin_types_compatible_p])
562 dnl # Check if we have the bwsap64 builtin
564 AC_DEFUN([FR_HAVE_BUILTIN_BSWAP64],
566 AC_CACHE_CHECK([for __builtin_bswap64 support in compiler], [ax_cv_cc_builtin_bswap64],[
570 int main(int argc, char **argv) {
571 if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
572 return (__builtin_bswap64(0));
576 [ax_cv_cc_builtin_bswap64=yes],
577 [ax_cv_cc_builtin_bswap64=no]
580 if test "x$ax_cv_cc_builtin_bswap64" = "xyes"; then
581 AC_DEFINE([HAVE_BUILTIN_BSWAP_64],1,[Define if the compiler supports __builtin_bswap64])
586 dnl # Check if we have __attribute__((__bounded__)) (usually only OpenBSD with GCC)
588 AC_DEFUN([FR_HAVE_BOUNDED_ATTRIBUTE],[
589 AC_CACHE_CHECK([for __attribute__((__bounded__)) support in compiler], [ax_cv_cc_bounded_attribute],[
591 CFLAGS="$CFLAGS -Werror"
595 void test(char *buff) __attribute__ ((__bounded__ (__string__, 1, 1)));
596 int main(int argc, char **argv) {
597 if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
602 [ax_cv_cc_bounded_attribute=yes],
603 [ax_cv_cc_bounded_attribute=no]
605 CFLAGS="$CFLAGS_SAVED"
607 if test "x$ax_cv_cc_bounded_attribute" = "xyes"; then
608 AC_DEFINE(HAVE_ATTRIBUTE_BOUNDED, 1, [Define if your compiler supports the __bounded__ attribute (usually OpenBSD gcc).])
612 AC_INCLUDE(aclocal.m4)