Re: [HACKERS] Should libedit be preferred to libreadline? - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [HACKERS] Should libedit be preferred to libreadline?
Date
Msg-id 200512031527.jB3FRbX08195@candle.pha.pa.us
Whole thread Raw
In response to Re: [HACKERS] Should libedit be preferred to libreadline?  ("Michael Paesold" <mpaesold@gmx.at>)
Responses Re: [HACKERS] Should libedit be preferred to libreadline?
List pgsql-patches
Michael Paesold wrote:
> Bruce Momjian wrote:
>
> > I wanted to distinguish libreadline from readline-functionality.  Why is
> > it Readline?
>
> "The GNU Readline Library" is usually referred to as "Readline", not
> "libreadline". The offical name for "libedit" is really "Libedit".
>
> See e.g.:
> http://sourceforge.net/projects/libedit/
> http://cnswww.cns.cwru.edu/~chet/readline/rltop.html
>
> IMHO libreadline does not sound good.

OK, I call it GNU Readline now:

  --with-bonjour          build with Bonjour support
  --with-openssl          build with OpenSSL support
  --with-libedit-preferred  prefer BSD Libedit over GNU Readline
  --without-readline      do not use GNU Readline / BSD Libedit line editing
  --without-zlib          do not use Zlib

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: configure
===================================================================
RCS file: /cvsroot/pgsql/configure,v
retrieving revision 1.462
diff -c -c -r1.462 configure
*** configure    5 Nov 2005 16:42:00 -0000    1.462
--- configure    3 Dec 2005 15:25:44 -0000
***************
*** 890,896 ****
    --with-pam              build with PAM support
    --with-bonjour          build with Bonjour support
    --with-openssl          build with OpenSSL support
!   --without-readline      do not use Readline
    --without-zlib          do not use Zlib
    --with-gnu-ld           assume the C compiler uses GNU ld [default=no]

--- 890,897 ----
    --with-pam              build with PAM support
    --with-bonjour          build with Bonjour support
    --with-openssl          build with OpenSSL support
!   --with-libedit-preferred  prefer BSD Libedit over GNU Readline
!   --without-readline      do not use GNU Readline / BSD Libedit line editing
    --without-zlib          do not use Zlib
    --with-gnu-ld           assume the C compiler uses GNU ld [default=no]

***************
*** 3772,3777 ****
--- 3773,3809 ----


  #
+ # Prefer libedit
+ #
+
+
+
+ # Check whether --with-libedit-preferred or --without-libedit-preferred was given.
+ if test "${with_libedit_preferred+set}" = set; then
+   withval="$with_libedit_preferred"
+
+   case $withval in
+     yes)
+       :
+       ;;
+     no)
+       :
+       ;;
+     *)
+       { { echo "$as_me:$LINENO: error: no argument expected for --with-libedit-preferred option" >&5
+ echo "$as_me: error: no argument expected for --with-libedit-preferred option" >&2;}
+    { (exit 1); exit 1; }; }
+       ;;
+   esac
+
+ else
+   with_libedit_preferred=no
+
+ fi;
+
+
+
+ #
  # Readline
  #

***************
*** 6490,6504 ****

  if test "$with_readline" = yes; then

- echo "$as_me:$LINENO: checking for readline" >&5
- echo $ECHO_N "checking for readline... $ECHO_C" >&6

  if test "${pgac_cv_check_readline+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    pgac_cv_check_readline=no
  pgac_save_LIBS=$LIBS
! for pgac_rllib in -lreadline -ledit ; do
    for pgac_lib in "" " -ltermcap" " -lncurses" " -lcurses" ; do
      LIBS="${pgac_rllib}${pgac_lib} $pgac_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
--- 6522,6540 ----

  if test "$with_readline" = yes; then


  if test "${pgac_cv_check_readline+set}" = set; then
    echo $ECHO_N "(cached) $ECHO_C" >&6
  else
    pgac_cv_check_readline=no
  pgac_save_LIBS=$LIBS
! if test x"$with_libedit_preferred" != x"yes"
! then    READLINE_ORDER="-lreadline -ledit"
! else    READLINE_ORDER="-ledit -lreadline"
! fi
! for pgac_rllib in $READLINE_ORDER ; do
!   echo "$as_me:$LINENO: checking for ${pgac_rllib}" >&5
! echo $ECHO_N "checking for ${pgac_rllib}... $ECHO_C" >&6
    for pgac_lib in "" " -ltermcap" " -lncurses" " -lcurses" ; do
      LIBS="${pgac_rllib}${pgac_lib} $pgac_save_LIBS"
      cat >conftest.$ac_ext <<_ACEOF
***************
*** 6557,6563 ****
        esac

        pgac_cv_check_readline="${pgac_rllib}${pgac_lib}"
!       break 2

  else
    echo "$as_me: failed program was:" >&5
--- 6593,6599 ----
        esac

        pgac_cv_check_readline="${pgac_rllib}${pgac_lib}"
