diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 14:11:00 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 14:11:00 +0000 |
commit | af754e596a8dbb05ed8580c342e7fe02e08b28e0 (patch) | |
tree | b2f334c2b55ede42081aa6710a72da784547d8ea /m4 | |
parent | Initial commit. (diff) | |
download | freeradius-b95e0cd7685e6bbc2465b1f4efe1884df2f4ef01.tar.xz freeradius-b95e0cd7685e6bbc2465b1f4efe1884df2f4ef01.zip |
Adding upstream version 3.2.3+dfsg.upstream/3.2.3+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | m4/ac_prog_cc_sunpro.m4 | 17 | ||||
-rw-r--r-- | m4/ax_cc.m4 | 493 | ||||
-rw-r--r-- | m4/ax_compare_version.m4 | 177 | ||||
-rw-r--r-- | m4/ax_prog_perl_modules.m4 | 77 | ||||
-rw-r--r-- | m4/ax_prog_ruby_version.m4 | 66 | ||||
-rw-r--r-- | m4/ax_ruby_devel.m4 | 214 | ||||
-rw-r--r-- | m4/ax_with_prog.m4 | 70 | ||||
-rw-r--r-- | m4/fr_check_struct_has_member.m4 | 36 | ||||
-rw-r--r-- | m4/fr_check_type_include.m4 | 21 | ||||
-rw-r--r-- | m4/fr_have_bounded_attribute.m4 | 26 | ||||
-rw-r--r-- | m4/fr_have_builtin_bswap64.m4 | 23 | ||||
-rw-r--r-- | m4/fr_have_builtin_choose_expr.m4 | 24 | ||||
-rw-r--r-- | m4/fr_have_builtin_types_compatible_p.m4 | 24 | ||||
-rw-r--r-- | m4/fr_init_module.m4 | 16 | ||||
-rw-r--r-- | m4/fr_module_start_tests.m4 | 250 | ||||
-rw-r--r-- | m4/fr_smart_check_include.m4 | 133 | ||||
-rw-r--r-- | m4/fr_smart_check_lib.m4 | 97 | ||||
-rw-r--r-- | m4/fr_tls.m4 | 67 | ||||
-rw-r--r-- | m4/libcurl_check_config.m4 | 251 | ||||
-rw-r--r-- | m4/python.m4 | 363 | ||||
-rw-r--r-- | m4/vl_lib_readline.m4 | 45 |
21 files changed, 2490 insertions, 0 deletions
diff --git a/m4/ac_prog_cc_sunpro.m4 b/m4/ac_prog_cc_sunpro.m4 new file mode 100644 index 0000000..b8bdbcf --- /dev/null +++ b/m4/ac_prog_cc_sunpro.m4 @@ -0,0 +1,17 @@ +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_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 +#ifdef __SUNPRO_C + yes; +#endif +EOF +if AC_TRY_COMMAND(${CC-cc} -E conftest.c) | egrep yes >/dev/null 2>&1; then + ac_cv_prog_suncc=yes +else + ac_cv_prog_suncc=no +fi])]) diff --git a/m4/ax_cc.m4 b/m4/ax_cc.m4 new file mode 100644 index 0000000..88b6987 --- /dev/null +++ b/m4/ax_cc.m4 @@ -0,0 +1,493 @@ +dnl # +dnl # check if were compiling with CLANG, autoconf GCC macro identifies CLANG as GCC +dnl # +AC_DEFUN([AX_CC_IS_CLANG],[ + AC_CACHE_CHECK([if compiler is clang], [ax_cv_cc_clang],[ + + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [[ + #ifndef __clang__ + not clang + #endif + ]])], + [ax_cv_cc_clang=yes], + [ax_cv_cc_clang=no]) + ]) +]) + +dnl # +dnl # clang and gcc originally used different flags to specify c11 support +dnl # +AC_DEFUN([AX_CC_STD_C11],[ + AC_CACHE_CHECK([for the compiler flag to enable C11 support], [ax_cv_cc_std_c11_flag],[ + ax_cv_cc_std_c11_flag= + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -std=c11" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [ + struct foo { + union { + int a; + int b; + }; + } bar; + ], + [ax_cv_cc_std_c11_flag="-std=c11"]) + + if test "x$ax_cv_cc_std_c11_flag" = x; then + CFLAGS="$CFLAGS_SAVED -std=c1x" + AC_TRY_COMPILE( + [], + [ + struct foo { + union { + int a; + int b; + }; + } bar; + ], + [ax_cv_cc_std_c11_flag="-std=c1x"]) + fi + + AC_LANG_POP + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +dnl # +dnl # clang and gcc originally used different flags to specify c11 support +dnl # +AC_DEFUN([AX_CC_UNWINDLIB_ARG],[ + AC_CACHE_CHECK([if the compiler accepts --unwindlib], [ax_cv_cc_unwindlib_arg],[ + LDFLAGS_SAVED=$LDFLAGS + LDFLAGS="$LDFLAGS -Werror --rtlib=compiler-rt --unwindlib=libunwind" + + AC_LINK_IFELSE( + [ + AC_LANG_SOURCE( + [ + int main(int argc, char **argv) { + return 0; + } + ]) + ], + [ax_cv_cc_unwindlib_arg=yes], + [ax_cv_cc_unwindlib_arg=no] + ) + + LDFLAGS="$LDFLAGS_SAVED" + ]) +]) + + +dnl # +dnl # Check if we have the _Generic construct +dnl # +AC_DEFUN([AX_CC_HAVE_C11_GENERIC], +[ +AC_CACHE_CHECK([for _Generic support in compiler], [ax_cv_cc_c11_generic],[ + AC_COMPILE_IFELSE( + [ + AC_LANG_SOURCE( + [ + int main(int argc, char **argv) { + int foo = 1; + return _Generic(foo, int: 0, char: 1); + } + ]) + ], + [ax_cv_cc_c11_generic=yes], + [ax_cv_cc_c11_generic=no] + ) +]) +if test "x$ax_cv_cc_c11_generic" = "xyes"; then + AC_DEFINE([HAVE_C11_GENERIC],1,[Define if the compiler supports the C11 _Generic construct]) +fi +]) + +AC_DEFUN([AX_CC_QUNUSED_ARGUMENTS_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Qunused-arguments"], [ax_cv_cc_qunused_arguments_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Qunused-arguments -foobar" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_qunused_arguments_flag="yes"], + [ax_cv_cc_qunused_arguments_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_NO_UNKNOWN_WARNING_OPTION_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Wno-unknown-warning-option"], [ax_cv_cc_no_unknown_warning_option_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="-Werror -Wno-unknown-warning-option" + + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [[ + /* + * gcc will happily accept -Wno-unknown-warning-option + * only emitting an error about it, if an error ocurrs in the source file. + */ + #if defined(__GNUC__) && !defined(__clang__) + gcc sucks + #endif + + return 0; + ]])], + [ax_cv_cc_no_unknown_warning_option_flag=yes], + [ax_cv_cc_no_unknown_warning_option_flag=no]) + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_WDECLARATION_AFTER_STATEMENT_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Wdeclaration-after-statement"], [ax_cv_cc_wdeclaration_after_statement_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Wdeclaration-after-statement" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_wdeclaration_after_statement_flag="yes"], + [ax_cv_cc_wdeclaration_after_statement_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_WEVERYTHING_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Weverything"], [ax_cv_cc_weverything_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Weverything -Wno-reserved-id-macro -Wno-unused-macros -Wno-unreachable-code-return -Wno-poison-system-directories" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_weverything_flag="yes"], + [ax_cv_cc_weverything_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_WDOCUMENTATION_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Wdocumentation"], [ax_cv_cc_wdocumentation_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Wdocumentation" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_wdocumentation_flag="yes"], + [ax_cv_cc_wdocumentation_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_IMPLICIT_FALLTHROUGH_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Wimplicit-fallthrough"], [ax_cv_cc_wimplicit_fallthrough_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_wimplicit_fallthrough_flag="yes"], + [ax_cv_cc_wimplicit_fallthrough_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_NO_DATE_TIME_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Wno-date-time"], [ax_cv_cc_no_date_time_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Wno-date-time" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_no_date_time_flag="yes"], + [ax_cv_cc_no_date_time_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_PTHREAD_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-pthread"], [ax_cv_cc_pthread_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -pthread" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_pthread_flag="yes"], + [ax_cv_cc_pthread_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +AC_DEFUN([AX_CC_SANITZE_ADDRESS_USE_AFTER_SCOPE_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-fsanitize-address-use-after-scope"], [ax_cv_cc_sanitize_address_use_after_scope],[ + + dnl # Need -fsanitize=address else we get an unused argument error + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -fsanitize=address -fsanitize-address-use-after-scope" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_sanitize_address_use_after_scope="yes"], + [ax_cv_cc_sanitize_address_use_after_scope="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + +dnl # +dnl # Check if we have the choose expr builtin +dnl # +AC_DEFUN([AX_CC_BUILTIN_CHOOSE_EXPR], +[ +AC_CACHE_CHECK([for __builtin_choose_expr support in compiler], [ax_cv_cc_builtin_choose_expr],[ + AC_COMPILE_IFELSE( + [ + AC_LANG_SOURCE( + [ + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return __builtin_choose_expr(0, 1, 0); + } + ]) + ], + [ax_cv_cc_builtin_choose_expr=yes], + [ax_cv_cc_builtin_choose_expr=no] + ) +]) +if test "x$ax_cv_cc_builtin_choose_expr" = "xyes"; then + AC_DEFINE([HAVE_BUILTIN_CHOOSE_EXPR],1,[Define if the compiler supports __builtin_choose_expr]) +fi +]) + +dnl # +dnl # Check if we have the types compatible p builtin +dnl # +AC_DEFUN([AX_CC_BUILTIN_TYPES_COMPATIBLE_P], +[ +AC_CACHE_CHECK([for __builtin_types_compatible_p support in compiler], [ax_cv_cc_builtin_types_compatible_p],[ + AC_COMPILE_IFELSE( + [ + AC_LANG_SOURCE( + [ + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return !(__builtin_types_compatible_p(char *, char *)); + } + ]) + ], + [ax_cv_cc_builtin_types_compatible_p=yes], + [ax_cv_cc_builtin_types_compatible_p=no] + ) +]) +if test "x$ax_cv_cc_builtin_types_compatible_p" = "xyes"; then + AC_DEFINE([HAVE_BUILTIN_TYPES_COMPATIBLE_P],1,[Define if the compiler supports __builtin_types_compatible_p]) +fi +]) + +dnl # +dnl # Check if we have the bwsap64 builtin +dnl # +AC_DEFUN([AX_CC_BUILTIN_BSWAP64], +[ +AC_CACHE_CHECK([for __builtin_bswap64 support in compiler], [ax_cv_cc_builtin_bswap64],[ + AC_COMPILE_IFELSE( + [ + AC_LANG_SOURCE([ + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return (__builtin_bswap64(0)); + } + ]) + ], + [ax_cv_cc_builtin_bswap64=yes], + [ax_cv_cc_builtin_bswap64=no] + ) +]) +if test "x$ax_cv_cc_builtin_bswap64" = "xyes"; then + AC_DEFINE([HAVE_BUILTIN_BSWAP64],1,[Define if the compiler supports __builtin_bswap64]) +fi +]) + +dnl # +dnl # Check if we have the clzll builtin +dnl # +AC_DEFUN([AX_CC_BUILTIN_CLZLL], +[ +AC_CACHE_CHECK([for __builtin_clzll support in compiler], [ax_cv_cc_builtin_clzll],[ + AC_COMPILE_IFELSE( + [ + AC_LANG_SOURCE([ + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return (__builtin_clzll(0) - (sizeof(unsigned long long) * 8)); + } + ]) + ], + [ax_cv_cc_builtin_clzll=yes], + [ax_cv_cc_builtin_clzll=no] + ) +]) +if test "x$ax_cv_cc_builtin_clzll" = "xyes"; then + AC_DEFINE([HAVE_BUILTIN_CLZLL],1,[Define if the compiler supports __builtin_clzll]) +fi +]) + +dnl # +dnl # Check if size_t and int64_t are identical +dnl # +AC_DEFUN([AX_CC_SIZE_SAME_AS_UINT64], +[ +AC_CACHE_CHECK([if size_t == uint64_t], [ax_cv_cc_size_same_as_uint64],[ + AC_COMPILE_IFELSE( + [ + AC_LANG_SOURCE([ + #include <stdint.h> + #include <stddef.h> + + int main(int argc, char **argv) { + return _Generic((size_t)(0), uint64_t: 1, size_t: 0); + } + ]) + ], + [ax_cv_cc_size_same_as_uint64=no], + [ax_cv_cc_size_same_as_uint64=yes] + ) +]) +if test "x$ax_cv_cc_size_same_as_uint64" = "xyes"; then + AC_DEFINE([SIZE_SAME_AS_UINT64],1,[Define if the compiler supports size_t has the same underlying type as uint64]) +fi +]) + +dnl # +dnl # Check if ssize_t and int64_t are identical +dnl # +AC_DEFUN([AX_CC_SSIZE_SAME_AS_INT64], +[ +AC_CACHE_CHECK([if ssize_t == int64_t], [ax_cv_cc_ssize_same_as_int64],[ + AC_COMPILE_IFELSE( + [ + AC_LANG_SOURCE([ + #include <stdint.h> + #include <stddef.h> + #include <sys/types.h> + + int main(int argc, char **argv) { + return _Generic((ssize_t)(0), int64_t: 1, ssize_t: 0); + } + ]) + ], + [ax_cv_cc_ssize_same_as_int64=no], + [ax_cv_cc_ssize_same_as_int64=yes] + ) +]) +if test "x$ax_cv_cc_ssize_same_as_int64" = "xyes"; then + AC_DEFINE([SSIZE_SAME_AS_INT64],1,[Define if the compiler supports ssize_t has the same underlying type as int64]) +fi +]) + +dnl # +dnl # Determine the number of system cores we have +dnl # +AC_DEFUN([AX_SYSTEM_CORES],[ + AC_CACHE_CHECK([number of system cores], [ax_cv_system_cores], + [ + AC_LANG_PUSH(C) + AC_TRY_RUN( + [ + #include <stdio.h> + #include <stdint.h> + #ifdef _WIN32 + # include <windows.h> + #elif MACOS + # include <sys/param.h> + # include <sys/sysctl.h> + #else + # include <unistd.h> + #endif + + int main (int argc, char *argv[]) + { + uint32_t count; + + #ifdef WIN32 + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + + count = sysinfo.dwNumberOfProcessors; + + #elif MACOS + int nm[2]; + size_t len = 4; + + nm[0] = CTL_HW; + nm[1] = HW_AVAILCPU; + sysctl(nm, 2, &count, &len, NULL, 0); + + if(count < 1) { + nm[1] = HW_NCPU; + sysctl(nm, 2, &count, &len, NULL, 0); + if(count < 1) { + count = 1; + } + } + + #else + count = sysconf(_SC_NPROCESSORS_ONLN); + #endif + + return count; + } + ], + [ax_cv_system_cores=$?], + [ax_cv_system_cores=$?], + [ax_cv_system_cores=] + ) + AC_LANG_POP + ]) +]) + diff --git a/m4/ax_compare_version.m4 b/m4/ax_compare_version.m4 new file mode 100644 index 0000000..74dc0fd --- /dev/null +++ b/m4/ax_compare_version.m4 @@ -0,0 +1,177 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_compare_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# This macro compares two version strings. Due to the various number of +# minor-version numbers that can exist, and the fact that string +# comparisons are not compatible with numeric comparisons, this is not +# necessarily trivial to do in a autoconf script. This macro makes doing +# these comparisons easy. +# +# The six basic comparisons are available, as well as checking equality +# limited to a certain number of minor-version levels. +# +# The operator OP determines what type of comparison to do, and can be one +# of: +# +# eq - equal (test A == B) +# ne - not equal (test A != B) +# le - less than or equal (test A <= B) +# ge - greater than or equal (test A >= B) +# lt - less than (test A < B) +# gt - greater than (test A > B) +# +# Additionally, the eq and ne operator can have a number after it to limit +# the test to that number of minor versions. +# +# eq0 - equal up to the length of the shorter version +# ne0 - not equal up to the length of the shorter version +# eqN - equal up to N sub-version levels +# neN - not equal up to N sub-version levels +# +# When the condition is true, shell commands ACTION-IF-TRUE are run, +# otherwise shell commands ACTION-IF-FALSE are run. The environment +# variable 'ax_compare_version' is always set to either 'true' or 'false' +# as well. +# +# Examples: +# +# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) +# +# would both be true. +# +# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) +# +# would both be false. +# +# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) +# +# would be true because it is only comparing two minor versions. +# +# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) +# +# would be true because it is only comparing the lesser number of minor +# versions of the two values. +# +# Note: The characters that separate the version numbers do not matter. An +# empty string is the same as version 0. OP is evaluated by autoconf, not +# configure, so must be a string, not a variable. +# +# The author would like to acknowledge Guido Draheim whose advice about +# the m4_case and m4_ifvaln functions make this macro only include the +# portions necessary to perform the specific comparison specified by the +# OP argument in the final configure script. +# +# LICENSE +# +# Copyright (c) 2008 Tim Toolan <toolan@ele.uri.edu> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 11 + +dnl ######################################################################### +AC_DEFUN([AX_COMPARE_VERSION], [ + AC_REQUIRE([AC_PROG_AWK]) + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + AS_VAR_PUSHDEF([A],[ax_compare_version_A]) + A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + AS_VAR_PUSHDEF([B],[ax_compare_version_B]) + B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary + dnl # then the first line is used to determine if the condition is true. + dnl # The sed right after the echo is to remove any indented white space. + m4_case(m4_tolower($2), + [lt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [gt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [le],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ], + [ge],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ],[ + dnl Split the operator from the subversion count if present. + m4_bmatch(m4_substr($2,2), + [0],[ + # A count of zero means use the length of the shorter version. + # Determine the number of characters in A and B. + ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` + ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` + + # Set A to no more than B's length and B to no more than A's length. + A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` + B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` + ], + [[0-9]+],[ + # A count greater than zero means use only that many subversions + A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + ], + [.+],[ + AC_WARNING( + [illegal OP numeric parameter: $2]) + ],[]) + + # Pad zeros at end of numbers to make same length. + ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" + B="$B`echo $A | sed 's/./0/g'`" + A="$ax_compare_version_tmp_A" + + # Check for equality or inequality as necessary. + m4_case(m4_tolower(m4_substr($2,0,2)), + [eq],[ + test "x$A" = "x$B" && ax_compare_version=true + ], + [ne],[ + test "x$A" != "x$B" && ax_compare_version=true + ],[ + AC_WARNING([illegal OP parameter: $2]) + ]) + ]) + + AS_VAR_POPDEF([A])dnl + AS_VAR_POPDEF([B])dnl + + dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. + if test "$ax_compare_version" = "true" ; then + m4_ifvaln([$4],[$4],[:])dnl + m4_ifvaln([$5],[else $5])dnl + fi +]) dnl AX_COMPARE_VERSION diff --git a/m4/ax_prog_perl_modules.m4 b/m4/ax_prog_perl_modules.m4 new file mode 100644 index 0000000..70b3230 --- /dev/null +++ b/m4/ax_prog_perl_modules.m4 @@ -0,0 +1,77 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_prog_perl_modules.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PROG_PERL_MODULES([MODULES], [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# Checks to see if the given perl modules are available. If true the shell +# commands in ACTION-IF-TRUE are executed. If not the shell commands in +# ACTION-IF-FALSE are run. Note if $PERL is not set (for example by +# calling AC_CHECK_PROG, or AC_PATH_PROG), AC_CHECK_PROG(PERL, perl, perl) +# will be run. +# +# MODULES is a space separated list of module names. To check for a +# minimum version of a module, append the version number to the module +# name, separated by an equals sign. +# +# Example: +# +# AX_PROG_PERL_MODULES( Text::Wrap Net::LDAP=1.0.3, , +# AC_MSG_WARN(Need some Perl modules) +# +# LICENSE +# +# Copyright (c) 2009 Dean Povey <povey@wedgetail.com> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 8 + +AU_ALIAS([AC_PROG_PERL_MODULES], [AX_PROG_PERL_MODULES]) +AC_DEFUN([AX_PROG_PERL_MODULES],[dnl + +m4_define([ax_perl_modules]) +m4_foreach([ax_perl_module], m4_split(m4_normalize([$1])), + [ + m4_append([ax_perl_modules], + [']m4_bpatsubst(ax_perl_module,=,[ ])[' ]) + ]) + +# Make sure we have perl +if test -z "$PERL"; then +AC_CHECK_PROG(PERL,perl,perl) +fi + +if test "x$PERL" != x; then + ax_perl_modules_failed=0 + for ax_perl_module in ax_perl_modules; do + AC_MSG_CHECKING(for perl module $ax_perl_module) + + # Would be nice to log result here, but can't rely on autoconf internals + $PERL -e "use $ax_perl_module; exit" > /dev/null 2>&1 + if test $? -ne 0; then + AC_MSG_RESULT(no); + ax_perl_modules_failed=1 + else + AC_MSG_RESULT(ok); + fi + done + + # Run optional shell commands + if test "$ax_perl_modules_failed" = 0; then + : + $2 + else + : + $3 + fi +else + AC_MSG_WARN(could not find perl) +fi])dnl diff --git a/m4/ax_prog_ruby_version.m4 b/m4/ax_prog_ruby_version.m4 new file mode 100644 index 0000000..e14ca60 --- /dev/null +++ b/m4/ax_prog_ruby_version.m4 @@ -0,0 +1,66 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_prog_ruby_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PROG_RUBY_VERSION([VERSION],[ACTION-IF-TRUE],[ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# Makes sure that ruby supports the version indicated. If true the shell +# commands in ACTION-IF-TRUE are executed. If not the shell commands in +# ACTION-IF-FALSE are run. Note if $RUBY is not set (for example by +# running AC_CHECK_PROG or AC_PATH_PROG) the macro will fail. +# +# Example: +# +# AC_PATH_PROG([RUBY],[ruby]) +# AC_PROG_RUBY_VERSION([1.8.0],[ ... ],[ ... ]) +# +# This will check to make sure that the ruby you have supports at least +# version 1.6.0. +# +# NOTE: This macro uses the $RUBY variable to perform the check. +# AX_WITH_PROG([RUBY],[ruby],[VALUE-IF-NOT-FOUND],[PATH]) can be used to +# set that variable prior to running this macro. The $RUBY_VERSION +# variable will be valorized with the detected version. +# +# LICENSE +# +# Copyright (c) 2009 Francesco Salvestrini <salvestrini@users.sourceforge.net> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 11 + +AC_DEFUN([AX_PROG_RUBY_VERSION],[ + AC_REQUIRE([AC_PROG_SED]) + AC_REQUIRE([AC_PROG_GREP]) + + AS_IF([test -n "$RUBY"],[ + ax_ruby_version="$1" + + AC_MSG_CHECKING([for ruby version]) + changequote(<<,>>) + ruby_version=`$RUBY --version 2>&1 | $GREP "^ruby " | $SED -e 's/^.* \([0-9]*\.[0-9]*\.[0-9]*\) .*/\1/'` + changequote([,]) + AC_MSG_RESULT($ruby_version) + + AC_SUBST([RUBY_VERSION],[$ruby_version]) + + AX_COMPARE_VERSION([$ax_ruby_version],[le],[$ruby_version],[ + : + $2 + ],[ + : + $3 + ]) + ],[ + AC_MSG_WARN([could not find the ruby interpreter]) + $3 + ]) +]) diff --git a/m4/ax_ruby_devel.m4 b/m4/ax_ruby_devel.m4 new file mode 100644 index 0000000..d39e1d3 --- /dev/null +++ b/m4/ax_ruby_devel.m4 @@ -0,0 +1,214 @@ +# =========================================================================== +# http://autoconf-archive.cryp.to/ax_ruby_devel.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_RUBY_DEVEL([version]) +# +# DESCRIPTION +# +# This macro checks for Ruby and tries to get the include path to +# 'ruby.h'. It provides the $(RUBY_CFLAGS) and $(RUBY_LDFLAGS) output +# variables. It also exports $(RUBY_EXTRA_LIBS) for embedding Ruby in your +# code. +# +# You can search for some particular version of Ruby by passing a +# parameter to this macro, for example "1.8.6". +# +# LICENSE +# +# Copyright (c) 2008 Rafal Rzepecki <divided.mind@gmail.com> +# Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de> +# Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca> +# Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net> +# Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za> +# Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org> +# Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org> +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +AC_DEFUN([AX_RUBY_DEVEL],[ + AC_REQUIRE([AX_WITH_RUBY]) + AS_IF([test -n "$1"], [AX_PROG_RUBY_VERSION([$1])]) + + # + # Check if you have mkmf, else fail + # + AC_MSG_CHECKING([for the mkmf Ruby package]) + ac_mkmf_result=`$RUBY -rmkmf -e ";" 2>&1` + if test -z "$ac_mkmf_result"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_WARN([cannot import Ruby module "mkmf". +Please check your Ruby installation. The error was: +$ac_distutils_result]) + fi + + # + # Check for Ruby include path + # + if test -z "$RUBY_CFLAGS"; then + # + # Check for Ruby cflags + # + AC_MSG_CHECKING([for Ruby cflags]) + if test -z "$RUBY_CFLAGS"; then + RUBY_CFLAGS=`$RUBY -rmkmf -e 'print RbConfig::CONFIG.fetch(%q(CFLAGS))'` + fi + AC_MSG_RESULT([$RUBY_CFLAGS]) + + # + # Check for Ruby include path + # + AC_MSG_CHECKING([for Ruby include path]) + ruby_path=`$RUBY -rmkmf -e 'c = RbConfig::CONFIG; print c.has_key?(%q(rubyhdrdir)) ? \ + c.fetch(%q(rubyhdrdir)) : c.fetch(%q(archdir))'` + + ruby_arch=`$RUBY -rmkmf -e 'print RbConfig::CONFIG.fetch(%q(arch))'` + + if test -n "${ruby_path}"; then + # + # For some reason ruby 1.9.1 on linux seems to put its + # config.h file in ${ruby_path}/${ruby_arch}/ruby/config.h + # Aside from the fact that it is WRONG to include your own + # config.h file, it means we can't use the headers unless we + # add both paths. + # + if test -d "${ruby_path}/${ruby_arch}"; then + ruby_path=" -I${ruby_path} -I${ruby_path}/${ruby_arch}" + else + ruby_path=" -I${ruby_path}" + fi + fi + + RUBY_CFLAGS="$RUBY_CFLAGS $ruby_path" + AC_MSG_RESULT([$ruby_path]) + fi + + AC_SUBST([RUBY_CFLAGS]) + + if test -z "$RUBY_LDFLAGS"; then + # + # Check for Ruby library path + # + AC_MSG_CHECKING([for Ruby library path]) + if test -z "$RUBY_LIBRARY_PATH"; then + RUBY_LIBRARY_PATH=`$RUBY -rmkmf -e 'print RbConfig::CONFIG.fetch(%q(libdir))'` + if test -n "${RUBY_LIBRARY_PATH}"; then + RUBY_LIBRARY_PATH=" -L$RUBY_LIBRARY_PATH" + fi + fi + + AC_MSG_RESULT([$RUBY_LIBRARY_PATH]) + + # + # Check for Ruby linking flags + # + AC_MSG_CHECKING([for Ruby linking flags]) + + RUBY_LDFLAGS=`$RUBY -rmkmf -e 'print RbConfig::CONFIG.fetch(%q(LIBRUBYARG_SHARED))'` + AC_MSG_RESULT([$RUBY_LDFLAGS]) + + RUBY_LDFLAGS="${RUBY_LIBRARY_PATH} ${RUBY_LDFLAGS}" + fi + + AC_SUBST([RUBY_LDFLAGS]) + + # + # Check for site packages + # + AC_MSG_CHECKING([for Ruby site-packages path]) + if test -z "$RUBY_SITE_PKG"; then + RUBY_SITE_PKG=`$RUBY -rmkmf -e 'print RbConfig::CONFIG.fetch(%q(sitearchdir))'` + fi + AC_MSG_RESULT([$RUBY_SITE_PKG]) + AC_SUBST([RUBY_SITE_PKG]) + + # + # libraries which must be linked in when embedding + # + AC_MSG_CHECKING([for Ruby extra libraries]) + if test -z "$RUBY_EXTRA_LIBS"; then + RUBY_EXTRA_LIBS=`$RUBY -rmkmf -e 'print RbConfig::CONFIG.fetch(%q(SOLIBS))'` + fi + AC_MSG_RESULT([$RUBY_EXTRA_LIBS]) + AC_SUBST(RUBY_EXTRA_LIBS) + + # + # linking flags needed when embedding + # (is it even needed for Ruby?) + # + # AC_MSG_CHECKING([for Ruby extra linking flags]) + # if test -z "$RUBY_EXTRA_LIBS"; then + # RUBY_EXTRA_LIBS=`$RUBY -rmkmf -e 'print RubyConfig::CONFIG.fetch(%q(LINKFORSHARED))'` + # fi + # AC_MSG_RESULT([$RUBY_EXTRA_LIBS]) + # AC_SUBST(RUBY_EXTRA_LIBS) + + # this flags breaks ruby.h, and is sometimes defined by KDE m4 macros + CFLAGS="`echo "$CFLAGS" | sed -e 's/-std=iso9899:1990//g;'`" + # + # final check to see if everything compiles alright + # + AC_MSG_CHECKING([consistency of all components of ruby development environment]) + AC_LANG_PUSH([C]) + # save current global flags + ac_save_LIBS="$LIBS" + LIBS="$ac_save_LIBS $RUBY_LDFLAGS" + ac_save_CFLAGS="$CFLAGS" + CFLAGS="$ac_save_CFLAGS $RUBY_CFLAGS" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <ruby.h>],[ruby_init()])], + [rubyexists=yes], + [rubyexists=no]) + + AC_MSG_RESULT([$rubyexists]) + + if test ! "$rubyexists" = "yes"; then + AC_MSG_WARN([ + Could not link test program to Ruby. Maybe the main Ruby library has been + installed in some non-standard library path. If so, pass it to configure, + via the LDFLAGS environment variable. + Example: ./configure LDFLAGS="-L/usr/non-standard-path/ruby/lib" + ============================================================================ + You probably have to install the development version of the Ruby package + for your distribution. The exact name of this package varies among them. + ============================================================================ + ]) + RUBY_VERSION="" + fi + AC_LANG_POP + # turn back to default flags + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + + # + # all done! + # +]) + diff --git a/m4/ax_with_prog.m4 b/m4/ax_with_prog.m4 new file mode 100644 index 0000000..f337c05 --- /dev/null +++ b/m4/ax_with_prog.m4 @@ -0,0 +1,70 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_with_prog.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_WITH_PROG([VARIABLE],[program],[VALUE-IF-NOT-FOUND],[PATH]) +# +# DESCRIPTION +# +# Locates an installed program binary, placing the result in the precious +# variable VARIABLE. Accepts a present VARIABLE, then --with-program, and +# failing that searches for program in the given path (which defaults to +# the system path). If program is found, VARIABLE is set to the full path +# of the binary; if it is not found VARIABLE is set to VALUE-IF-NOT-FOUND +# if provided, unchanged otherwise. +# +# A typical example could be the following one: +# +# AX_WITH_PROG(PERL,perl) +# +# NOTE: This macro is based upon the original AX_WITH_PYTHON macro from +# Dustin J. Mitchell <dustin@cs.uchicago.edu>. +# +# LICENSE +# +# Copyright (c) 2008 Francesco Salvestrini <salvestrini@users.sourceforge.net> +# Copyright (c) 2008 Dustin J. Mitchell <dustin@cs.uchicago.edu> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 16 + +AC_DEFUN([AX_WITH_PROG],[ + AC_PREREQ([2.61]) + + pushdef([VARIABLE],$1) + pushdef([EXECUTABLE],$2) + pushdef([VALUE_IF_NOT_FOUND],$3) + pushdef([PATH_PROG],$4) + + AC_ARG_VAR(VARIABLE,Absolute path to EXECUTABLE executable) + + AS_IF(test -z "$VARIABLE",[ + AC_MSG_CHECKING(whether EXECUTABLE executable path has been provided) + AC_ARG_WITH(EXECUTABLE,AS_HELP_STRING([--with-EXECUTABLE=[[[PATH]]]],absolute path to EXECUTABLE executable), [ + AS_IF([test "$withval" != yes && test "$withval" != no],[ + VARIABLE="$withval" + AC_MSG_RESULT($VARIABLE) + ],[ + VARIABLE="" + AC_MSG_RESULT([no]) + AS_IF([test "$withval" != no], [ + AC_PATH_PROG([]VARIABLE[],[]EXECUTABLE[],[]VALUE_IF_NOT_FOUND[],[]PATH_PROG[]) + ]) + ]) + ],[ + AC_MSG_RESULT([no]) + AC_PATH_PROG([]VARIABLE[],[]EXECUTABLE[],[]VALUE_IF_NOT_FOUND[],[]PATH_PROG[]) + ]) + ]) + + popdef([PATH_PROG]) + popdef([VALUE_IF_NOT_FOUND]) + popdef([EXECUTABLE]) + popdef([VARIABLE]) +]) diff --git a/m4/fr_check_struct_has_member.m4 b/m4/fr_check_struct_has_member.m4 new file mode 100644 index 0000000..57d8b02 --- /dev/null +++ b/m4/fr_check_struct_has_member.m4 @@ -0,0 +1,36 @@ +dnl # +dnl # Look for a header file in a number of places. +dnl # +dnl # Usage: FR_CHECK_STRUCT_HAS_MEMBER([#include <foo.h>], [struct foo], member) +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_MSG_CHECKING([for $3 in $2]) + +dnl BASED on 'offsetof': +dnl #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +dnl + + AC_TRY_COMPILE([ +$1 +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER) +#endif +], + [ int foo = offsetof($2, $3) ], + has_element=" ", + has_element=) + + ac_safe_type=`echo "$2" | sed 'y% %_%'` + if test "x$has_element" != "x"; then + AC_MSG_RESULT(yes) + eval "ac_cv_type_${ac_safe_type}_has_$3=yes" + else + AC_MSG_RESULT(no) + eval "ac_cv_type_${ac_safe_type}_has_$3=" + fi +]) diff --git a/m4/fr_check_type_include.m4 b/m4/fr_check_type_include.m4 new file mode 100644 index 0000000..66aa532 --- /dev/null +++ b/m4/fr_check_type_include.m4 @@ -0,0 +1,21 @@ +dnl # +dnl # FR_CHECK_TYPE_INCLUDE([#includes ...], type, default-C-types) +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_CACHE_CHECK(for $2, ac_cv_type_$2, + [ ac_cv_type_$2=no + AC_TRY_COMPILE($1, + [$2 foo], + ac_cv_type_$2=yes, + ) + ] + ) + + if test "$ac_cv_type_$2" != "yes"; then + AC_DEFINE($2, $3, $4) + fi +]) diff --git a/m4/fr_have_bounded_attribute.m4 b/m4/fr_have_bounded_attribute.m4 new file mode 100644 index 0000000..50c3305 --- /dev/null +++ b/m4/fr_have_bounded_attribute.m4 @@ -0,0 +1,26 @@ +dnl # +dnl # Check if we have __attribute__((__bounded__)) (usually only OpenBSD with GCC) +dnl # +AC_DEFUN([FR_HAVE_BOUNDED_ATTRIBUTE],[ + AC_CACHE_CHECK([for __attribute__((__bounded__)) support in compiler], [ax_cv_cc_bounded_attribute],[ + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror" + AC_RUN_IFELSE( + [ + AC_LANG_SOURCE([ + void test(char *buff) __attribute__ ((__bounded__ (__string__, 1, 1))); + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return 0; + } + ]) + ], + [ax_cv_cc_bounded_attribute=yes], + [ax_cv_cc_bounded_attribute=no] + ) + CFLAGS="$CFLAGS_SAVED" + ]) + if test "x$ax_cv_cc_bounded_attribute" = "xyes"; then + AC_DEFINE(HAVE_ATTRIBUTE_BOUNDED, 1, [Define if your compiler supports the __bounded__ attribute (usually OpenBSD gcc).]) + fi +]) diff --git a/m4/fr_have_builtin_bswap64.m4 b/m4/fr_have_builtin_bswap64.m4 new file mode 100644 index 0000000..ab205c9 --- /dev/null +++ b/m4/fr_have_builtin_bswap64.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # Check if we have the bwsap64 builtin +dnl # +AC_DEFUN([FR_HAVE_BUILTIN_BSWAP64], +[ + AC_CACHE_CHECK([for __builtin_bswap64 support in compiler], [ax_cv_cc_builtin_bswap64],[ + AC_RUN_IFELSE( + [ + AC_LANG_SOURCE([ + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return (__builtin_bswap64(0)); + } + ]) + ], + [ax_cv_cc_builtin_bswap64=yes], + [ax_cv_cc_builtin_bswap64=no] + ) + ]) + if test "x$ax_cv_cc_builtin_bswap64" = "xyes"; then + AC_DEFINE([HAVE_BUILTIN_BSWAP_64],1,[Define if the compiler supports __builtin_bswap64]) + fi +]) diff --git a/m4/fr_have_builtin_choose_expr.m4 b/m4/fr_have_builtin_choose_expr.m4 new file mode 100644 index 0000000..950bc55 --- /dev/null +++ b/m4/fr_have_builtin_choose_expr.m4 @@ -0,0 +1,24 @@ +dnl # +dnl # Check if we have the choose expr builtin +dnl # +AC_DEFUN([FR_HAVE_BUILTIN_CHOOSE_EXPR], +[ + AC_CACHE_CHECK([for __builtin_choose_expr support in compiler], [ax_cv_cc_builtin_choose_expr],[ + AC_RUN_IFELSE( + [ + AC_LANG_SOURCE( + [ + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return __builtin_choose_expr(0, 1, 0); + } + ]) + ], + [ax_cv_cc_builtin_choose_expr=yes], + [ax_cv_cc_builtin_choose_expr=no] + ) + ]) + if test "x$ax_cv_cc_builtin_choose_expr" = "xyes"; then + AC_DEFINE([HAVE_BUILTIN_CHOOSE_EXPR],1,[Define if the compiler supports __builtin_choose_expr]) + fi +]) diff --git a/m4/fr_have_builtin_types_compatible_p.m4 b/m4/fr_have_builtin_types_compatible_p.m4 new file mode 100644 index 0000000..6e5b02c --- /dev/null +++ b/m4/fr_have_builtin_types_compatible_p.m4 @@ -0,0 +1,24 @@ +dnl # +dnl # Check if we have the types compatible p builtin +dnl # +AC_DEFUN([FR_HAVE_BUILTIN_TYPES_COMPATIBLE_P], +[ + AC_CACHE_CHECK([for __builtin_types_compatible_p support in compiler], [ax_cv_cc_builtin_types_compatible_p],[ + AC_RUN_IFELSE( + [ + AC_LANG_SOURCE( + [ + int main(int argc, char **argv) { + if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */ + return !(__builtin_types_compatible_p(char *, char *)); + } + ]) + ], + [ax_cv_cc_builtin_types_compatible_p=yes], + [ax_cv_cc_builtin_types_compatible_p=no] + ) + ]) + if test "x$ax_cv_cc_builtin_types_compatible_p" = "xyes"; then + AC_DEFINE([HAVE_BUILTIN_TYPES_COMPATIBLE_P],1,[Define if the compiler supports __builtin_types_compatible_p]) + fi +]) diff --git a/m4/fr_init_module.m4 b/m4/fr_init_module.m4 new file mode 100644 index 0000000..91ac4ff --- /dev/null +++ b/m4/fr_init_module.m4 @@ -0,0 +1,16 @@ +dnl Macro to set the module name and other useful common functions +dnl +dnl Usages: +dnl FR_INIT_MODULE([rlm_example]) +dnl FR_INIT_MODULE([rlm_example], [the example module]) +dnl +AC_DEFUN([FR_INIT_MODULE], +[ + AC_DEFUN([modname],$1) + AC_DEFUN([modname_useropt],[m4_bpatsubst([]modname,[[-+.]],[_])]) + + AC_ARG_WITH([$1], + [AS_HELP_STRING([--without-$1],[build without ]ifelse([$2],[],[$1],[$2]))]) +]) + +AC_DEFUN([FR_INIT_LIBRARY], m4_defn([FR_INIT_MODULE])) diff --git a/m4/fr_module_start_tests.m4 b/m4/fr_module_start_tests.m4 new file mode 100644 index 0000000..e4117c4 --- /dev/null +++ b/m4/fr_module_start_tests.m4 @@ -0,0 +1,250 @@ +dnl Where module/library report is stored +AC_DEFUN([FR_REPORT_FILE], [config.report]) + +dnl Where feature list is built up +AC_DEFUN([FR_REPORT_TMP], [config.report.tmp]) + +dnl Space prefix for non-first lines of feature list +AC_DEFUN([FR_REPORT_PREFIX], [ ]) + +dnl +dnl Store status about module configure state. +dnl +dnl Usage: +dnl FR_MODULE_STATUS([status]) +dnl FR_MODULE_STATUS([status], [reason]) +dnl +dnl First argument is the status to report, likely "OK", +dnl "skipping" or "disabled". +dnl +dnl Second optional argument is the reason for skipping this +dnl module (likely dependencies not met). +dnl +AC_DEFUN([FR_MODULE_STATUS],[ +ifelse([$2], [], [ +fr_status="$1" +], [ +fr_status="$1 ($2)" +])]) + + +dnl +dnl FR_MODULE_FAIL +dnl +dnl Usage: +dnl FR_MODULE_FAIL([reason]) +dnl +dnl Add a(nother) reason why the module will not be built. +dnl +AC_DEFUN([FR_MODULE_FAIL], [ +fail="$fail $1" +]) + + +dnl +dnl FR_MODULE_START_TESTS +dnl +dnl Usage: +dnl FR_MODULE_START_TESTS +dnl +dnl Set up ready to do module-specific tests. Clears variables and +dnl adds code to output a header before the tests to make the +dnl configure output easier to read. +dnl +AC_DEFUN([FR_MODULE_START_TESTS], +[ +fail= +fr_status= +fr_features= +: > "FR_REPORT_FILE" +: > "FR_REPORT_TMP" + +m4_divert_text([SHELL_FN], [ +echo +echo Running tests for modname +echo +]) + +if test x"$with_[]modname_useropt" != xno; then +]) + +AC_DEFUN([FR_LIBRARY_START_TESTS], m4_defn([FR_MODULE_START_TESTS])) + + +dnl +dnl FR_MODULE_END_TESTS +dnl +dnl Usage: +dnl FR_MODULE_END_TESTS +dnl FR_MODULE_END_TESTS([nostrict]) +dnl +dnl If passed "nostrict", checks will be made for the +dnl enable_strict_dependencies flag. +dnl +dnl Called at the end of module-specific tests. This outputs +dnl information on whether the module is disabled or not, or why +dnl configuration failed. It also stores the status for a summary +dnl to be printed at the end of the main configure script. +dnl +AC_DEFUN([FR_MODULE_END_TESTS], [ + targetname=modname +else + targetname= + echo \*\*\* module modname is disabled. + FR_MODULE_STATUS([disabled]) +fi + +if test x"$fail" != x""; then + targetname="" + +ifelse([$1], [nostrict], [], [ + if test x"${enable_strict_dependencies}" = x"yes"; then + AC_MSG_ERROR([set --without-]modname[ to disable it explicitly.]) + else +]) + AC_MSG_WARN([silently not building ]modname[.]) + AC_MSG_WARN([FAILURE: ]modname[ requires: $fail.]); + fail="$(echo $fail)" + FR_MODULE_STATUS([skipping], [requires $fail]) + fr_features= +ifelse([$1], [nostrict], [], [ + fi +]) +else + FR_MODULE_STATUS([OK]) +fi + +if test x"$fr_features" = x""; then + $as_echo "$fr_status" > "FR_REPORT_FILE" +else + $as_echo_n "$fr_status ... " > "FR_REPORT_FILE" + cat "FR_REPORT_TMP" >> "FR_REPORT_FILE" +fi + +rm "FR_REPORT_TMP" + +AC_SUBST(targetname) +]) + +AC_DEFUN([FR_LIBRARY_END_TESTS], m4_defn([FR_MODULE_END_TESTS])) + + +dnl +dnl FR_MODULE_FEATURE +dnl +dnl Usage: +dnl FR_MODULE_FEATURE([name], [description]) +dnl +dnl Declare that a module feature is or is not available (but the +dnl module can still be built). +dnl +AC_DEFUN([FR_MODULE_FEATURE], [ +if echo "$fr_features" | grep -q "+$1+"; then : +dnl feature already declared +else : + fr_report_prefix="" + if test x"$fr_features" != x""; then + fr_report_prefix="FR_REPORT_PREFIX" + fi + $as_echo "$fr_report_prefix""$2" >> FR_REPORT_TMP + fr_features="$fr_features +$1+" +fi +]) + +dnl +dnl FR_MODULE_TEST_FAIL_DO +dnl +dnl Usage: +dnl FR_MODULE_TEST_FAIL_DO([commands]) +dnl +dnl Run commands when the module tests fail and the module is not +dnl going to be built. +dnl +AC_DEFUN([FR_MODULE_TEST_FAIL_DO], [ +if test x"$fail" != x""; then : + $1 +fi +]) + +AC_DEFUN([FR_LIBRARY_TEST_FAIL_DO], m4_defn([FR_MODULE_TEST_FAIL_DO])) + + +dnl +dnl FR_MODULE_TEST_PASS_DO +dnl +dnl Usage: +dnl FR_MODULE_TEST_PASS_DO([commands]) +dnl +dnl Run commands when the module tests succeed and the module is +dnl going to be built. +dnl +AC_DEFUN([FR_MODULE_TEST_PASS_DO], [ +if test x"$fail" = x""; then : + $1 +fi +]) + +AC_DEFUN([FR_LIBRARY_TEST_PASS_DO], m4_defn([FR_MODULE_TEST_PASS_DO])) + + + +dnl +dnl FR_MODULE_REPORT +dnl +dnl Usage: +dnl FR_MODULE_REPORT +dnl +dnl Outputs a summary list of all modules and any configure errors. +dnl +AC_DEFUN([FR_MODULE_REPORT], [ +module_list=$(find src/modules/ -type d -name 'rlm_*' -print | sort) + +echo +echo Module configure status report +echo ------------------------------ + +for module in $module_list; do + module_name="$(basename $module)" + module_print="$(echo "$module_name ........................" | cut -c 1-25)" + module_status="OK" + + if test -r $module/configure.ac; then + if test -r $module/FR_REPORT_FILE; then + module_status=$(cat $module/FR_REPORT_FILE) + fi + fi + + $as_echo "$module_print $module_status" +done +]) + + +dnl +dnl FR_LIBRARY_REPORT +dnl +dnl Usage: +dnl FR_LIBRARY_REPORT +dnl +dnl Outputs a summary list of all libraries and any configure errors. +dnl +AC_DEFUN([FR_LIBRARY_REPORT], [ +library_list=$(find src/lib/ -mindepth 1 -maxdepth 1 -type d -print | sort) + +echo +echo Library configure status report +echo ------------------------------- + +for library in $library_list; do + library_name="$(basename $library)" + library_print="$(echo "$library_name ........................" | cut -c 1-25)" + library_status="OK" + + if test -r $library/configure.ac; then + if test -r $library/FR_REPORT_FILE; then + library_status=$(cat $library/FR_REPORT_FILE) + fi + fi + + echo "$library_print $library_status" +done +]) diff --git a/m4/fr_smart_check_include.m4 b/m4/fr_smart_check_include.m4 new file mode 100644 index 0000000..e7d4443 --- /dev/null +++ b/m4/fr_smart_check_include.m4 @@ -0,0 +1,133 @@ +dnl # +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_safe=`echo "$1" | sed 'y%./+-%__pm%'` +old_CPPFLAGS="$CPPFLAGS" +smart_include= +dnl # The default directories we search in (in addition to the compilers search path) +smart_include_dir="/usr/local/include /opt/include" + +dnl # Our local versions +_smart_try_dir= +_smart_include_dir= + +dnl # Add variants with the different prefixes and one with no prefix +for _prefix in $smart_prefix ""; do + for _dir in $smart_try_dir; do + _smart_try_dir="${_smart_try_dir} ${_dir}/${_prefix}" + done + + for _dir in $smart_include_dir; do + _smart_include_dir="${_smart_include_dir} ${_dir}/${_prefix}" + done +done + +dnl # +dnl # Try any user-specified directory first 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 + AC_MSG_CHECKING([for $1 in $try]) + CPPFLAGS="-isystem $try $old_CPPFLAGS" + AC_TRY_COMPILE([$2 + #include <$1>], + [int a = 1;], + [ + smart_include="-isystem $try" + AC_MSG_RESULT(yes) + break + ], + [ + smart_include= + AC_MSG_RESULT(no) + ]) + done + CPPFLAGS="$old_CPPFLAGS" +fi + +dnl # +dnl # Try using the default includes (with prefixes). +dnl # +if test "x$smart_include" = "x"; then + for _prefix in $smart_prefix; do + AC_MSG_CHECKING([for ${_prefix}/$1]) + + AC_TRY_COMPILE([$2 + #include <$1>], + [int a = 1;], + [ + smart_include="-isystem ${_prefix}/" + AC_MSG_RESULT(yes) + break + ], + [ + smart_include= + AC_MSG_RESULT(no) + ]) + done +fi + +dnl # +dnl # Try using the default includes (without prefixes). +dnl # +if test "x$smart_include" = "x"; then + AC_MSG_CHECKING([for $1]) + + AC_TRY_COMPILE([$2 + #include <$1>], + [int a = 1;], + [ + smart_include=" " + AC_MSG_RESULT(yes) + break + ], + [ + smart_include= + AC_MSG_RESULT(no) + ]) +fi + +dnl # +dnl # Try to guess possible locations. +dnl # +if test "x$smart_include" = "x"; then + + for try in $_smart_include_dir; do + AC_MSG_CHECKING([for $1 in $try]) + CPPFLAGS="-isystem $try $old_CPPFLAGS" + AC_TRY_COMPILE([$2 + #include <$1>], + [int a = 1;], + [ + smart_include="-isystem $try" + AC_MSG_RESULT(yes) + break + ], + [ + smart_include= + AC_MSG_RESULT(no) + ]) + done + CPPFLAGS="$old_CPPFLAGS" +fi + +dnl # +dnl # Found it, set the appropriate variable. +dnl # +if test "x$smart_include" != "x"; then + eval "ac_cv_header_$ac_safe=yes" + CPPFLAGS="$smart_include $old_CPPFLAGS" + SMART_CPPFLAGS="$smart_include $SMART_CPPFLAGS" +fi + +dnl # +dnl # Consume prefix, it's not likely to be used +dnl # between multiple calls. +dnl # +smart_prefix= +]) diff --git a/m4/fr_smart_check_lib.m4 b/m4/fr_smart_check_lib.m4 new file mode 100644 index 0000000..16ac5b3 --- /dev/null +++ b/m4/fr_smart_check_lib.m4 @@ -0,0 +1,97 @@ +dnl # +dnl # Look for a library in a number of places. +dnl # +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_%'` + +dnl # +dnl # We pass all arguments for linker testing in CCPFLAGS as these +dnl # will be passed to the compiler (then linker) first. +dnl # +dnl # The linker will search through -L directories in the order they +dnl # appear on the command line. Unfortunately the same rules appear +dnl # to apply to directories specified with --sysroot, so we must +dnl # pass the user specified directory first. +dnl # +dnl # Really we should be using LDFLAGS (-L<dir>) for this. +dnl # +old_LIBS="$LIBS" +old_CPPFLAGS="$CPPFLAGS" +smart_lib= +smart_ldflags= +smart_lib_dir= + +dnl # +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 + AC_MSG_CHECKING([for $2 in -l$1 in $try]) + LIBS="-l$1 $old_LIBS" + CPPFLAGS="-L$try -Wl,-rpath,$try $old_CPPFLAGS" + AC_TRY_LINK([extern char $2();], + [$2()], + [ + smart_lib="-l$1" + smart_ldflags="-L$try -Wl,-rpath,$try" + AC_MSG_RESULT(yes) + break + ], + [AC_MSG_RESULT(no)]) + done + LIBS="$old_LIBS" + CPPFLAGS="$old_CPPFLAGS" +fi + +dnl # +dnl # Try using the default library path +dnl # +if test "x$smart_lib" = "x"; then + AC_MSG_CHECKING([for $2 in -l$1]) + LIBS="-l$1 $old_LIBS" + AC_TRY_LINK([extern char $2();], + [$2()], + [ + smart_lib="-l$1" + AC_MSG_RESULT(yes) + ], + [AC_MSG_RESULT(no)]) + LIBS="$old_LIBS" +fi + +dnl # +dnl # Try to guess possible locations. +dnl # +if test "x$smart_lib" = "x"; then + for try in /usr/local/lib /opt/lib; do + AC_MSG_CHECKING([for $2 in -l$1 in $try]) + LIBS="-l$1 $old_LIBS" + CPPFLAGS="-L$try -Wl,-rpath,$try $old_CPPFLAGS" + AC_TRY_LINK([extern char $2();], + [$2()], + [ + smart_lib="-l$1" + smart_ldflags="-L$try -Wl,-rpath,$try" + AC_MSG_RESULT(yes) + break + ], + [AC_MSG_RESULT(no)]) + done + LIBS="$old_LIBS" + CPPFLAGS="$old_CPPFLAGS" +fi + +dnl # +dnl # Found it, set the appropriate variable. +dnl # +if test "x$smart_lib" != "x"; then + eval "ac_cv_lib_${sm_lib_safe}_${sm_func_safe}=yes" + LIBS="$smart_ldflags $smart_lib $old_LIBS" + SMART_LIBS="$smart_ldflags $smart_lib $SMART_LIBS" +fi +]) diff --git a/m4/fr_tls.m4 b/m4/fr_tls.m4 new file mode 100644 index 0000000..56ad7f2 --- /dev/null +++ b/m4/fr_tls.m4 @@ -0,0 +1,67 @@ +dnl # +dnl # Figure out which storage class specifier for Thread Local Storage is supported by the compiler +dnl # +AC_DEFUN([FR_TLS], +[ +dnl # +dnl # See if the compilation works with __thread, for thread-local storage +dnl # + AC_MSG_CHECKING(for __thread support in compiler) + AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ + static __thread int val; + int main(int argc, char **argv) { + val = 0; + return val; + } + ]]) + ],[have_tls=yes],[have_tls=no],[have_tls=no]) + AC_MSG_RESULT($have_tls) + if test "x$have_tls" = "xyes"; then + AC_DEFINE([TLS_STORAGE_CLASS],[__thread],[Define if the compiler supports a thread local storage class]) + fi + +dnl # +dnl # __declspec(thread) does exactly the same thing as __thread, but is supported by MSVS +dnl # + if test "x$have_tls" = "xno"; then + AC_MSG_CHECKING(for __declspec(thread) support in compiler) + AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ + static _Thread_local int val; + int main(int argc, char **argv) { + val = 0; + return val; + } + ]]) + ],[have_tls=yes],[have_tls=no],[have_tls=no]) + AC_MSG_RESULT($have_tls) + if test "x$have_tls" = "xyes"; then + AC_DEFINE([TLS_STORAGE_CLASS],[__declspec(thread)],[Define if the compiler supports a thread local storage class]) + fi + fi +dnl # +dnl # _Thread_local does exactly the same thing as __thread, but it's standards compliant with C11. +dnl # we, however, state we are only compliant with C99, so the compiler will probably emit warnings +dnl # if we use it. So save it as a last resort. +dnl # + if test "x$have_tls" = "xno"; then + AC_MSG_CHECKING(for _Thread_local support in compiler) + AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ + static _Thread_local int val; + int main(int argc, char **argv) { + val = 0; + return val; + } + ]]) + ],[have_tls=yes],[have_tls=no],[have_tls=no]) + AC_MSG_RESULT($have_tls) + if test "x$have_tls" = "xyes"; then + AC_DEFINE([TLS_STORAGE_CLASS],[_Thread_local],[Define if the compiler supports a thread local storage class]) + fi + fi +]) diff --git a/m4/libcurl_check_config.m4 b/m4/libcurl_check_config.m4 new file mode 100644 index 0000000..dabf18b --- /dev/null +++ b/m4/libcurl_check_config.m4 @@ -0,0 +1,251 @@ +# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION], +# [ACTION-IF-YES], [ACTION-IF-NO]) +# ---------------------------------------------------------- +# David Shaw <dshaw@jabberwocky.com> May-09-2006 +# +# Checks for libcurl. DEFAULT-ACTION is the string yes or no to +# specify whether to default to --with-libcurl or --without-libcurl. +# If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the +# minimum version of libcurl to accept. Pass the version as a regular +# version number like 7.10.1. If not supplied, any version is +# accepted. ACTION-IF-YES is a list of shell commands to run if +# libcurl was successfully found and passed the various tests. +# ACTION-IF-NO is a list of shell commands that are run otherwise. +# Note that using --without-libcurl does run ACTION-IF-NO. +# +# This macro #defines HAVE_LIBCURL if a working libcurl setup is +# found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary +# values. Other useful defines are LIBCURL_FEATURE_xxx where xxx are +# the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy +# where yyy are the various protocols supported by libcurl. Both xxx +# and yyy are capitalized. See the list of AH_TEMPLATEs at the top of +# the macro for the complete list of possible defines. Shell +# variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also +# defined to 'yes' for those features and protocols that were found. +# Note that xxx and yyy keep the same capitalization as in the +# curl-config list (e.g. it's "HTTP" and not "http"). +# +# Users may override the detected values by doing something like: +# LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure +# +# For the sake of sanity, this macro assumes that any libcurl that is +# found is after version 7.7.2, the first version that included the +# curl-config script. Note that it is very important for people +# packaging binary versions of libcurl to include this script! +# Without curl-config, we can only guess what protocols are available, +# or use curl_version_info to figure it out at runtime. + +AC_DEFUN([LIBCURL_CHECK_CONFIG], +[ + AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL]) + AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4]) + AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6]) + AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz]) + AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS]) + AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN]) + AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI]) + AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM]) + + AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS]) + AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS]) + AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE]) + AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET]) + AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT]) + AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_RTSP],[Defined if libcurl supports RTSP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_POP3],[Defined if libcurl supports POP3]) + AH_TEMPLATE([LIBCURL_PROTOCOL_IMAP],[Defined if libcurl supports IMAP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_SMTP],[Defined if libcurl supports SMTP]) + + AC_ARG_WITH(libcurl, + AC_HELP_STRING([--with-libcurl=PREFIX],[look for the curl library in PREFIX/lib and headers in PREFIX/include]), + [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])]) + + if test "$_libcurl_with" != "no" ; then + + AC_PROG_AWK + + _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'" + + _libcurl_try_link=yes + + if test -d "$_libcurl_with" ; then + LIBCURL_CPPFLAGS="-I$withval/include" + _libcurl_ldflags="-L$withval/lib" + AC_PATH_PROG([_libcurl_config],[curl-config],[], + ["$withval/bin"]) + else + AC_PATH_PROG([_libcurl_config],[curl-config],[],[$PATH]) + fi + + if test x$_libcurl_config != "x" ; then + AC_CACHE_CHECK([for the version of libcurl], + [libcurl_cv_lib_curl_version], + [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`]) + + _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` + _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse` + + if test $_libcurl_wanted -gt 0 ; then + AC_CACHE_CHECK([for libcurl >= version $2], + [libcurl_cv_lib_version_ok], + [ + if test $_libcurl_version -ge $_libcurl_wanted ; then + libcurl_cv_lib_version_ok=yes + else + libcurl_cv_lib_version_ok=no + fi + ]) + fi + + if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then + if test x"$LIBCURL_CPPFLAGS" = "x" ; then + LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` + fi + if test x"$LIBCURL" = "x" ; then + LIBCURL=`$_libcurl_config --libs` + + # This is so silly, but Apple actually has a bug in their + # curl-config script. Fixed in Tiger, but there are still + # lots of Panther installs around. + case "${host}" in + powerpc-apple-darwin7*) + LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'` + ;; + esac + fi + + # All curl-config scripts support --feature + _libcurl_features=`$_libcurl_config --feature` + + # Is it modern enough to have --protocols? (7.12.4) + if test $_libcurl_version -ge 461828 ; then + _libcurl_protocols=`$_libcurl_config --protocols` + fi + else + _libcurl_try_link=no + fi + + unset _libcurl_wanted + fi + + if test $_libcurl_try_link = yes ; then + + # we didn't find curl-config, so let's see if the user-supplied + # link line (or failing that, "-lcurl") is enough. + LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"} + + AC_CACHE_CHECK([whether libcurl is usable], + [libcurl_cv_lib_curl_usable], + [ + _libcurl_save_cppflags=$CPPFLAGS + CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS" + _libcurl_save_libs=$LIBS + LIBS="$LIBCURL $LIBS" + + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <curl/curl.h>]],[[ +/* Try and use a few common options to force a failure if we are + missing symbols or can't link. */ +int x; +curl_easy_setopt(NULL,CURLOPT_URL,NULL); +x=CURL_ERROR_SIZE; +x=CURLOPT_WRITEFUNCTION; +x=CURLOPT_FILE; +x=CURLOPT_ERRORBUFFER; +x=CURLOPT_STDERR; +x=CURLOPT_VERBOSE; +if (x) ; +]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no) + + CPPFLAGS=$_libcurl_save_cppflags + LIBS=$_libcurl_save_libs + unset _libcurl_save_cppflags + unset _libcurl_save_libs + ]) + + if test $libcurl_cv_lib_curl_usable = yes ; then + + # Does curl_free() exist in this version of libcurl? + # If not, fake it with free() + + _libcurl_save_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" + _libcurl_save_libs=$LIBS + LIBS="$LIBS $LIBCURL" + + AC_CHECK_FUNC(curl_free,, + AC_DEFINE(curl_free,free, + [Define curl_free() as free() if our version of curl lacks curl_free.])) + + CPPFLAGS=$_libcurl_save_cppflags + LIBS=$_libcurl_save_libs + unset _libcurl_save_cppflags + unset _libcurl_save_libs + + AC_DEFINE(HAVE_LIBCURL,1, + [Define to 1 if you have a functional curl library.]) + AC_SUBST(LIBCURL_CPPFLAGS) + AC_SUBST(LIBCURL) + + for _libcurl_feature in $_libcurl_features ; do + AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1]) + eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes + done + + if test "x$_libcurl_protocols" = "x" ; then + + # We don't have --protocols, so just assume that all + # protocols are available + _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT TFTP" + + if test x$libcurl_feature_SSL = xyes ; then + _libcurl_protocols="$_libcurl_protocols HTTPS" + + # FTPS wasn't standards-compliant until version + # 7.11.0 (0x070b00 == 461568) + if test $_libcurl_version -ge 461568; then + _libcurl_protocols="$_libcurl_protocols FTPS" + fi + fi + + # RTSP, IMAP, POP3 and SMTP were added in + # 7.20.0 (0x071400 == 463872) + if test $_libcurl_version -ge 463872; then + _libcurl_protocols="$_libcurl_protocols RTSP IMAP POP3 SMTP" + fi + fi + + for _libcurl_protocol in $_libcurl_protocols ; do + AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1]) + eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes + done + else + unset LIBCURL + unset LIBCURL_CPPFLAGS + fi + fi + + unset _libcurl_try_link + unset _libcurl_version_parse + unset _libcurl_config + unset _libcurl_feature + unset _libcurl_features + unset _libcurl_protocol + unset _libcurl_protocols + unset _libcurl_version + unset _libcurl_ldflags + fi + + if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then + # This is the IF-NO path + ifelse([$4],,:,[$4]) + else + # This is the IF-YES path + ifelse([$3],,:,[$3]) + fi + + unset _libcurl_with +])dnl diff --git a/m4/python.m4 b/m4/python.m4 new file mode 100644 index 0000000..78ca763 --- /dev/null +++ b/m4/python.m4 @@ -0,0 +1,363 @@ +## ------------------------ -*- Autoconf -*- +## Python file handling +## From Andrew Dalke +## Updated by James Henstridge and other contributors. +## ------------------------ +# Copyright (C) 1999-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], +[python python2 python3 dnl + python3.11 python3.10 dnl + python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 dnl + python3.2 python3.1 python3.0 dnl + python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 dnl + python2.0]) + + AC_ARG_VAR([PYTHON], [the Python interpreter]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version is >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([Python interpreter is too old])]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Although site.py simply uses + dnl sys.version[:3], printing that failed with Python 3.10, since the + dnl trailing zero was eliminated. So now we output just the major + dnl and minor version numbers, as numbers. Apparently the tertiary + dnl version is not of interest. + dnl + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[[:2]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl At times, e.g., when building shared libraries, you may want + dnl to know which OS platform Python thinks this is. + dnl + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + dnl emacs-page + dnl If --with-python-sys-prefix is given, use the values of sys.prefix + dnl and sys.exec_prefix for the corresponding values of PYTHON_PREFIX + dnl and PYTHON_EXEC_PREFIX. Otherwise, use the GNU ${prefix} and + dnl ${exec_prefix} variables. + dnl + dnl The two are made distinct variables so they can be overridden if + dnl need be, although general consensus is that you shouldn't need + dnl this separation. + dnl + dnl Also allow directly setting the prefixes via configure options, + dnl overriding any default. + dnl + if test "x$prefix" = xNONE; then + am__usable_prefix=$ac_default_prefix + else + am__usable_prefix=$prefix + fi + + # Allow user to request using sys.* values from Python, + # instead of the GNU $prefix values. + AC_ARG_WITH([python-sys-prefix], + [AS_HELP_STRING([--with-python-sys-prefix], + [use Python's sys.prefix and sys.exec_prefix values])], + [am_use_python_sys=:], + [am_use_python_sys=false]) + + # Allow user to override whatever the default Python prefix is. + AC_ARG_WITH([python_prefix], + [AS_HELP_STRING([--with-python_prefix], + [override the default PYTHON_PREFIX])], + [am_python_prefix_subst=$withval + am_cv_python_prefix=$withval + AC_MSG_CHECKING([for explicit $am_display_PYTHON prefix]) + AC_MSG_RESULT([$am_cv_python_prefix])], + [ + if $am_use_python_sys; then + # using python sys.prefix value, not GNU + AC_CACHE_CHECK([for python default $am_display_PYTHON prefix], + [am_cv_python_prefix], + [am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`]) + + dnl If sys.prefix is a subdir of $prefix, replace the literal value of + dnl $prefix with a variable reference so it can be overridden. + case $am_cv_python_prefix in + $am__usable_prefix*) + am__strip_prefix=`echo "$am__usable_prefix" | sed 's|.|.|g'` + am_python_prefix_subst=`echo "$am_cv_python_prefix" | sed "s,^$am__strip_prefix,\\${prefix},"` + ;; + *) + am_python_prefix_subst=$am_cv_python_prefix + ;; + esac + else # using GNU prefix value, not python sys.prefix + am_python_prefix_subst='${prefix}' + am_python_prefix=$am_python_prefix_subst + AC_MSG_CHECKING([for GNU default $am_display_PYTHON prefix]) + AC_MSG_RESULT([$am_python_prefix]) + fi]) + # Substituting python_prefix_subst value. + AC_SUBST([PYTHON_PREFIX], [$am_python_prefix_subst]) + + # emacs-page Now do it all over again for Python exec_prefix, but with yet + # another conditional: fall back to regular prefix if that was specified. + AC_ARG_WITH([python_exec_prefix], + [AS_HELP_STRING([--with-python_exec_prefix], + [override the default PYTHON_EXEC_PREFIX])], + [am_python_exec_prefix_subst=$withval + am_cv_python_exec_prefix=$withval + AC_MSG_CHECKING([for explicit $am_display_PYTHON exec_prefix]) + AC_MSG_RESULT([$am_cv_python_exec_prefix])], + [ + # no explicit --with-python_exec_prefix, but if + # --with-python_prefix was given, use its value for python_exec_prefix too. + AS_IF([test -n "$with_python_prefix"], + [am_python_exec_prefix_subst=$with_python_prefix + am_cv_python_exec_prefix=$with_python_prefix + AC_MSG_CHECKING([for python_prefix-given $am_display_PYTHON exec_prefix]) + AC_MSG_RESULT([$am_cv_python_exec_prefix])], + [ + # Set am__usable_exec_prefix whether using GNU or Python values, + # since we use that variable for pyexecdir. + if test "x$exec_prefix" = xNONE; then + am__usable_exec_prefix=$am__usable_prefix + else + am__usable_exec_prefix=$exec_prefix + fi + # + if $am_use_python_sys; then # using python sys.exec_prefix, not GNU + AC_CACHE_CHECK([for python default $am_display_PYTHON exec_prefix], + [am_cv_python_exec_prefix], + [am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"`]) + dnl If sys.exec_prefix is a subdir of $exec_prefix, replace the + dnl literal value of $exec_prefix with a variable reference so it can + dnl be overridden. + case $am_cv_python_exec_prefix in + $am__usable_exec_prefix*) + am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'` + am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"` + ;; + *) + am_python_exec_prefix_subst=$am_cv_python_exec_prefix + ;; + esac + else # using GNU $exec_prefix, not python sys.exec_prefix + am_python_exec_prefix_subst='${exec_prefix}' + am_python_exec_prefix=$am_python_exec_prefix_subst + AC_MSG_CHECKING([for GNU default $am_display_PYTHON exec_prefix]) + AC_MSG_RESULT([$am_python_exec_prefix]) + fi])]) + # Substituting python_exec_prefix_subst. + AC_SUBST([PYTHON_EXEC_PREFIX], [$am_python_exec_prefix_subst]) + + # Factor out some code duplication into this shell variable. + am_python_setup_sysconfig="\ +import sys +# Prefer sysconfig over distutils.sysconfig, for better compatibility +# with python 3.x. See automake bug#10227. +try: + import sysconfig +except ImportError: + can_use_sysconfig = 0 +else: + can_use_sysconfig = 1 +# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: +# <https://github.com/pypa/virtualenv/issues/118> +try: + from platform import python_implementation + if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': + can_use_sysconfig = 0 +except ImportError: + pass" + + dnl emacs-page Set up 4 directories: + + dnl 1. pythondir: where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. + dnl + AC_CACHE_CHECK([for $am_display_PYTHON script directory (pythondir)], + [am_cv_python_pythondir], + [if test "x$am_cv_python_prefix" = x; then + am_py_prefix=$am__usable_prefix + else + am_py_prefix=$am_cv_python_prefix + fi + am_cv_python_pythondir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + if hasattr(sysconfig, 'get_default_scheme'): + scheme = sysconfig.get_default_scheme() + else: + scheme = sysconfig._get_default_scheme() + if scheme == 'posix_local': + # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/ + scheme = 'posix_prefix' + sitedir = sysconfig.get_path('purelib', scheme, vars={'base':'$am_py_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') +sys.stdout.write(sitedir)"` + # + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,\\${PYTHON_PREFIX},"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) am_cv_python_pythondir="\${PYTHON_PREFIX}/lib/python$PYTHON_VERSION/site-packages" + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl 2. pkgpythondir: $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + dnl + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl 3. pyexecdir: directory for installing python extension modules + dnl (shared libraries). + dnl Query distutils for this directory. + dnl + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory (pyexecdir)], + [am_cv_python_pyexecdir], + [if test "x$am_cv_python_exec_prefix" = x; then + am_py_exec_prefix=$am__usable_exec_prefix + else + am_py_exec_prefix=$am_cv_python_exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + if hasattr(sysconfig, 'get_default_scheme'): + scheme = sysconfig.get_default_scheme() + else: + scheme = sysconfig._get_default_scheme() + if scheme == 'posix_local': + # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/ + scheme = 'posix_prefix' + sitedir = sysconfig.get_path('platlib', scheme, vars={'platbase':'$am_py_exec_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_prefix') +sys.stdout.write(sitedir)"` + # + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,\\${PYTHON_EXEC_PREFIX},"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) am_cv_python_pyexecdir="\${PYTHON_EXEC_PREFIX}/lib/python$PYTHON_VERSION/site-packages" + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl 4. pkgpyexecdir: $(pyexecdir)/$(PACKAGE) + dnl + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) diff --git a/m4/vl_lib_readline.m4 b/m4/vl_lib_readline.m4 new file mode 100644 index 0000000..f95be7b --- /dev/null +++ b/m4/vl_lib_readline.m4 @@ -0,0 +1,45 @@ +AC_DEFUN([VL_LIB_READLINE], [ + AC_CACHE_CHECK([for a readline compatible library], + vl_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, vl_cv_lib_readline="$TRY_LIB") + if test -n "$vl_cv_lib_readline"; then + break + fi + done + if test -n "$vl_cv_lib_readline"; then + break + fi + done + if test -z "$vl_cv_lib_readline"; then + vl_cv_lib_readline="no" + LIBS="$ORIG_LIBS" + fi + ]) + + if test "$vl_cv_lib_readline" != "no"; then + LIBREADLINE="$vl_cv_lib_readline" + 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], + [vl_cv_lib_readline_history], [ + vl_cv_lib_readline_history="no" + AC_TRY_LINK_FUNC([add_history], [vl_cv_lib_readline_history="yes"]) + ]) + if test "$vl_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_SUBST(LIBREADLINE) +])dnl |