Thread: psql and Gnu readline

psql and Gnu readline

From
Erich
Date:
I've just installed PostgreSQL 7.02 on my OpenBSD box.  Everything is
working fine.  I made sure to link in gnu readline in psql.  It seems
to be working, because I can edit a line.  For instance, Ctl-A takes
me to the beginning of a line, Ctl-K kills it, etc.  However, Ctl-P
doesn't go up a line, so I can't access previous lines, and lines are
not saved in the .psql_history file which is mentioned on the man
page.

Any idea what to do?  Line editing is so handy to have in something
like this.

Thanks,

e

Re: psql and Gnu readline

From
Chris Bitmead
Date:
Erich wrote:
>
> I've just installed PostgreSQL 7.02 on my OpenBSD box.  Everything is
> working fine.  I made sure to link in gnu readline in psql.  It seems
> to be working, because I can edit a line.  For instance, Ctl-A takes
> me to the beginning of a line, Ctl-K kills it, etc.  However, Ctl-P
> doesn't go up a line, so I can't access previous lines, and lines are
> not saved in the .psql_history file which is mentioned on the man
> page.
>
> Any idea what to do?  Line editing is so handy to have in something
> like this.

Strange, it works for me. I don't suppose you have a .inputrc
stuffing things up?

Re: psql and Gnu readline

From
Holger Klawitter
Date:
> > me to the beginning of a line, Ctl-K kills it, etc.  However, Ctl-P
> > doesn't go up a line, so I can't access previous lines, and lines are
> > not saved in the .psql_history file which is mentioned on the man
> > page.

Did the configure script find using_history in your readline library?

Regards,
Mit freundlichem Gruß,
    Holger Klawitter
--
Holger Klawitter                                    +49 (0)251 484 0637
holger@klawitter.de                            http://www.klawitter.de/



Re: psql and Gnu readline

From
Tom Lane
Date:
> Erich wrote:
>> I've just installed PostgreSQL 7.02 on my OpenBSD box.  Everything is
>> working fine.  I made sure to link in gnu readline in psql.  It seems
>> to be working, because I can edit a line.  For instance, Ctl-A takes
>> me to the beginning of a line, Ctl-K kills it, etc.  However, Ctl-P
>> doesn't go up a line, so I can't access previous lines, and lines are
>> not saved in the .psql_history file which is mentioned on the man
>> page.

IIRC the "history" facility is separate from the core of libreadline.
You may not have libhistory installed, or at least our configure script
failed to notice that it's there.  Check the xxxHISTORY defines in
config.h.

            regards, tom lane

Re: psql and Gnu readline

From
Giles Lean
Date:
> Did the configure script find using_history in your readline library?

Mmm, since the platform is OpenBSD did configure really find the
readline library, or did it find libedit pretending to be readline?
(NetBSD's libedit is just about good enough to satisfy psql; I don't
know if OpenBSD has picked up the libedit extensions or not though.)

Regards,

Giles



Re: psql and Gnu readline

From
"J.R. Belding"
Date:
I had this same problem.  Thanks to a suggestion from Bruce Momjian, I
noticed that the configure script was not finding the readline
libraries.  I checked, and found that though I did have the readline
package installed, I did not have the readline-devel package installed.
Once I installed that package, the configure script found readline and
after recompiling everything works fine.



Erich wrote:
>
> I've just installed PostgreSQL 7.02 on my OpenBSD box.  Everything is
> working fine.  I made sure to link in gnu readline in psql.  It seems
> to be working, because I can edit a line.  For instance, Ctl-A takes
> me to the beginning of a line, Ctl-K kills it, etc.  However, Ctl-P
> doesn't go up a line, so I can't access previous lines, and lines are
> not saved in the .psql_history file which is mentioned on the man
> page.
>
> Any idea what to do?  Line editing is so handy to have in something
> like this.
>
> Thanks,
>
> e

Figured it out (psql and Gnu readline)

From
Erich
Date:
With some helpful hints from various people, I figured out how to get
this to work, and now my life is more pleasant and meaningful.

Situation: Stock installation of OpenBSD 2.7, with PostgreSQL 7.0.2.
I installed postgres by downloading the source tar and compiling, not
by going through /usr/ports.

Anyway, I'm not sure if OpenBSD ships with readline or whatever, so I
downloaded the latest readline (4.1) and compiled and installed it.  I
then did ./configure in postgres, and recompiled psql, and it still
didn't have history.

