1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
|
dnl Scott Dattalo
dnl
dnl This is copied from the NcFTP distribution.
dnl Author Mike Gleason mgleason@NcFTP.com
dnl
dnl This macro will check for the presence and version
dnl of the readline library. To get it into the aclocal.m4
dnl file, do this:
dnl aclocal -I . --verbose
dnl
dnl The --verbose will show all of the files that are searched
dnl for .m4 macros.
AC_DEFUN(wi_LIB_READLINE, [
AC_MSG_CHECKING([for GNU Readline library, version 2.0 or newer])
wi_cv_lib_readline=no
wi_cv_lib_readline_result=no
ac_save_LIBS="$LIBS"
# Note: $LIBCURSES is permitted to be empty.
for LIBREADLINE in "-lreadline" "-lreadline $LIBCURSES" "-lreadline -ltermcap" "-lreadline -lncurses" "-lreadline -lcurses"
do
LIBS="$ac_save_LIBS $LIBREADLINE"
AC_TRY_RUN([
/* program */
#include <stdio.h>
#include <stdlib.h>
main(int argc, char **argv)
{
/* Note: don't actually call readline, since it may block;
* We just want to see if it (dynamic) linked in okay.
*/
if (argc == 0) /* never true */
readline(0);
exit(0);
}
],[
# action if true
wi_cv_lib_readline=yes
],[
# action if false
wi_cv_lib_readline=no
],[
# action if cross compiling
wi_cv_lib_readline=no
])
if test "$wi_cv_lib_readline" = yes ; then break ; fi
done
# Now try it again, to be sure it is recent enough.
# rl_function_of_keyseq appeared in version 2.0
#
dnl AC_CHECK_FUNC(rl_function_of_keyseq, [wi_cv_lib_readline=yes],[
dnl wi_cv_lib_readline=no;wi_cv_lib_readline_result="no (it is present but too old to use)"
dnl ])
AC_TRY_LINK([
/* includes */
],[
/* function-body */
readline(0);
rl_function_of_keyseq(0);
],[
wi_cv_lib_readline=yes
],[
wi_cv_lib_readline=no
wi_cv_lib_readline_result="no (it is present but too old to use)"
])
if test "$wi_cv_lib_readline" = no ; then
LIBREADLINE=""
# restore LIBS
LIBS="$ac_save_LIBS"
else
/bin/rm -f readline.ver
touch readline.ver
AC_TRY_RUN([
/* program */
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
extern char *rl_library_version;
main()
{
FILE *fp;
double d;
sscanf(rl_library_version, "%lf", &d);
fp = fopen("readline.ver", "w");
if (fp == NULL) exit(1);
if (fprintf(fp, "%s\n", rl_library_version) < 0) exit(1);
if (fprintf(fp, "%03d\n", (int) (d * 100.0)) < 0) exit(1);
if (fclose(fp) < 0) exit(1);
exit(0);
}
],[
# action if true
rl_library_version=`sed -n 1,1p readline.ver 2>/dev/null`
rlver=`sed -n 2,2p readline.ver 2>/dev/null`
/bin/rm -f readline.ver
],[
# action if false
rl_library_version=''
rlver=''
/bin/rm -f readline.ver
],[
# action if cross compiling
rl_library_version=''
rlver=''
/bin/rm -f readline.ver
])
case "$rlver" in
???)
wi_cv_lib_readline_result="yes, installed version is $rl_library_version"
;;
*)
# Test using current LIBS.
AC_TRY_LINK([
/* includes */
extern int rl_completion_append_character;
],[
/* function-body */
readline(0);
rl_completion_append_character = 0;
],[
rlver="210"
],[
rlver="200"
])
if test "$rlver" = "210" ; then
wi_cv_lib_readline_result="yes, version 2.1 or higher"
else
wi_cv_lib_readline_result="yes, version 2.0"
fi
;;
esac
wi_cv_lib_readline=yes
# restore LIBS
LIBS="$ac_save_LIBS"
fi
AC_MSG_RESULT($wi_cv_lib_readline_result)
AC_SUBST(LIBREADLINE)
if test "$wi_cv_lib_readline" = yes ; then
# Now verify that all the headers are installed.
#
AC_REQUIRE_CPP()
unset ac_cv_header_readline_chardefs_h
unset ac_cv_header_readline_history_h
unset ac_cv_header_readline_keymaps_h
unset ac_cv_header_readline_readline_h
unset ac_cv_header_readline_tilde_h
AC_CHECK_HEADERS([readline/chardefs.h readline/history.h readline/keymaps.h readline/readline.h readline/tilde.h])
for xxwi in \
"$ac_cv_header_readline_chardefs_h" \
"$ac_cv_header_readline_history_h" \
"$ac_cv_header_readline_keymaps_h" \
"$ac_cv_header_readline_readline_h" \
"$ac_cv_header_readline_tilde_h"
do
if test "$xxwi" = no ; then
break
fi
done
if test "$xxwi" = no ; then
AC_MSG_WARN([GNU Readline headers are not installed or could not be found -- GNU Readline will not be used.])
wi_cv_lib_readline=no
wi_cv_lib_readline_result="no (headers not installed)"
else
AC_DEFINE_UNQUOTED(HAVE_LIBREADLINE, $rlver)
fi
fi
])
dnl
dnl
|