Should /opt/local/bin/perl be deleted too ?

robert delius royar apple at frinabulax.org
Sat Dec 22 05:37:46 PST 2007


Sat, 22 Dec 2007 (00:54 +0100 UTC) Vincent Lefevre wrote:

> On 2007-12-21 10:34:00 -0500, robert delius royar wrote:
>> I compiled perl 5.10.0 with the same configuration that macports 5.8.8
>> used.  [I have the perl5.8 port set as the primary perl interpretor and
>> have created links in /usr/local/[bin|lib|share] to make it so that
>> other software finds macports perl before the system one--including
>> apache.]
>>
>> When I tried to run a module through 5.10.0 from CPAN (Net::TiVo),
>> 5.10.0 failed because a bundle from macports (p5-digest-sha1) referenced
>> a symbol not in the 5.10.0 version:
> [...]
>
> I'd say that you probably need to recompile every module (well, those
> that don't contain just Perl code) against 5.10. BTW, that may be a
> reason to have a single Perl port installed (activated). Otherwise
> the risk of using some module with a different Perl version for which
> it has been built would be too high IMHO.

I have the latest version of perl5.8.8 (from macports) installed:
  % port installed perl5.8
  The following ports are currently installed:
    perl5.8 @5.8.8_0+darwin_8+shared+threads
  % port outdated perl5.8
  No installed ports are outdated
However, occasionally I have had to abort installs of other software 
because that software requires perl5.8 and tries to install it.  I would 
not want that to be the case with software wrt perl5.10 because that 
could hose a system with a lot of perl 5.8 modules that have been 
compiled and linked into bundles.

>
>> dyld: lazy symbol binding failed: Symbol not found: _Perl_Tstack_sp_ptr
>>   Referenced from: /opt/local/lib/perl5/site_perl/5.10.0/darwin-thread-multi-2level/auto/Digest/SHA1/SHA1.bundle
>>   Expected in: dynamic lookup
>>
>> dyld: Symbol not found: _Perl_Tstack_sp_ptr
>>   Referenced from: /opt/local/lib/perl5/site_perl/5.10.0/darwin-thread-multi-2level/auto/Digest/SHA1/SHA1.bundle
>>   Expected in: dynamic lookup
>>
>> Trace/BPT trap
>>
>> I suspect there may be a number of these. Perl_Tstack_sp_ptr() was in
>> CORE in 5.8.  I believe that it is part of the pre-5.8 legacy code and
>> in there for compatibility with verions that expected functions for what
>> are array or incrementable pointer variables.
>>
>> It is defined in the 5.8.8 source in perlapi.h but not defined anywhere
>> in the 5.10.0 source.
>
> I don't know what you try to mean exactly, but Digest-SHA1 2.11 is
> compatible with Perl 5.10 as you can see:
>
>  http://cpantesters.perl.org/show/Digest-SHA1.html

The API has changed and the symbol Perl_Tstack_sp_ptr is not in the 
current API.  It was in 5.8.8 and before.  The discussion I have been 
able to Google points to this symbol being a problem if old code is not 
recompiled with the new libperl.

I think moving up to perl5.10 is more drastic for the user than was 
5.6 to 5.8.  Somehow the user should be warned that all bundles (I 
suppose mod-perl and its companionions, also) will need to be 
reinstalled or recompiled for 5.10

Because macports does not add any earlier directories to @INC, the user 
would just see these errors as not being able to locate a module, rather 
than the missing symbol error.  Still, it means a bit of work for 
someone who has a number of bundles.  The user should be told that ahead 
of time.

> Vincent Lefèvre <vincent at vinc17.org> - Web: <http://www.vinc17.org/>
> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
> Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

-- 
Dr. Robert Delius Royar                   Associate Professor of English
Morehead State University                             Morehead, Kentucky


More information about the macports-dev mailing list