Following some sugestions on this group, I figured out the problem.
First, there is no history.h with readline 4.1.  There's
readline/history.h.  So I modified Makefile.global to include that
file.  Also, I had to edit config.h, with several tweaks to various
defines.  I had to tell it that there is no history.h, but there is a
readline/history.h.  I had to put in that there is no history function
in libreadline, and it must also use libhistory.  Etc.

After doing all that, it worked beautifully.  I often have to do a
sequence of slighly varied inserts, etc, and this is much better.

Maybe for the next release, there should be better handling of gnu
readline 4.1?  Or maybe it should come with the package?  Just a
thought.

e


--
This message was my two cents worth.  Please deposit two cents into my
e-gold account by following this link:
http://rootworks.com/twocentsworth.cgi?102861
275A B627 1826 D627 ED35  B8DF 7DDE 4428 0F5C 4454

Re: Figured it out (psql and Gnu readline)

From
Tom Lane
Date:
Erich <hh@cyberpass.net> writes:
> Following some sugestions on this group, I figured out the problem.
> First, there is no history.h with readline 4.1.  There's
> readline/history.h.  So I modified Makefile.global to include that
> file.  Also, I had to edit config.h, with several tweaks to various
> defines.  I had to tell it that there is no history.h, but there is a
> readline/history.h.  I had to put in that there is no history function
> in libreadline, and it must also use libhistory.  Etc.

configure is supposed to handle all that for you ... if it failed
to find the right location of libreadline and associated includes
then the question is why.  You sure you ran configure after installing
the include files?

            regards, tom lane

Re: Figured it out (psql and Gnu readline)

From
Erich
Date:
> configure is supposed to handle all that for you ... if it failed to
> find the right location of libreadline and associated includes then
> the question is why.  You sure you ran configure after installing
> the include files?

I just deleted my postgres tree, and then unpacked it again, and ran
configure again.  libreadline.a and libhistory.a are in
/usr/local/lib/.  readline.h and history.h are in
/usr/local/include/readline/.

I then ran ./configure.

When I look at config.h, I can see that it failed to detect
/usr/local/include/readline/history.h.  Also, I see that it did define
HAVE_HISTORY_IN_READLINE 1 which is incorrect.  I would have to make
the change by hand to the file.

I think it may be a bug.

e

Re: Figured it out (psql and Gnu readline)

From
Tom Lane
Date:
Erich <hh@cyberpass.net> writes:
>> configure is supposed to handle all that for you ... if it failed to
>> find the right location of libreadline and associated includes then
>> the question is why.  You sure you ran configure after installing
>> the include files?

> I just deleted my postgres tree, and then unpacked it again, and ran
> configure again.  libreadline.a and libhistory.a are in
> /usr/local/lib/.  readline.h and history.h are in
> /usr/local/include/readline/.

OK ... my setup has the same files in the same places ...

> I then ran ./configure.

> When I look at config.h, I can see that it failed to detect
> /usr/local/include/readline/history.h.  Also, I see that it did define
> HAVE_HISTORY_IN_READLINE 1 which is incorrect.  I would have to make
> the change by hand to the file.

Well, that's darn peculiar.  configure.in has a test for
readline/history.h, big as life:
    AC_CHECK_HEADERS(readline/history.h)
Does the config.log file show why it failed to find the include?

HAVE_HISTORY_IN_READLINE seems to get defined if libreadline.a contains
a "using_history" symbol:

AC_CHECK_LIB(readline, using_history, AC_DEFINE(HAVE_HISTORY_IN_READLINE),
    AC_CHECK_LIB(history,  main) )


On my setup, which is readline 4.0 if I'm checking the right files,
HAVE_HISTORY_IN_READLINE does get defined, and AFAICT libhistory.a
doesn't get linked, but I most certainly do get history support.

Which readline version are you using?  Maybe the GNU guys rearranged
which functions live in which library.  If so, we probably need
to be probing for a different symbol in libreadline to be compatible
across more libreadline versions ...

            regards, tom lane

Re: Figured it out (psql and Gnu readline)

From
Erich
Date:
> Well, that's darn peculiar.  configure.in has a test for
> readline/history.h, big as life:
>     AC_CHECK_HEADERS(readline/history.h)
> Does the config.log file show why it failed to find the include?

Here's the lines from config.log:

