[GiNaC-list] pending bug fixes [Was: Parser problems once again
(bad version of bison)]
Sheplyakov Alexei
varg at theor.jinr.ru
Wed Jan 31 13:20:43 CET 2007
Hello!
On Tue, Jan 30, 2007 at 03:42:59PM +0100, Jens Vollinga wrote:
> >I propose to make new bugfix-only release (e.g. regenerate
> >input_parser.cc with "known-good" bison version)...
>
> Okay, I will do it. Are there any pending patches/bug fixes to be
> submitted soon?
[PATCH] Fix libreadline version detection.
Some broken libreadline versions (in particular one shipped with Mac OS X)
report non-numeric rl_library_version. Reject such libraries and
compile ginsh without libreadline.
---
INSTALL | 5 +++--
acinclude.m4 | 9 ++++++++-
ginsh/ginsh_parser.yy | 6 ++++++
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/INSTALL b/INSTALL
index 8d0b703..2c60d2d 100644
--- a/INSTALL
+++ b/INSTALL
@@ -104,12 +104,13 @@ install CLN properly on your system before continuing with GiNaC.
Problems building ginsh
-----------------------
-The most common reason why this doesn't succeed is the absence of
+The most common reason why this doesn't succeed is the absence of GNU
libreadline and/or the corresponding header files. Depending on what your
system/distribution is, you will have to install a package called
libreadline and maybe libreadline-dev. If your system's vendor doesn't
supply such packages, go to <ftp://ftp.gnu.org/gnu/readline/> and compile
-it yourself.
+it yourself. Note that non-GNU versions of libreadline (in particular
+one shipped with Mac OS X) are not supported at the moment.
Problems with missing standard header files
-------------------------------------------
diff --git a/acinclude.m4 b/acinclude.m4
index 4ab1387..64f4ec3 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -24,8 +24,15 @@ int main()
fprintf(fd, "%s\n", rl_library_version);
fclose(fd);
return 0;
-}], ginac_cv_rlversion=`cat 'conftest.out'`, ginac_cv_rlversion='unknown', ginac_cv_rlversion='4.2')])
+}], [
+dnl Some non-GNU readline implementations have non-numeric rl_library_version
+ginac_cv_rlversion=`sed -e 's/[^0-9.]//g' 'conftest.out'`], [ ginac_cv_rlversion='unknown'], [ ginac_cv_rlversion='4.2'])])
+if test -z "$ginac_cv_rlversion"; then
+ GINAC_WARNING([Unsupported version of libreadline.])
+ ginac_cv_rlversion='unknown'
+fi
if test "x${ginac_cv_rlversion}" != "xunknown"; then
+ AC_DEFINE(REALLY_HAVE_LIBREADLINE, ,[Define if GNU libreadline is installed])
RL_VERSION_MAJOR=`echo ${ginac_cv_rlversion} | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
AC_DEFINE_UNQUOTED(GINAC_RL_VERSION_MAJOR, $RL_VERSION_MAJOR, [Major version of installed readline library.])
RL_VERSION_MINOR=`echo ${ginac_cv_rlversion} | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
diff --git a/ginsh/ginsh_parser.yy b/ginsh/ginsh_parser.yy
index b252609..954d54e 100644
--- a/ginsh/ginsh_parser.yy
+++ b/ginsh/ginsh_parser.yy
@@ -45,6 +45,7 @@
#define YYERROR_VERBOSE 1
+#ifdef REALLY_HAVE_LIBREADLINE
// Original readline settings
static int orig_completion_append_character;
#if (GINAC_RL_VERSION_MAJOR < 4) || (GINAC_RL_VERSION_MAJOR == 4 && GINAC_RL_VERSION_MINOR < 2)
@@ -58,6 +59,7 @@ static const char *orig_basic_word_break_characters;
#else
#define GINAC_RL_COMPLETER_CAST(a) (a)
#endif
+#endif // REALLY_HAVE_LIBREADLINE
// Expression stack for %, %% and %%%
static void push(const ex &e);
@@ -850,6 +852,7 @@ static char *fcn_generator(const char *text, int state)
return NULL;
}
+#ifdef REALLY_HAVE_LIBREADLINE
static char **fcn_completion(const char *text, int start, int end)
{
if (rl_line_buffer[0] == '!') {
@@ -874,6 +877,7 @@ static char **fcn_completion(const char *text, int start, int end)
#endif
}
}
+#endif // REALLY_HAVE_LIBREADLINE
void greeting(void)
{
@@ -917,6 +921,7 @@ int main(int argc, char **argv)
insert_help("print_latex", "print_latex(expression) - prints a LaTeX representation of the given expression");
insert_help("print_csrc", "print_csrc(expression) - prints a C source code representation of the given expression");
+#ifdef REALLY_HAVE_LIBREADLINE
// Init readline completer
rl_readline_name = argv[0];
#if (GINAC_RL_VERSION_MAJOR < 4) || (GINAC_RL_VERSION_MAJOR == 4 && GINAC_RL_VERSION_MINOR < 2)
@@ -926,6 +931,7 @@ int main(int argc, char **argv)
#endif
orig_completion_append_character = rl_completion_append_character;
orig_basic_word_break_characters = rl_basic_word_break_characters;
+#endif
// Init input file list, open first file
num_files = argc - 1;
----
Best regards,
Alexei
--
All science is either physics or stamp collecting.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-list/attachments/20070131/e159bc07/attachment.pgp
More information about the GiNaC-list
mailing list