]> www.ginac.de Git - ginac.git/commitdiff
Synced to ginac_1-3:
authorJens Vollinga <vollinga@thep.physik.uni-mainz.de>
Mon, 5 Feb 2007 20:11:40 +0000 (20:11 +0000)
committerJens Vollinga <vollinga@thep.physik.uni-mainz.de>
Mon, 5 Feb 2007 20:11:40 +0000 (20:11 +0000)
Fixed libreadline version detection [A.Sheplyakov]

INSTALL
acinclude.m4
ginsh/ginsh_parser.yy

diff --git a/INSTALL b/INSTALL
index 8d0b703c885d57d24c4ce9e36b611ac2e6ebab41..2c60d2d365ba3388da73539f7eac2a6e197adf31 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -104,12 +104,13 @@ install CLN properly on your system before continuing with GiNaC.
 Problems building ginsh
 -----------------------
 
 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
 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
 -------------------------------------------
 
 Problems with missing standard header files
 -------------------------------------------
index 45ea8dae4661662cbf5709a4b82a96b881c3223d..11c80399c6b4200c18d8f1879a3a46f29b7e78c4 100644 (file)
@@ -24,8 +24,15 @@ int main()
     fprintf(fd, "%s\n", rl_library_version);
     fclose(fd);
     return 0;
     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
 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/'`
   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/'`
index f2aba693525f423ad6436decc0fc6a270f876453..ae55f4c89e76a8083c02c966fc484a718e7c0e7e 100644 (file)
@@ -45,6 +45,7 @@
 
 #define YYERROR_VERBOSE 1
 
 
 #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)
 // 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
 #else
 #define GINAC_RL_COMPLETER_CAST(a) (a)
 #endif
+#endif // REALLY_HAVE_LIBREADLINE
 
 // Expression stack for %, %% and %%%
 static void push(const ex &e);
 
 // 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;
 }
 
        return NULL;
 }
 
+#ifdef REALLY_HAVE_LIBREADLINE
 static char **fcn_completion(const char *text, int start, int end)
 {
        if (rl_line_buffer[0] == '!') {
 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
        }
 }
+#endif // REALLY_HAVE_LIBREADLINE
 
 void greeting(void)
 {
 
 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");
 
        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)
        // 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
        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;
 
        // Init input file list, open first file
        num_files = argc - 1;