summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Watkins <krakjoe@php.net>2019-03-27 09:58:40 +0100
committerJoe Watkins <krakjoe@php.net>2019-03-27 10:02:42 +0100
commit7af270eb284c3bd00f6e5d80fbb0a2de9f89b693 (patch)
tree722eeb524a33f555a4571aa0c65fa020ac9f3056
parent6d3a2b46930057524c1eebfa574a4869e3f9dd28 (diff)
downloadphp-git-7af270eb284c3bd00f6e5d80fbb0a2de9f89b693.tar.gz
Fix #77805 phpdbg build fails when readline is shared
-rw-r--r--NEWS1
-rw-r--r--sapi/phpdbg/config.m416
-rw-r--r--sapi/phpdbg/phpdbg.h14
-rw-r--r--sapi/phpdbg/phpdbg_cmd.c7
-rw-r--r--sapi/phpdbg/phpdbg_prompt.c20
5 files changed, 38 insertions, 20 deletions
diff --git a/NEWS b/NEWS
index 1711079d21..81d172797b 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,7 @@ PHP NEWS
. Fixed bug #76801 (too many open files). (alekitto)
. Fixed bug #77800 (phpdbg segfaults on listing some conditional breakpoints).
(krakjoe)
+ . Fixed bug #77805 (phpdbg build fails when readline is shared). (krakjoe)
- Reflection:
. Fixed bug #77772 (ReflectionClass::getMethods(null) doesn't work). (Nikita)
diff --git a/sapi/phpdbg/config.m4 b/sapi/phpdbg/config.m4
index 223c1827f1..d6765e1b19 100644
--- a/sapi/phpdbg/config.m4
+++ b/sapi/phpdbg/config.m4
@@ -11,6 +11,9 @@ PHP_ARG_ENABLE(phpdbg-webhelper, for phpdbg web SAPI support,
PHP_ARG_ENABLE(phpdbg-debug, for phpdbg debug build,
[ --enable-phpdbg-debug Build phpdbg in debug mode], no, no)
+PHP_ARG_ENABLE(phpdbg-readline, for phpdbg readline support,
+[ --enable-phpdbg-readline Enable readline support in phpdbg (depends on static ext/readline)], yes, yes)
+
if test "$BUILD_PHPDBG" = "" && test "$PHP_PHPDBG" != "no"; then
AC_HEADER_TIOCGWINSZ
AC_DEFINE(HAVE_PHPDBG, 1, [ ])
@@ -24,8 +27,17 @@ if test "$BUILD_PHPDBG" = "" && test "$PHP_PHPDBG" != "no"; then
PHP_PHPDBG_CFLAGS="-D_GNU_SOURCE -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"
PHP_PHPDBG_FILES="phpdbg.c phpdbg_parser.c phpdbg_lexer.c phpdbg_prompt.c phpdbg_help.c phpdbg_break.c phpdbg_print.c phpdbg_bp.c phpdbg_opcode.c phpdbg_list.c phpdbg_utils.c phpdbg_info.c phpdbg_cmd.c phpdbg_set.c phpdbg_frame.c phpdbg_watch.c phpdbg_btree.c phpdbg_sigsafe.c phpdbg_wait.c phpdbg_io.c phpdbg_eol.c phpdbg_out.c"
- if test "$PHP_READLINE" != "no" -o "$PHP_LIBEDIT" != "no"; then
- PHPDBG_EXTRA_LIBS="$PHP_READLINE_LIBS"
+ AC_MSG_CHECKING([for phpdbg and readline integration])
+ if test "$PHP_PHPDBG_READLINE" = "yes"; then
+ if test "$PHP_READLINE" != "no" -o "$PHP_LIBEDIT" != "no"; then
+ AC_DEFINE(HAVE_PHPDBG_READLINE, 1, [ ])
+ PHPDBG_EXTRA_LIBS="$PHP_READLINE_LIBS"
+ AC_MSG_RESULT([ok])
+ else
+ AC_MSG_RESULT([readline is not available])
+ fi
+ else
+ AC_MSG_RESULT([disabled])
fi
PHP_SUBST(PHP_PHPDBG_CFLAGS)
diff --git a/sapi/phpdbg/phpdbg.h b/sapi/phpdbg/phpdbg.h
index 980db28be9..e22a968d96 100644
--- a/sapi/phpdbg/phpdbg.h
+++ b/sapi/phpdbg/phpdbg.h
@@ -83,12 +83,14 @@
#define zend_hash_str_add(...) zend_hash_str_add_tmp(__VA_ARGS__)
#endif
-#ifdef HAVE_LIBREADLINE
-# include <readline/readline.h>
-# include <readline/history.h>
-#endif
-#ifdef HAVE_LIBEDIT
-# include <editline/readline.h>
+#ifdef HAVE_PHPDBG_READLINE
+# ifdef HAVE_LIBREADLINE
+# include <readline/readline.h>
+# include <readline/history.h>
+# endif
+# ifdef HAVE_LIBEDIT
+# include <editline/readline.h>
+# endif
#endif
/* {{{ remote console headers */
diff --git a/sapi/phpdbg/phpdbg_cmd.c b/sapi/phpdbg/phpdbg_cmd.c
index b4a878818b..e93e92190e 100644
--- a/sapi/phpdbg/phpdbg_cmd.c
+++ b/sapi/phpdbg/phpdbg_cmd.c
@@ -751,16 +751,15 @@ PHPDBG_API char *phpdbg_read_input(char *buffered) /* {{{ */
}
if (buffered == NULL) {
-#define USE_LIB_STAR (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDIT))
+#ifdef HAVE_PHPDBG_READLINE
/* note: EOF makes readline write prompt again in local console mode - and ignored if compiled without readline */
-#if USE_LIB_STAR
if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE) || !isatty(PHPDBG_G(io)[PHPDBG_STDIN].fd))
#endif
{
phpdbg_write("prompt", "", "%s", phpdbg_get_prompt());
phpdbg_consume_stdin_line(cmd = buf);
}
-#if USE_LIB_STAR
+#ifdef HAVE_PHPDBG_READLINE
else {
cmd = readline(phpdbg_get_prompt());
PHPDBG_G(last_was_newline) = 1;
@@ -779,7 +778,7 @@ PHPDBG_API char *phpdbg_read_input(char *buffered) /* {{{ */
buffer = estrdup(cmd);
-#if USE_LIB_STAR
+#ifdef HAVE_PHPDBG_READLINE
if (!buffered && cmd && !(PHPDBG_G(flags) & PHPDBG_IS_REMOTE) && isatty(PHPDBG_G(io)[PHPDBG_STDIN].fd)) {
free(cmd);
}
diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c
index 70c02221aa..fd668fcfec 100644
--- a/sapi/phpdbg/phpdbg_prompt.c
+++ b/sapi/phpdbg/phpdbg_prompt.c
@@ -1158,15 +1158,19 @@ PHPDBG_COMMAND(info) /* {{{ */
{
phpdbg_out("Execution Context Information\n\n");
phpdbg_xml("<printinfo %r>");
-#ifdef HAVE_LIBREADLINE
- phpdbg_writeln("info", "readline=\"yes\"", "Readline yes");
+#ifdef HAVE_PHPDBG_READLINE
+# ifdef HAVE_LIBREADLINE
+ phpdbg_writeln("info", "readline=\"yes\"", "Readline yes");
+# else
+ phpdbg_writeln("info", "readline=\"no\"", "Readline no");
+# endif
+# ifdef HAVE_LIBEDIT
+ phpdbg_writeln("info", "libedit=\"yes\"", "Libedit yes");
+# else
+ phpdbg_writeln("info", "libedit=\"no\"", "Libedit no");
+# endif
#else
- phpdbg_writeln("info", "readline=\"no\"", "Readline no");
-#endif
-#ifdef HAVE_LIBEDIT
- phpdbg_writeln("info", "libedit=\"yes\"", "Libedit yes");
-#else
- phpdbg_writeln("info", "libedit=\"no\"", "Libedit no");
+ phpdbg_writeln("info", "readline=\"unavailable\"", "Readline unavailable");
#endif
phpdbg_writeln("info", "context=\"%s\"", "Exec %s", PHPDBG_G(exec) ? PHPDBG_G(exec) : "none");