SUMMARY: Problems running CyrAdm - SOLVED
Nikola Milutinovic
Nikola.Milutinovic at ev.co.yu
Tue Apr 22 06:03:06 EDT 2003
Hi all.
DESCRIPTION
-----------
Just to recap, the problem was that running "cyradm" on Perl-5.8.0 belched an
error saying that there was an undefined symbol "Perl_sv_setsv" in "IMAP.so".
The same modules and the same "cyradm" on Perl-5.6.1 ran just fine (I had some
quirks with authentication, but Ken helped me sort things out).
PROBLEM SOURCE
--------------
It took me some time to track the problem, but here it is. "Perl_sv_setsv" is a
Perl function specific to Perl 5.6. It doesn't exist under 5.8.0 and there are
no macros to "bridge the gap". The idea, if I understand correctly, is to use
"sv_setsv()" which will be expanded via macro into what the actual platform uses.
For 5.6.1 "sv_setsv" expands to "Perl_sv_setsv", while for 5.8.0 it expands to
"Perl_sv_setsv_flags". Normally, "IMAP.so" with such a symbol reference couldn't
be loaded and thus the failure.
SOLUTION
--------
I manually edited IMAP.xs and changed two lines holding "Perl_sv_setsv" to
"sv_setsv" and recompiled. Then I placed newly created "IMAP.so" into Perl
directory and it is working.
As far as I can see "IMAP.xs" is the only file with this, so here is a diff
output (sorry guys, I don't have GNU diff), I hope you can use it.
PATCH
-----
FILE: cyrus-imapd-2.1.12/perl/imap/IMAP.xs
605c605,606
< Perl_sv_setsv(aTHX_ pcb, av_shift(av));
---
> /* Perl_sv_setsv(aTHX_ pcb, av_shift(av)); */
> sv_setsv(aTHX_ pcb, av_shift(av));
608c609,610
< Perl_sv_setsv(aTHX_ pcb, av_shift(av));
---
> /* Perl_sv_setsv(aTHX_ pcb, av_shift(av)); */
> sv_setsv(aTHX_ pcb, av_shift(av));
I hope someone else can test it and post a real patch. I haven't tested it under
5.6.1 yet, but from what I've seen it should work.
Nix.
More information about the Info-cyrus
mailing list