configure:2539: checking for main in -lreadline
configure:2554: gcc -o conftest -O2 -pipe     conftest.c -lreadline  -ltermcap -lcurses  1>&5
configure:2582: checking for using_history in -lreadline
configure:2601: gcc -o conftest -O2 -pipe     conftest.c -lreadline  -lreadline -ltermcap -lcurses  1>&5
configure:3833: checking for history.h
configure:3843: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:3839: history.h: No such file or directory
configure: failed program was:
#line 3838 "configure"
#include "confdefs.h"
#include <history.h>
configure:3873: checking for ieeefp.h
configure:3883: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:3913: checking for limits.h
configure:3923: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:3953: checking for netdb.h
configure:3963: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:3993: checking for netinet/in.h
configure:4003: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4033: checking for readline.h
configure:4043: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4039: readline.h: No such file or directory
configure: failed program was:
#line 4038 "configure"
#include "confdefs.h"
#include <readline.h>
configure:4073: checking for readline/history.h
configure:4083: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4079: readline/history.h: No such file or directory
configure: failed program was:
#line 4078 "configure"
#include "confdefs.h"
#include <readline/history.h>
configure:4113: checking for readline/readline.h
configure:4123: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4153: checking for sys/select.h
configure:4163: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4193: checking for termios.h
configure:4203: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4233: checking for unistd.h
configure:4243: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4273: checking for values.h
configure:4283: gcc -E   conftest.c >/dev/null 2>conftest.out
configure:4279: values.h: No such file or directory
configure: failed program was:
#line 4278 "configure"


> On my setup, which is readline 4.0 if I'm checking the right files,
> HAVE_HISTORY_IN_READLINE does get defined, and AFAICT libhistory.a
> doesn't get linked, but I most certainly do get history support.
>
> Which readline version are you using?  Maybe the GNU guys rearranged
> which functions live in which library.  If so, we probably need
> to be probing for a different symbol in libreadline to be compatible
> across more libreadline versions ...

I'm using readline 4.1, compiled from the distribution.  In other
words, I didn't get it from /usr/ports, which is what OpenBSD normally
uses.

I have a stupid ./configure question: Whenever I compile something, I
never want to have -g as a CC option.  How do I tell configure not to
use -g as a CC option?  I only want -O2.  Usually I go through and
edit Makefiles by hand after configure is done, but that's annoying.

e

Re: Figured it out (psql and Gnu readline)

From
"Stephan Szabo"
Date:
Here's a stupid question,

