dnl config.m4 for extension readline
dnl don't forget to call PHP_EXTENSION(readline)
+PHP_ARG_WITH(libedit,for libedit readline replacement,
+[ --with-libedit[=DIR] Include libedit readline replacement.])
PHP_ARG_WITH(readline,for readline support,
[ --with-readline[=DIR] Include readline support. DIR is the readline
AC_DEFINE(HAVE_LIBREADLINE, 1, [ ])
PHP_EXTENSION(readline, $ext_shared)
fi
+
+if test "$PHP_LIBEDIT" != "no"; then
+ for i in /usr/local /usr $PHP_LIBEDIT; do
+ if test -f $i/include/readline/readline.h; then
+ LIBEDIT_DIR=$i
+ fi
+ done
+
+ if test -z "$LIBEDIT_DIR"; then
+ AC_MSG_ERROR(Please reinstall libedit - I cannot find readline.h)
+ fi
+ AC_ADD_INCLUDE($LIBEDIT_DIR/include)
+
+ AC_CHECK_LIB(ncurses, tgetent, [
+ AC_ADD_LIBRARY_WITH_PATH(ncurses,,READLINE__SHARED_LIBADD)],[
+ AC_CHECK_LIB(termcap, tgetent, [
+ AC_ADD_LIBRARY_WITH_PATH(termcap,,READLINE_SHARED_LIBADD)])
+ ])
+
+ AC_ADD_LIBRARY_WITH_PATH(edit, $LIBEDIT_DIR/lib, READLINE_SHARED_LIBADD)
+ PHP_SUBST(READLINE_SHARED_LIBADD)
+
+ AC_DEFINE(HAVE_LIBEDIT, 1, [ ])
+ PHP_EXTENSION(readline, $ext_shared)
+fi
\ No newline at end of file
#include "php.h"
#include "php_readline.h"
-#if HAVE_LIBREADLINE
+#if HAVE_LIBREADLINE || HAVE_LIBEDIT
#include <readline/readline.h>
+#ifndef HAVE_LIBEDIT
#include <readline/history.h>
+#endif
PHP_FUNCTION(readline);
PHP_FUNCTION(readline_add_history);
PHP_FE(readline_info, NULL)
PHP_FE(readline_add_history, NULL)
PHP_FE(readline_clear_history, NULL)
+#ifdef HAVE_READLINE
PHP_FE(readline_list_history, NULL)
+#else
+ PHP_FALIAS(readline_list_history, warn_not_available, NULL)
+#endif
PHP_FE(readline_read_history, NULL)
PHP_FE(readline_write_history, NULL)
PHP_FE(readline_completion_function,NULL)
add_assoc_string(return_value,"line_buffer",SAFE_STRING(rl_line_buffer),1);
add_assoc_long(return_value,"point",rl_point);
add_assoc_long(return_value,"end",rl_end);
+#ifdef HAVE_READLINE
add_assoc_long(return_value,"mark",rl_mark);
add_assoc_long(return_value,"done",rl_done);
add_assoc_long(return_value,"pending_input",rl_pending_input);
+ add_assoc_string(return_value,"prompt",SAFE_STRING(rl_prompt),1);
+ add_assoc_string(return_value,"terminal_name",SAFE_STRING(rl_terminal_name),1);
+#endif
#if HAVE_ERASE_EMPTY_LINE
add_assoc_long(return_value,"erase_empty_line",rl_erase_empty_line);
#endif
- add_assoc_string(return_value,"prompt",SAFE_STRING(rl_prompt),1);
add_assoc_string(return_value,"library_version",SAFE_STRING(rl_library_version),1);
- add_assoc_string(return_value,"terminal_name",SAFE_STRING(rl_terminal_name),1);
add_assoc_string(return_value,"readline_name",SAFE_STRING(rl_readline_name),1);
} else {
convert_to_string_ex(what);
RETVAL_LONG(rl_point);
} else if (! strcasecmp((*what)->value.str.val,"end")) {
RETVAL_LONG(rl_end);
+#ifdef HAVE_READLINE
} else if (! strcasecmp((*what)->value.str.val,"mark")) {
RETVAL_LONG(rl_mark);
} else if (! strcasecmp((*what)->value.str.val,"done")) {
rl_pending_input = (*value)->value.str.val[0];
}
RETVAL_LONG(oldval);
+ } else if (! strcasecmp((*what)->value.str.val,"prompt")) {
+ RETVAL_STRING(SAFE_STRING(rl_prompt),1);
+ } else if (! strcasecmp((*what)->value.str.val,"terminal_name")) {
+ RETVAL_STRING(SAFE_STRING(rl_terminal_name),1);
+#endif
#if HAVE_ERASE_EMPTY_LINE
} else if (! strcasecmp((*what)->value.str.val,"erase_empty_line")) {
oldval = rl_erase_empty_line;
}
RETVAL_LONG(oldval);
#endif
- } else if (! strcasecmp((*what)->value.str.val,"prompt")) {
- RETVAL_STRING(SAFE_STRING(rl_prompt),1);
} else if (! strcasecmp((*what)->value.str.val,"library_version")) {
RETVAL_STRING(SAFE_STRING(rl_library_version),1);
- } else if (! strcasecmp((*what)->value.str.val,"terminal_name")) {
- RETVAL_STRING(SAFE_STRING(rl_terminal_name),1);
} else if (! strcasecmp((*what)->value.str.val,"readline_name")) {
oldstr = rl_readline_name;
if (ac == 2) {
/* }}} */
/* {{{ proto array readline_list_history(void)
Lists the history */
+#ifdef HAVE_READLINE
PHP_FUNCTION(readline_list_history)
{
HIST_ENTRY **history;
}
}
}
-
+#endif
/* }}} */
/* {{{ proto int readline_read_history([string filename] [, int from] [,int to])
Reads the history */