plperl needs upgrade for Fedora 10

Started by Pavel Stehuleabout 17 years ago23 messages
#1Pavel Stehule
pavel.stehule@gmail.com

Hello

I am testing PostgreSQL on Federa 10. There is Perl 5.10. After
successful compilation I got error

CREATE LANGUAGE plperl;
ERROR: could not oad library "/........plperl.so": ... undefined
symbol: boot_DynaLoader

Regards
Pavel Stehule

#2Andrew Dunstan
andrew@dunslane.net
In reply to: Pavel Stehule (#1)
Re: plperl needs upgrade for Fedora 10

Pavel Stehule wrote:

Hello

I am testing PostgreSQL on Federa 10. There is Perl 5.10. After
successful compilation I got error

CREATE LANGUAGE plperl;
ERROR: could not oad library "/........plperl.so": ... undefined
symbol: boot_DynaLoader

Regards
Pavel Stehule

Please send the build log for plperl also, and you configure settings. I
have previously built against perl 5.10 quite happily.

cheers

andrew

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: Andrew Dunstan (#2)
4 attachment(s)
Re: plperl needs upgrade for Fedora 10

postgres=# select version();
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 8.3.4 on x86_64-unknown-linux-gnu, compiled by GCC gcc
(GCC) 4.3.2 20080917 (Red Hat 4.3.2-4)
(1 row)

postgres=# CREATE LANGUAGE plperlu;
ERROR: could not load library "/usr/local/pgsql8.3/lib/plperl.so":
/usr/local/pgsql8.3/lib/plperl.so: undefined symbol: boot_DynaLoader
postgres=#

Regards
Pavel Stehule

2008/11/3 Andrew Dunstan <andrew@dunslane.net>:

Show quoted text

Pavel Stehule wrote:

Hello

I am testing PostgreSQL on Federa 10. There is Perl 5.10. After
successful compilation I got error

CREATE LANGUAGE plperl;
ERROR: could not oad library "/........plperl.so": ... undefined
symbol: boot_DynaLoader

Regards
Pavel Stehule

Please send the build log for plperl also, and you configure settings. I
have previously built against perl 5.10 quite happily.

cheers

andrew

Attachments:

Makefile.global.gzapplication/x-gzip; name=Makefile.global.gzDownload
configure.log.gzapplication/x-gzip; name=configure.log.gzDownload
makeall.log.gzapplication/x-gzip; name=makeall.log.gzDownload
makeinstall.log.gzapplication/x-gzip; name=makeinstall.log.gzDownload
#4Andrew Dunstan
andrew@dunslane.net
In reply to: Pavel Stehule (#3)
Re: plperl needs upgrade for Fedora 10

Pavel Stehule wrote:

postgres=# select version();
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 8.3.4 on x86_64-unknown-linux-gnu, compiled by GCC gcc
(GCC) 4.3.2 20080917 (Red Hat 4.3.2-4)
(1 row)

postgres=# CREATE LANGUAGE plperlu;
ERROR: could not load library "/usr/local/pgsql8.3/lib/plperl.so":
/usr/local/pgsql8.3/lib/plperl.so: undefined symbol: boot_DynaLoader
postgres=#

1. Please do not top-answer.

2. You have not provided the info I asked for, namely the configure
params and the build log. e.g.:

configure --enable-cassert --enable-debug --enable-nls --enable-integer-datetimes \
--with-perl --with-python --with-tcl \
--with-krb5 --with-includes=/usr/include/et --with-openssl \
--with-pam --with-ldap --with-libxml --with-libxslt --with-ossp-uuid --with-gssapi --enable-depend --prefix=/home/andrew/bf/root/HEAD/inst --with-pgport=5678

make[3]: Entering directory `/home/andrew/bf/root/HEAD/pgsql.24747/src/pl/plperl'
ccache gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -fpic -I/home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/pl/plperl -I../../../src/include -I/home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/include -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include/et -I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE -c -o plperl.o /home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/pl/plperl/plperl.c -MMD -MP -MF .deps/plperl.Po
ccache gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -fpic -I/home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/pl/plperl -I../../../src/include -I/home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/include -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include/et -I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE -c -o spi_internal.o /home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/pl/plperl/spi_internal.c -MMD -MP -MF .deps/spi_internal.Po
"/usr/bin/perl" /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap /home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/pl/plperl/SPI.xs >SPI.c
ccache gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -fpic -I/home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/pl/plperl -I../../../src/include -I/home/andrew/bf/root/HEAD/pgsql.24747/../pgsql/src/include -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include/et -I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE -c -o SPI.o SPI.c -MMD -MP -MF .deps/SPI.Po
ccache gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -g -fpic -shared plperl.o spi_internal.o SPI.o -L/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE -L../../../src/port /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/auto/DynaLoader/DynaLoader.a -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc -Wl,-rpath,'/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE' -o plperl.so
make[3]: Leaving directory `/home/andrew/bf/root/HEAD/pgsql.24747/src/pl/plperl'

cheers

andrew

#5Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#4)
Re: plperl needs upgrade for Fedora 10

Andrew Dunstan wrote:

2. You have not provided the info I asked for, namely the configure
params and the build log. e.g.:

My apologies. I missed the attachments with this info.

cheers

andrew

#6Pavel Stehule
pavel.stehule@gmail.com
In reply to: Andrew Dunstan (#5)
Re: plperl needs upgrade for Fedora 10

2008/11/4 Andrew Dunstan <andrew@dunslane.net>:

Andrew Dunstan wrote:

2. You have not provided the info I asked for, namely the configure params
and the build log. e.g.:

My apologies. I missed the attachments with this info.

no problem

Pavel

Show quoted text

cheers

andrew

#7Andrew Dunstan
andrew@dunslane.net
In reply to: Pavel Stehule (#6)
Re: plperl needs upgrade for Fedora 10

Pavel Stehule wrote:

2008/11/4 Andrew Dunstan <andrew@dunslane.net>:

Andrew Dunstan wrote:

2. You have not provided the info I asked for, namely the configure params
and the build log. e.g.:

My apologies. I missed the attachments with this info.

no problem

Please send the output of the following:

perl -V

nm /usr/lib64/perl5/5.10.0/x86_64-linux-thread-multi/CORE/libperl.so |
grep boot_Dyn

cheers

andrew

#8Andrew Dunstan
andrew@dunslane.net
In reply to: Pavel Stehule (#3)
Re: plperl needs upgrade for Fedora 10

Pavel Stehule wrote:

postgres=# select version();
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 8.3.4 on x86_64-unknown-linux-gnu, compiled by GCC gcc
(GCC) 4.3.2 20080917 (Red Hat 4.3.2-4)
(1 row)

postgres=# CREATE LANGUAGE plperlu;
ERROR: could not load library "/usr/local/pgsql8.3/lib/plperl.so":
/usr/local/pgsql8.3/lib/plperl.so: undefined symbol: boot_DynaLoader
postgres=#

OK, I have got to the bottom of this. It appears that the Fedora people
have for some reason best known to themselves decided to stop bundling
the ExtUtils::Embed module with base perl, as it was before.

Once this module is installed plperl builds and performs just fine.

Maybe someone with Fedora connections could ask them why they would do
such an odd thing. It's not like they are saving a huge amount of space.

Meanwhile, I think we should make our call to it in the config file more
robust, so we detect the call failure.

cheers

andrew

#9Pavel Stehule
pavel.stehule@gmail.com
In reply to: Andrew Dunstan (#8)
Re: plperl needs upgrade for Fedora 10

2008/11/6 Andrew Dunstan <andrew@dunslane.net>:

Pavel Stehule wrote:

postgres=# select version();
version

----------------------------------------------------------------------------------------------------------
PostgreSQL 8.3.4 on x86_64-unknown-linux-gnu, compiled by GCC gcc
(GCC) 4.3.2 20080917 (Red Hat 4.3.2-4)
(1 row)

postgres=# CREATE LANGUAGE plperlu;
ERROR: could not load library "/usr/local/pgsql8.3/lib/plperl.so":
/usr/local/pgsql8.3/lib/plperl.so: undefined symbol: boot_DynaLoader
postgres=#

OK, I have got to the bottom of this. It appears that the Fedora people have
for some reason best known to themselves decided to stop bundling the
ExtUtils::Embed module with base perl, as it was before.

Once this module is installed plperl builds and performs just fine.

Maybe someone with Fedora connections could ask them why they would do such
an odd thing. It's not like they are saving a huge amount of space.

Meanwhile, I think we should make our call to it in the config file more
robust, so we detect the call failure.

cheers

andrew

Now I am not at work, so I'll check it next week

thank you
Pavel

#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#8)
Re: plperl needs upgrade for Fedora 10

Andrew Dunstan <andrew@dunslane.net> writes:

OK, I have got to the bottom of this. It appears that the Fedora people
have for some reason best known to themselves decided to stop bundling
the ExtUtils::Embed module with base perl, as it was before.

That's been true since F-9, so I'm not quite sure why Pavel's build only
broke at F-10. FWIW the postgresql Fedora RPMs have

BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex autoconf gawk
BuildRequires: perl(ExtUtils::Embed), perl-devel

The extra Requires for MakeMaker has been there even longer.

Meanwhile, I think we should make our call to it in the config file more
robust, so we detect the call failure.

+1. Would be a good idea to check for MakeMaker too.

regards, tom lane

#11Alvaro Herrera
alvherre@commandprompt.com
In reply to: Tom Lane (#10)
Re: plperl needs upgrade for Fedora 10

Tom Lane escribi�:

Andrew Dunstan <andrew@dunslane.net> writes:

OK, I have got to the bottom of this. It appears that the Fedora people
have for some reason best known to themselves decided to stop bundling
the ExtUtils::Embed module with base perl, as it was before.

That's been true since F-9, so I'm not quite sure why Pavel's build only
broke at F-10. FWIW the postgresql Fedora RPMs have

BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex autoconf gawk
BuildRequires: perl(ExtUtils::Embed), perl-devel

The extra Requires for MakeMaker has been there even longer.

Huh, but the requirement for ExtUtils::Embed is at runtime, so shouldn't
it be a plain Requires instead of BuildRequires?

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

#12Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#10)
Re: plperl needs upgrade for Fedora 10

2008/11/6 Tom Lane <tgl@sss.pgh.pa.us>:

Andrew Dunstan <andrew@dunslane.net> writes:

OK, I have got to the bottom of this. It appears that the Fedora people
have for some reason best known to themselves decided to stop bundling
the ExtUtils::Embed module with base perl, as it was before.

That's been true since F-9, so I'm not quite sure why Pavel's build only
broke at F-10. FWIW the postgresql Fedora RPMs have

I skip F9. So I never used it.

Pavel

Show quoted text

BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex autoconf gawk
BuildRequires: perl(ExtUtils::Embed), perl-devel

The extra Requires for MakeMaker has been there even longer.

Meanwhile, I think we should make our call to it in the config file more
robust, so we detect the call failure.

+1. Would be a good idea to check for MakeMaker too.

regards, tom lane

#13Andrew Dunstan
andrew@dunslane.net
In reply to: Alvaro Herrera (#11)
Re: plperl needs upgrade for Fedora 10

Alvaro Herrera wrote:

Tom Lane escribi�:

Andrew Dunstan <andrew@dunslane.net> writes:

OK, I have got to the bottom of this. It appears that the Fedora people
have for some reason best known to themselves decided to stop bundling
the ExtUtils::Embed module with base perl, as it was before.

That's been true since F-9, so I'm not quite sure why Pavel's build only
broke at F-10. FWIW the postgresql Fedora RPMs have

BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex autoconf gawk
BuildRequires: perl(ExtUtils::Embed), perl-devel

The extra Requires for MakeMaker has been there even longer.

Huh, but the requirement for ExtUtils::Embed is at runtime, so shouldn't
it be a plain Requires instead of BuildRequires?

No. We need ExtUtils::Embed to get the linkage flags for the build. See
config/perl.m4

cheers

andrew

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#11)
Re: plperl needs upgrade for Fedora 10

Alvaro Herrera <alvherre@commandprompt.com> writes:

Tom Lane escribi�:

BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex autoconf gawk
BuildRequires: perl(ExtUtils::Embed), perl-devel

Huh, but the requirement for ExtUtils::Embed is at runtime, so shouldn't
it be a plain Requires instead of BuildRequires?

Really? I'm pretty sure I recall the RPM build failing when they
changed that. (But it's possible that the regression test step is what
failed, I don't remember.) I'd think I'd have heard about it if there
were a missing runtime dependency.

BTW, Andrew was wondering *why* Fedora isn't bundling these anymore.
The CVS logs mention something about versioned perl, so it's possible
that they had to split out some modules to support multiple Perl
installations cleanly.

regards, tom lane

#15Alvaro Herrera
alvherre@commandprompt.com
In reply to: Tom Lane (#14)
Re: plperl needs upgrade for Fedora 10

Tom Lane escribió:

Alvaro Herrera <alvherre@commandprompt.com> writes:

Tom Lane escribi�:

BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex autoconf gawk
BuildRequires: perl(ExtUtils::Embed), perl-devel

Huh, but the requirement for ExtUtils::Embed is at runtime, so shouldn't
it be a plain Requires instead of BuildRequires?

Really? I'm pretty sure I recall the RPM build failing when they
changed that.

Actually, seeing Andrew's response I think I'm probably wrong.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#16Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#14)
Re: plperl needs upgrade for Fedora 10

Tom Lane wrote:

Alvaro Herrera <alvherre@commandprompt.com> writes:

Tom Lane escribi�:

BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex autoconf gawk
BuildRequires: perl(ExtUtils::Embed), perl-devel

Huh, but the requirement for ExtUtils::Embed is at runtime, so shouldn't
it be a plain Requires instead of BuildRequires?

Really? I'm pretty sure I recall the RPM build failing when they
changed that. (But it's possible that the regression test step is what
failed, I don't remember.) I'd think I'd have heard about it if there
were a missing runtime dependency.

BTW, Andrew was wondering *why* Fedora isn't bundling these anymore.
The CVS logs mention something about versioned perl, so it's possible
that they had to split out some modules to support multiple Perl
installations cleanly.

My F9 instance has the module, from a separate RPM package, but I'm
fairly sure it came as part of the normal install. But the F10 install
DVD doesn't have it at all. I had to grab it from CPAN and build/install
manually to check that it was what was missing.

The really bad thing about this mess is that it doesn't make the build
fail - we don't get a failure until runtime, so unless the RPM build
checks run the Postgres PL install checks it wouldn't be caught.

I'm thinking of something like this change to config/perl.m4:

Index: config/perl.m4
===================================================================
RCS file: /cvsroot/pgsql/config/perl.m4,v
retrieving revision 1.3
diff -c -r1.3 perl.m4
*** config/perl.m4      29 Nov 2003 19:51:17 -0000      1.3
--- config/perl.m4      6 Nov 2008 17:14:34 -0000
***************
*** 32,35 ****
  pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
  perl_embed_ldflags=`echo X"$pgac_tmp1" | sed "s/^X//;s%$pgac_tmp2%%"`
  AC_SUBST(perl_embed_ldflags)dnl
! AC_MSG_RESULT([$perl_embed_ldflags])])
--- 32,41 ----
  pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
  perl_embed_ldflags=`echo X"$pgac_tmp1" | sed "s/^X//;s%$pgac_tmp2%%"`
  AC_SUBST(perl_embed_ldflags)dnl
! if test -z "$perl_embed_ldflags" ; then
!       AC_MSG_RESULT(no)
!       AC_MSG_ERROR([unable to determine flags to link embedded Perl])
! else
!       AC_MSG_RESULT([$perl_embed_ldflags])
! fi
! ])# PGAC_CHECK_PERL_EMBED_LDFLAGS

cheers

andrew

#17Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#16)
Re: plperl needs upgrade for Fedora 10

Andrew Dunstan <andrew@dunslane.net> writes:

I'm thinking of something like this change to config/perl.m4:

! if test -z "$perl_embed_ldflags" ; then
! AC_MSG_RESULT(no)
! AC_MSG_ERROR([unable to determine flags to link embedded Perl])

Hm, is it certain that "empty" is never a valid value for
$perl_embed_ldflags? In any case I'm a bit confused how this fixes the
problem --- it looks like the test is just relying on Config not Embed.

regards, tom lane

#18Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#17)
Re: plperl needs upgrade for Fedora 10

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

I'm thinking of something like this change to config/perl.m4:

! if test -z "$perl_embed_ldflags" ; then
! AC_MSG_RESULT(no)
! AC_MSG_ERROR([unable to determine flags to link embedded Perl])

Hm, is it certain that "empty" is never a valid value for
$perl_embed_ldflags?

Yes. If it's empty we don't even link against libperl at all. That can't
possibly be right.

In any case I'm a bit confused how this fixes the
problem --- it looks like the test is just relying on Config not Embed.

No, we get the ldopts from Embed and then *remove* the ccldflags from
Config from that string. What is left is set as perl_embed_flags, and
that's what mustn't be empty.

cheers

andrew

#19Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#18)
Re: plperl needs upgrade for Fedora 10

Andrew Dunstan <andrew@dunslane.net> writes:

No, we get the ldopts from Embed and then *remove* the ccldflags from
Config from that string. What is left is set as perl_embed_flags, and
that's what mustn't be empty.

Got it. Sounds good then.

What about the MakeMaker dependency?

regards, tom lane

#20Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#19)
Re: plperl needs upgrade for Fedora 10

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

No, we get the ldopts from Embed and then *remove* the ccldflags from
Config from that string. What is left is set as perl_embed_flags, and
that's what mustn't be empty.

Got it. Sounds good then.

What about the MakeMaker dependency?

The call to ldopts will fail if MakeMaker is not present, so this will
cover it. It's very unlikely to be absent - it's required to build
almost every Perl module known to man.

cheers

andrew

#21Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#20)
Re: plperl needs upgrade for Fedora 10

Andrew Dunstan <andrew@dunslane.net> writes:

Tom Lane wrote:

What about the MakeMaker dependency?

The call to ldopts will fail if MakeMaker is not present, so this will
cover it. It's very unlikely to be absent - it's required to build
almost every Perl module known to man.

I see. I think then the error message should read something like

AC_MSG_ERROR([could not determine flags for linking embedded Perl
This probably means that ExtUtils::Embed or ExtUtils::MakeMaker is not
installed.])

Otherwise, looks good.

regards, tom lane

#22Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#21)
Re: plperl needs upgrade for Fedora 10

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Tom Lane wrote:

What about the MakeMaker dependency?

The call to ldopts will fail if MakeMaker is not present, so this will
cover it. It's very unlikely to be absent - it's required to build
almost every Perl module known to man.

I see. I think then the error message should read something like

AC_MSG_ERROR([could not determine flags for linking embedded Perl
This probably means that ExtUtils::Embed or ExtUtils::MakeMaker is not
installed.])

Otherwise, looks good.

OK. Should we backpatch this? Arguably it's a build bug.

(Also it would be good if someone were to whisper in the ears of the
Fedora people that removing ExtUtils::Embed entirely from their Perl
packaging is a dumb thing to do. This is a standard Perl module, that
one would normally expect to accompany every Perl distribution.)

cheers

andrew

#23Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#22)
Re: plperl needs upgrade for Fedora 10

Andrew Dunstan <andrew@dunslane.net> writes:

Tom Lane wrote:

Otherwise, looks good.

OK. Should we backpatch this? Arguably it's a build bug.

Yeah, probably.

(Also it would be good if someone were to whisper in the ears of the
Fedora people that removing ExtUtils::Embed entirely from their Perl
packaging is a dumb thing to do. This is a standard Perl module, that
one would normally expect to accompany every Perl distribution.)

So far as I can tell, Fedora has treated ExtUtils::Embed as a separate
RPM for a long time (at least since F-7). The recent change seems to be
that it's not required by perl-devel anymore, rather by perl-core (where
perl-core is defined as "everything in the upstream tarball from
perl.org"). So possibly it's just a matter of users not getting the
word as to what they should install.

regards, tom lane