Skip to content

Commit

Permalink
Fix #77805 phpdbg build fails when readline is shared
Browse files Browse the repository at this point in the history
  • Loading branch information
krakjoe committed Mar 27, 2019
1 parent 6d3a2b4 commit 7af270e
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 20 deletions.
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
16 changes: 14 additions & 2 deletions sapi/phpdbg/config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -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, [ ])
Expand All @@ -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)
Expand Down
14 changes: 8 additions & 6 deletions sapi/phpdbg/phpdbg.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
7 changes: 3 additions & 4 deletions sapi/phpdbg/phpdbg_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Expand Down
20 changes: 12 additions & 8 deletions sapi/phpdbg/phpdbg_prompt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down

0 comments on commit 7af270e

Please sign in to comment.