Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

Started by Albe Laurenzover 19 years ago14 messageshackers
Jump to latest
#1Albe Laurenz
all@adv.magwien.gv.at

The patch did not work for me :-(

My buildfarm members failed in local testing to execute the
install-check, because initdb failed to find libpq.so.

Make check did succeed, so I think there is a possibility of
getting it
working, but it won't be as simple as adding -brtl to the template.

I suspect that up to now the buildfarm had a static build of
PostgreSQL. What is the output of 'ldd initdb' when it builds
and runs correctly?

Is libpq.so in a non-standard directory? If yes, one either
has to export LIBPATH in the environment or link with
-L/location/of/libpq for the executable to find it
(similar to RPATH in Linux).

Yours,
Laurenz Albe

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Albe Laurenz (#1)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

"Albe Laurenz" <all@adv.magwien.gv.at> writes:

The patch did not work for me :-(

Is libpq.so in a non-standard directory? If yes, one either
has to export LIBPATH in the environment or link with
-L/location/of/libpq for the executable to find it
(similar to RPATH in Linux).

libpq will definitely be in a nonstandard directory in buildfarm usage.
It sounds like we should add the local equivalent of RPATH for AIX.

Now I'm pretty dubious that -L is what we want --- -L should have the
semantics of "this is where to find the library right now". RPATH is
used to point to an expected installation directory that might not
contain the library at the time of linking ... or worse, might contain
an old incompatible version of it. Does AIX have a true RPATH
equivalent?

regards, tom lane

#3Rocco Altier
RoccoA@Routescape.com
In reply to: Albe Laurenz (#1)

I suspect that up to now the buildfarm had a static build of
PostgreSQL. What is the output of 'ldd initdb' when it builds
and runs correctly?

Is libpq.so in a non-standard directory? If yes, one either
has to export LIBPATH in the environment or link with
-L/location/of/libpq for the executable to find it
(similar to RPATH in Linux).

Here is the working one:
initdb needs:
/usr/lib/libc.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)

Here is the broken one:
initdb needs:
../../../src/interfaces/libpq/libpq.so
/usr/lib/libc.a(shr.o)
/usr/lib/librtl.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)

When run it shows:
exec(): 0509-036 Cannot load program initdb because of the following
errors:
0509-150 Dependent module libpq.so could not be loaded.
0509-022 Cannot load module libpq.so.
0509-026 System error: A file or directory in the path name does
not exist.

#4Albe Laurenz
all@adv.magwien.gv.at
In reply to: Rocco Altier (#3)

Rocco Altier wrote:

Here is the working one:
initdb needs:
/usr/lib/libc.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)

Here is the broken one:
initdb needs:
../../../src/interfaces/libpq/libpq.so
/usr/lib/libc.a(shr.o)
/usr/lib/librtl.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)

When run it shows:
exec(): 0509-036 Cannot load program initdb because of the following
errors:
0509-150 Dependent module libpq.so could not be loaded.
0509-022 Cannot load module libpq.so.
0509-026 System error: A file or directory in the
path name does
not exist.

Yup, that's as expected :^)

Up to now you have built against the static libpq.a
I didn't add the right -blibpath to this patch that
failed for you - the broken initdb is dynamically linked
but does not know where to look for its shared library.

The patch I just submitted to pgsql-patches should take
care of that. It makes the executables look in --libdir.

Yours,
Laurenz Albe

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Albe Laurenz (#4)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

"Albe Laurenz" <all@adv.magwien.gv.at> writes:

Up to now you have built against the static libpq.a
I didn't add the right -blibpath to this patch that
failed for you - the broken initdb is dynamically linked
but does not know where to look for its shared library.

The patch I just submitted to pgsql-patches should take
care of that. It makes the executables look in --libdir.

Mmm ... what of "make check"'s temporary installation? We need
to have the executables search in the temporary install's libdir,
*before* looking in the configured --libdir (which could easily
contain an incompatible back-version libpq ...)

pg_regress normally tries to handle this by setting LD_LIBRARY_PATH
... does AIX use that or a similar symbol?

regards, tom lane

#6Rocco Altier
RoccoA@Routescape.com
In reply to: Tom Lane (#5)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
"Albe Laurenz" <all@adv.magwien.gv.at> writes:

Up to now you have built against the static libpq.a
I didn't add the right -blibpath to this patch that
failed for you - the broken initdb is dynamically linked
but does not know where to look for its shared library.

The patch I just submitted to pgsql-patches should take
care of that. It makes the executables look in --libdir.

Mmm ... what of "make check"'s temporary installation? We need
to have the executables search in the temporary install's libdir,
*before* looking in the configured --libdir (which could easily
contain an incompatible back-version libpq ...)

pg_regress normally tries to handle this by setting LD_LIBRARY_PATH
... does AIX use that or a similar symbol?

The "make check" was successful in my previous testing of the last
patch, so it appears that AIX was paying attention to LD_LIBRARY_PATH.

I am testing the new version of the patch now, so will report back
shortly.

Thanks,
-rocco

#7Rocco Altier
RoccoA@Routescape.com
In reply to: Rocco Altier (#6)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Mmm ... what of "make check"'s temporary installation? We need
to have the executables search in the temporary install's libdir,
*before* looking in the configured --libdir (which could easily
contain an incompatible back-version libpq ...)

pg_regress normally tries to handle this by setting LD_LIBRARY_PATH
... does AIX use that or a similar symbol?

The "make check" was successful in my previous testing of the last
patch, so it appears that AIX was paying attention to LD_LIBRARY_PATH.

I am testing the new version of the patch now, so will report back
shortly.

From testing the new patch, it did not work for the regression tests in

the buildfarm.
Not sure why it did work before.

Anyhow, I have updated the patch to set LIBPATH (AIX's version of
LD_LIBRARY_PATH), in pg_regress and ecpg's pg_regress.

I have tested this with default config options (enable-shared,
enable-rpath). I am starting to test the other methods as well, but
wanted to get this out first.

-rocco

#8Rocco Altier
RoccoA@Routescape.com
In reply to: Rocco Altier (#7)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

With the patch attached this time...

-rocco

Show quoted text

-----Original Message-----
From: Rocco Altier
Sent: Friday, September 15, 2006 2:04 PM
To: Rocco Altier; 'Tom Lane'; 'Albe Laurenz'
Cc: 'pgsql-hackers@postgresql.org'
Subject: RE: [PATCHES] [HACKERS] Linking on AIX (Was: Fix
linking of OpenLDAP libraries )

From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Mmm ... what of "make check"'s temporary installation? We need
to have the executables search in the temporary install's libdir,
*before* looking in the configured --libdir (which could easily
contain an incompatible back-version libpq ...)

pg_regress normally tries to handle this by setting

LD_LIBRARY_PATH

... does AIX use that or a similar symbol?

The "make check" was successful in my previous testing of the last
patch, so it appears that AIX was paying attention to

LD_LIBRARY_PATH.

I am testing the new version of the patch now, so will report back
shortly.

From testing the new patch, it did not work for the
regression tests in the buildfarm.
Not sure why it did work before.

Anyhow, I have updated the patch to set LIBPATH (AIX's
version of LD_LIBRARY_PATH), in pg_regress and ecpg's pg_regress.

I have tested this with default config options
(enable-shared, enable-rpath). I am starting to test the
other methods as well, but wanted to get this out first.

-rocco

Attachments:

aix.link.regression.patchapplication/octet-stream; name=aix.link.regression.patchDownload+28-12
#9Bruce Momjian
bruce@momjian.us
In reply to: Rocco Altier (#8)
Re: [PATCHES] Linking on AIX (Was: Fix linking of

I would like to see some comments about AIX linking so we don't need to
relearn this in 1-2 years.

---------------------------------------------------------------------------

Rocco Altier wrote:

With the patch attached this time...

-rocco

-----Original Message-----
From: Rocco Altier
Sent: Friday, September 15, 2006 2:04 PM
To: Rocco Altier; 'Tom Lane'; 'Albe Laurenz'
Cc: 'pgsql-hackers@postgresql.org'
Subject: RE: [PATCHES] [HACKERS] Linking on AIX (Was: Fix
linking of OpenLDAP libraries )

From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Mmm ... what of "make check"'s temporary installation? We need
to have the executables search in the temporary install's libdir,
*before* looking in the configured --libdir (which could easily
contain an incompatible back-version libpq ...)

pg_regress normally tries to handle this by setting

LD_LIBRARY_PATH

... does AIX use that or a similar symbol?

The "make check" was successful in my previous testing of the last
patch, so it appears that AIX was paying attention to

LD_LIBRARY_PATH.

I am testing the new version of the patch now, so will report back
shortly.

From testing the new patch, it did not work for the
regression tests in the buildfarm.
Not sure why it did work before.

Anyhow, I have updated the patch to set LIBPATH (AIX's
version of LD_LIBRARY_PATH), in pg_regress and ecpg's pg_regress.

I have tested this with default config options
(enable-shared, enable-rpath). I am starting to test the
other methods as well, but wanted to get this out first.

-rocco

Content-Description: aix.link.regression.patch

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

--
Bruce Momjian bruce@momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Rocco Altier (#8)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

"Rocco Altier" <RoccoA@Routescape.com> writes:

With the patch attached this time...

The proposed patch to Makefile.shlib makes me gag :-( ... lying to make
about what's the purpose of a rule is seldom a good idea. Please try
as attached instead. Also, I am *really* dubious about the change to
ecpg/test/Makefile.regress --- if that's necessary then this whole
exercise is wrong.

regards, tom lane

#11Albe Laurenz
all@adv.magwien.gv.at
In reply to: Albe Laurenz (#4)

Bruce Momjian wrote:

I would like to see some comments about AIX linking so we
don't need to
relearn this in 1-2 years.

Something like
http://archives.postgresql.org/pgsql-hackers/2006-09/msg00893.php
or something more comprehensive?

Maybe mentioning LIBPATH and -blibpath: might be good.

Yours,
Laurenz Albe

#12Albe Laurenz
all@adv.magwien.gv.at
In reply to: Tom Lane (#10)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

Rocco Altier wrote:

pg_regress normally tries to handle this by setting LD_LIBRARY_PATH
... does AIX use that or a similar symbol?

The "make check" was successful in my previous testing of the last
patch, so it appears that AIX was paying attention to

LD_LIBRARY_PATH.

Anyhow, I have updated the patch to set LIBPATH (AIX's version of
LD_LIBRARY_PATH), in pg_regress and ecpg's pg_regress.

I have tested this with default config options (enable-shared,
enable-rpath). I am starting to test the other methods as well, but
wanted to get this out first.

LD_LIBRARY_PATH does not work on AIX - the AIX equivalent is LIBPATH.

"make check" does not seem to rely on LD_LIBRARY_PATH, and it should
work with my patch (it worked here).

If pg_regress relies on LD_LIBRARY_PATH, it would have to be changed
to set LIBPATH in the AIX case :^(

The reason why all these problems manifest now is that - up to now -
PostgreSQL used static linking on AIX and it was not necessary to
find the shared library.

Yours,
Laurenz Albe

#13Albe Laurenz
all@adv.magwien.gv.at
In reply to: Albe Laurenz (#12)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

Tom Lane wrote:

The proposed patch to Makefile.shlib makes me gag :-( ...

It is ugly.

lying to make
about what's the purpose of a rule is seldom a good idea. Please try
as attached instead.

I will ASAP.

Also, I am *really* dubious about the change to
ecpg/test/Makefile.regress --- if that's necessary then this whole
exercise is wrong.

For a dynamic build you do not need the change.
Only a --disable-shared build will gag without it. I'll have a look
at that too.

Yours,
Laurenz Albe

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Albe Laurenz (#13)
Re: [PATCHES] Linking on AIX (Was: Fix linking of OpenLDAP libraries )

"Albe Laurenz" <all@adv.magwien.gv.at> writes:

Tom Lane wrote:

Also, I am *really* dubious about the change to
ecpg/test/Makefile.regress --- if that's necessary then this whole
exercise is wrong.

For a dynamic build you do not need the change.
Only a --disable-shared build will gag without it.

Ah. In that case I think the answer is that that makefile should be
using $(libpq) or possibly $(libpq_pgport) from Makefile.global,
rather than bare "-lpq".

regards, tom lane