What happens if you do the same kind of compile on a similar program from
your shell (a simple program that includes <readline/history.h>, with and
without -I/usr/local/include?
I'm just wondering if the compiler is not looking in /usr/local/include by
default and is not finding the header because of that...

----- Original Message -----
From: "Erich" <hh@cyberpass.net>
To: <tgl@sss.pgh.pa.us>
Cc: <pgsql-general@postgresql.org>
Sent: Wednesday, July 12, 2000 6:12 PM
Subject: Re: [GENERAL] Figured it out (psql and Gnu readline)


>
> > Well, that's darn peculiar.  configure.in has a test for
> > readline/history.h, big as life:
> > AC_CHECK_HEADERS(readline/history.h)
> > Does the config.log file show why it failed to find the include?
>
> Here's the lines from config.log:
>
> configure:2539: checking for main in -lreadline
> configure:2554: gcc -o conftest -O2 -pipe
   conftest.c -lreadline  -ltermcap -lcurses  1>&5
> configure:2582: checking for using_history in -lreadline
> configure:2601: gcc -o conftest -O2 -pipe
   conftest.c -lreadline  -lreadline -ltermcap -lcurses  1>&5
> configure:3833: checking for history.h
> configure:3843: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:3839: history.h: No such file or directory
> configure: failed program was:
> #line 3838 "configure"
> #include "confdefs.h"
> #include <history.h>
> configure:3873: checking for ieeefp.h
> configure:3883: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:3913: checking for limits.h
> configure:3923: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:3953: checking for netdb.h
> configure:3963: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:3993: checking for netinet/in.h
> configure:4003: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4033: checking for readline.h
> configure:4043: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4039: readline.h: No such file or directory
> configure: failed program was:
> #line 4038 "configure"
> #include "confdefs.h"
> #include <readline.h>
> configure:4073: checking for readline/history.h
> configure:4083: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4079: readline/history.h: No such file or directory
> configure: failed program was:
> #line 4078 "configure"
> #include "confdefs.h"
> #include <readline/history.h>
> configure:4113: checking for readline/readline.h
> configure:4123: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4153: checking for sys/select.h
> configure:4163: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4193: checking for termios.h
> configure:4203: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4233: checking for unistd.h
> configure:4243: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4273: checking for values.h
> configure:4283: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4279: values.h: No such file or directory
> configure: failed program was:
> #line 4278 "configure"
>
>
> > On my setup, which is readline 4.0 if I'm checking the right files,
> > HAVE_HISTORY_IN_READLINE does get defined, and AFAICT libhistory.a
> > doesn't get linked, but I most certainly do get history support.
> >
> > Which readline version are you using?  Maybe the GNU guys rearranged
> > which functions live in which library.  If so, we probably need
> > to be probing for a different symbol in libreadline to be compatible
> > across more libreadline versions ...
>
> I'm using readline 4.1, compiled from the distribution.  In other
> words, I didn't get it from /usr/ports, which is what OpenBSD normally
> uses.
>
> I have a stupid ./configure question: Whenever I compile something, I
> never want to have -g as a CC option.  How do I tell configure not to
> use -g as a CC option?  I only want -O2.  Usually I go through and
> edit Makefiles by hand after configure is done, but that's annoying.
>
> e
>



Re: Figured it out (psql and Gnu readline)

From
Patrick Welche
Date:
On Wed, Jul 12, 2000 at 08:50:58PM -0400, Tom Lane wrote:
...
> HAVE_HISTORY_IN_READLINE seems to get defined if libreadline.a contains
> a "using_history" symbol:
>
> AC_CHECK_LIB(readline, using_history, AC_DEFINE(HAVE_HISTORY_IN_READLINE),
>     AC_CHECK_LIB(history,  main) )

.. of course for me it's in libedit:

% nm -g /usr/lib/libedit.a | grep using_history
0000028c T using_history

Cheers,

Patrick

Re: Figured it out (psql and Gnu readline)

From
Peter Eisentraut
Date:
Patrick Welche writes:

> > AC_CHECK_LIB(readline, using_history, AC_DEFINE(HAVE_HISTORY_IN_READLINE),
> >     AC_CHECK_LIB(history,  main) )
>
> .. of course for me it's in libedit:
>
> % nm -g /usr/lib/libedit.a | grep using_history
> 0000028c T using_history

Is libedit readline compatible now?


--
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden


Re: Figured it out (psql and Gnu readline)

From
Peter Eisentraut
Date:
Erich writes:

> configure:4073: checking for readline/history.h
> configure:4083: gcc -E   conftest.c >/dev/null 2>conftest.out
> configure:4079: readline/history.h: No such file or directory
> configure: failed program was:
> #line 4078 "configure"
> #include "confdefs.h"
> #include <readline/history.h>
> configure:4113: checking for readline/readline.h
> configure:4123: gcc -E   conftest.c >/dev/null 2>conftest.out

Shot in the dark: you have some other readline'ish library (libedit?)
installed somewhere (/usr/{lib,include}?), which configure picks up here.
But that library only provides a readline/readline.h header, no
history.h. If so, reconfigure --with-includes=/usr/local/include
--with-libraries=/usr/local/lib.


> I have a stupid ./configure question: Whenever I compile something, I
> never want to have -g as a CC option.  How do I tell configure not to
> use -g as a CC option?  I only want -O2.  Usually I go through and
> edit Makefiles by hand after configure is done, but that's annoying.

If the package respects the environment (which PostgreSQL doesn't,
unfortunately) then

CFLAGS=-O2 ./configure

should work. In PostgreSQL we don't put any -g into CFLAGS by default. If
the package uses Automake then you can also do `make install-strip' to
remove the debugging symbols at install time.


--
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden


Re: Figured it out (psql and Gnu readline)

From
Patrick Welche
Date:
On Fri, Jul 14, 2000 at 12:33:20AM +0200, Peter Eisentraut wrote:
> Patrick Welche writes:
>
> > .. of course for me it's in libedit:
> >
> > % nm -g /usr/lib/libedit.a | grep using_history
> > 0000028c T using_history
>
> Is libedit readline compatible now?

On a NetBSD-1.5B/i386 box, according to editline(3):

HISTORY
     The editline library first appeared in 4.4BSD.  CC_REDISPLAY appeared in
     NetBSD 1.3.  CC_REFRESH_BEEP, EL_EDITMODE and the readline emulation ap-
     peared in NetBSD 1.4.  EL_RPROMPT appeared in NetBSD 1.5.

AUTHORS
     The editline library was written by Christos Zoulas.  Luke Mewburn wrote
     this manual and implemented CC_REDISPLAY, CC_REFRESH_BEEP, EL_EDITMODE,
     and EL_RPROMPT.  Jaromir Dolecek implemented the readline emulation.

So I suspect the answer is "yes"?

Cheers,

Patrick

Re: Figured it out (psql and Gnu readline)

From
Peter Eisentraut
Date:
Patrick Welche writes:

> > Is libedit readline compatible now?

> So I suspect the answer is "yes"?

I guess it would be nice if ???BSD users could use their libedit instead
of GNU readline if they wanted. The problem is that readline is often not
even compatible to itself, so I'm not sure how feasible this would be.

--
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden