[Date Prev][Date Next]
Re: compiling back-perl with perl 5.8.0
The perl backend needs a little updating.
I can't remember the details right now, but how we build back-perl
depends on how perl itself was built. The needed change is due to the
change in the perl embed api between versions 5.6 and 5.6.1, I believe.
Currently, If perl is built with MULTIPLICITY ( which allows more than
one interpreter to run ) then OpenLDAP could crash on the first use of
the interpreter in a thread that did not create it. Thats because
PERL_SET_CONTEXT macro has to be called with the interpreter needed.
The new MULTIPLICITY flag is where most of the change occurs, and to be
more precise, some of the changes protected by HAVE_WIN32_ASPERL should
be protected under HAVE_PERL_MULTIPLICITY which should be set at config
time using 'perl -V' autoconf type test to figure out if it is needed.
Do a 'perl -V' and check what defines perl was built with.
The 'my_perl' errors are due to the new naming of the implicit perl
interpreter variable, I believe. It use to be called something else.
Another perl define that may need to be looked at is IMPLICIT_CONTEXT
http://perldoc.com/perl5.8.0/pod/perlembed.html for more info.
I'd be happy to help anyone who's interested in making the updates.
Matthew J Backes wrote:
Under perl 5.8.0, I cannot get the perl backend to compile as
cc -g -O2 -I../../../include -I../../../include -I.. -I./.. -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/perl/5.8.0/CORE -c init.c -fPIC -DPIC -o .libs/init.lo
init.c: In function `perl_back_initialize':
init.c:74: warning: passing arg 2 of `perl_parse' from incompatible pointer type
init.c: In function `perl_back_db_open':
init.c:147: `my_perl' undeclared (first use in this function)
init.c:147: (Each undeclared identifier is reported only once
init.c:147: for each function it appears in.)
init.c: In function `perl_back_xs_init':
init.c:182: `my_perl' undeclared (first use in this function)
init.c:182: warning: passing arg 3 of `Perl_newXS' from incompatible pointer type
(Debian Linux, Sid, Intel, gcc 2.95.4, perl 5.8.0, openldap 2.1.8)
Yet if I define HAVE_WIN32_ASPERL, all of the necessary 5.8.0 changes are made and it compiles fine. I think.
export CPPFLAGS='-DHAVE_WIN32_ASPERL' doesn't work as then everything
tries to include "asperl_undefs.h" which doesn't exist on this
system... enabling it in perl_back.h works around this, but is
clearly not the right way to fix the problem.
running "perl -MExtUtils::Embed -e ccopts" reports:
-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/perl/5.8.0/CORE
running "perl -MExtUtils::Embed -e ldopts" reports:
-rdynamic -L/usr/local/lib /usr/lib/perl/5.8.0/auto/DynaLoader/DynaLoader.a -L/usr/lib/perl/5.8.0/CORE -lperl -ldl -lm -lpthread -lc -lcrypt
Has anyone else had similar experience with the perl-backend?