!       break

  else
    echo "$as_me: failed program was:" >&5
***************
*** 6567,6590 ****
  rm -f conftest.err conftest.$ac_objext \
        conftest$ac_exeext conftest.$ac_ext
    done
  done
  LIBS=$pgac_save_LIBS

  fi

  if test "$pgac_cv_check_readline" != no ; then

  cat >>confdefs.h <<\_ACEOF
  #define HAVE_LIBREADLINE 1
  _ACEOF

-   LIBS="$pgac_cv_check_readline $LIBS"
-   echo "$as_me:$LINENO: result: yes ($pgac_cv_check_readline)" >&5
- echo "${ECHO_T}yes ($pgac_cv_check_readline)" >&6
- else
-   echo "$as_me:$LINENO: result: no" >&5
- echo "${ECHO_T}no" >&6
  fi
    if test x"$pgac_cv_check_readline" = x"no"; then
      { { echo "$as_me:$LINENO: error: readline library not found
  If you have readline already installed, see config.log for details on the
--- 6603,6631 ----
  rm -f conftest.err conftest.$ac_objext \
        conftest$ac_exeext conftest.$ac_ext
    done
+   if test "$pgac_cv_check_readline" != no ; then
+     echo "$as_me:$LINENO: result: yes ($pgac_cv_check_readline)" >&5
+ echo "${ECHO_T}yes ($pgac_cv_check_readline)" >&6
+     break
+   else
+     echo "$as_me:$LINENO: result: no" >&5
+ echo "${ECHO_T}no" >&6
+   fi
  done
  LIBS=$pgac_save_LIBS

  fi

  if test "$pgac_cv_check_readline" != no ; then
+   LIBS="$pgac_cv_check_readline $LIBS"

  cat >>confdefs.h <<\_ACEOF
  #define HAVE_LIBREADLINE 1
  _ACEOF

  fi
+
+
    if test x"$pgac_cv_check_readline" = x"no"; then
      { { echo "$as_me:$LINENO: error: readline library not found
  If you have readline already installed, see config.log for details on the
Index: configure.in
===================================================================
RCS file: /cvsroot/pgsql/configure.in,v
retrieving revision 1.432
diff -c -c -r1.432 configure.in
*** configure.in    5 Nov 2005 16:42:01 -0000    1.432
--- configure.in    3 Dec 2005 15:25:45 -0000
***************
*** 468,477 ****


  #
  # Readline
  #
  PGAC_ARG_BOOL(with, readline, yes,
!               [  --without-readline      do not use Readline])
  # readline on MinGW has problems with backslashes in psql and other bugs.
  # This is particularly a problem with non-US code pages.
  # Therefore disable its use until we understand the cause. 2004-07-20
--- 468,484 ----


  #
+ # Prefer libedit
+ #
+ PGAC_ARG_BOOL(with, libedit-preferred, no,
+               [  --with-libedit-preferred  prefer BSD Libedit over GNU Readline])
+
+
+ #
  # Readline
  #
  PGAC_ARG_BOOL(with, readline, yes,
!               [  --without-readline      do not use GNU Readline / BSD Libedit line editing])
  # readline on MinGW has problems with backslashes in psql and other bugs.
  # This is particularly a problem with non-US code pages.
  # Therefore disable its use until we understand the cause. 2004-07-20
Index: config/programs.m4
===================================================================
RCS file: /cvsroot/pgsql/config/programs.m4,v
retrieving revision 1.18
diff -c -c -r1.18 programs.m4
*** config/programs.m4    2 Dec 2004 20:04:19 -0000    1.18
--- config/programs.m4    3 Dec 2005 15:25:47 -0000
***************
*** 78,89 ****

  AC_DEFUN([PGAC_CHECK_READLINE],
  [AC_REQUIRE([AC_CANONICAL_HOST])
- AC_MSG_CHECKING([for readline])

  AC_CACHE_VAL([pgac_cv_check_readline],
  [pgac_cv_check_readline=no
  pgac_save_LIBS=$LIBS
! for pgac_rllib in -lreadline -ledit ; do
    for pgac_lib in "" " -ltermcap" " -lncurses" " -lcurses" ; do
      LIBS="${pgac_rllib}${pgac_lib} $pgac_save_LIBS"
      AC_TRY_LINK_FUNC([readline], [[
--- 78,93 ----

  AC_DEFUN([PGAC_CHECK_READLINE],
  [AC_REQUIRE([AC_CANONICAL_HOST])

  AC_CACHE_VAL([pgac_cv_check_readline],
  [pgac_cv_check_readline=no
  pgac_save_LIBS=$LIBS
! if test x"$with_libedit_preferred" != x"yes"
! then    READLINE_ORDER="-lreadline -ledit"
! else    READLINE_ORDER="-ledit -lreadline"
! fi
! for pgac_rllib in $READLINE_ORDER ; do
!   AC_MSG_CHECKING([for ${pgac_rllib}])
    for pgac_lib in "" " -ltermcap" " -lncurses" " -lcurses" ; do
      LIBS="${pgac_rllib}${pgac_lib} $pgac_save_LIBS"
      AC_TRY_LINK_FUNC([readline], [[
***************
*** 98,117 ****
        esac

        pgac_cv_check_readline="${pgac_rllib}${pgac_lib}"
!       break 2
      ]])
    done
  done
  LIBS=$pgac_save_LIBS
  ])[]dnl AC_CACHE_VAL

  if test "$pgac_cv_check_readline" != no ; then
-   AC_DEFINE(HAVE_LIBREADLINE, 1, [Define if you have a function readline library])
    LIBS="$pgac_cv_check_readline $LIBS"
!   AC_MSG_RESULT([yes ($pgac_cv_check_readline)])
! else
!   AC_MSG_RESULT(no)
! fi])# PGAC_CHECK_READLINE



--- 102,126 ----
        esac

        pgac_cv_check_readline="${pgac_rllib}${pgac_lib}"
!       break
      ]])
    done
+   if test "$pgac_cv_check_readline" != no ; then
+     AC_MSG_RESULT([yes ($pgac_cv_check_readline)])
+     break
+   else
+     AC_MSG_RESULT(no)
+   fi
  done
  LIBS=$pgac_save_LIBS
  ])[]dnl AC_CACHE_VAL

  if test "$pgac_cv_check_readline" != no ; then
    LIBS="$pgac_cv_check_readline $LIBS"
!   AC_DEFINE(HAVE_LIBREADLINE, 1, [Define if you have a function readline library])
! fi
!
! ])# PGAC_CHECK_READLINE



Index: doc/src/sgml/installation.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v
retrieving revision 1.249
diff -c -c -r1.249 installation.sgml
*** doc/src/sgml/installation.sgml    5 Nov 2005 00:04:04 -0000    1.249
--- doc/src/sgml/installation.sgml    3 Dec 2005 15:25:49 -0000
***************
*** 50,56 ****
    <para>
     In general, a modern Unix-compatible platform should be able to run
     <productname>PostgreSQL</>.
!     The platforms that had received specific testing at the
     time of release are listed in <xref linkend="supported-platforms">
     below. In the <filename>doc</> subdirectory of the distribution
     there are several platform-specific <acronym>FAQ</> documents you
--- 50,56 ----
    <para>
     In general, a modern Unix-compatible platform should be able to run
     <productname>PostgreSQL</>.
!    The platforms that had received specific testing at the
     time of release are listed in <xref linkend="supported-platforms">
     below. In the <filename>doc</> subdirectory of the distribution
     there are several platform-specific <acronym>FAQ</> documents you
***************
*** 107,122 ****
        </indexterm>

        The <acronym>GNU</> <productname>Readline</> library (for
!       comfortable line editing and command history retrieval) will be
!       used by default.  If you don't want to use it then you must
!       specify the <option>--without-readline</option> option for
!       <filename>configure</>.  (On <productname>NetBSD</productname>,
!       the <filename>libedit</filename> library is
!       <productname>Readline</productname>-compatible and is used if
!       <filename>libreadline</filename> is not found.)  If you are using
!       a package-based Linux distribution, be aware that you need both
!       the <literal>readline</> and <literal>readline-devel</> packages,
!       if those are separate in your distribution.
       </para>
      </listitem>

--- 107,126 ----
        </indexterm>

        The <acronym>GNU</> <productname>Readline</> library (for
!       simple line editing and command history retrieval) is
!       used by default. If you don't want to use it then you must specify
!       the <option>--without-readline</option> option for
!       <filename>configure</>. As an alternative, you can often use the
!       BSD-licensed <filename>libedit</filename> library, originally
!       developed on <productname>NetBSD</productname>. The
!       <filename>libedit</filename> library is
!       GNU <productname>Readline</productname>-compatible and is used if
!       <filename>libreadline</filename> is not found, or if
!       <option>--with-libedit-preferred</option> is used as an
!       option to <filename>configure</>. If you are using a package-based
!       Linux distribution, be aware that you need both the
!       <literal>readline</> and <literal>readline-devel</> packages, if
!       those are separate in your distribution.
       </para>
      </listitem>

***************
*** 858,863 ****
--- 862,877 ----
        </varlistentry>

        <varlistentry>
+        <term><option>--with-libedit-preferred</option></term>
+        <listitem>
+         <para>
+          Favors the use of the BSD-licensed <application>libedit</> library
+          rather than GPL-licensed <application>Readline</>.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
         <term><option>--without-readline</option></term>
         <listitem>
          <para>

pgsql-patches by date:

Previous
From: "Michael Paesold"
Date:
Subject: Re: [HACKERS] Should libedit be preferred to libreadline?
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] snprintf() argument reordering not working under Windows