I've done a bit of investigating and here's what I make of this problem:

In your generated Makefile, there is a line like this:

    $(PERL) -Mblib -MInline=NOISY,_INSTALL_ -MRabbit -e1 0.14 $(INST_ARCHLIB)

The way I figured Inline works is as such: each time it is 'use'd with
the DATA keyword, it stores an reference to an object describing the
Inline section in question in a list. Later, inside an INIT block, it
loops through the list and "glues" each section.

In the above scenario, it is used twice with DATA: once with Rabbit
and once with Turtle. So when in compares the correct version with
$ARGV[0], it's good for Rabbit but not for Turtle.

Basically I see only one way of fixing this: in _INSTALL_ mode, stop
everything after having processed the first Inline section.

During these tests I also noticed such a message popping up:

    One or more DATA sections were not processed by Inline. 

This basically happens sometimes because depending when/how Inline is
loaded, the INIT block never gets run so the gathered Inline section
never get processed.

I'm thinking one should expect this to work:

    require Turtle ;
    Turtle->relative_speed() ;

But it doesn't unless you say "use Turtle"? Is this a known/documented
bug/feature?


On Apr 6, 2005 7:59 AM, Nicholas Wehr <[EMAIL PROTECTED]> wrote:
>  Actually, this code is just an example of my code... Turtle is just a
> Inline::C module that I wrote months ago, and would like to use some of it's
> functions in Rabbit.  The header part is virtually the same.  So, Turtle
> could be...
>  
>  #!/usr/bin/perl
> package Turtle;
> my $VERSION = '1.17';
> use Inline C => 'DATA',
>  VERSION => '1.17',
>  NAME => 'Turtle',
>  OPTIMIZE => '-g',
>  CLEAN_AFTER_BUILD => 0,
>  ;
> 
> use 5.008;
> use strict;
> use warnings;
> 
> 
> sub relative_speed {
>  my ($self, $arg) = @_;
>  return _relative_speed($arg);
> }
> 
> 1;
> 
>  __DATA__
>  int _relative_speed(int arg) {
>      int speed;
>      speed = arg * 0.25;
>      return speed;
>  }
>  
>  -------------------------------------------------
>  
>  thank you!
> 
>  
>  Patrick LeBoutillier wrote: 
>  Nicholas,
> 
> Can you send the code for Turtle.pm (or at least the "use Inline" part)?
> 
> Patrick
> 
> On Apr 5, 2005 2:15 PM, Nicholas Wehr <[EMAIL PROTECTED]> wrote:
>  
>  
>  Sorry I wan't clearer. Here's an example of what I'm doing. Rabbit is
> 
> the new module version 0.14. It is trying to 'use' an installed module
> 'Turtle' version 1.17. They both use Inline::C. Inline is generating
> this error during make:
> 
>  
>  
>  The version '0.14' for module 'Turtle' doe not match
> the version '1.17' for Inline section 'Turtle'.
>  
>  Here's the example Inline module:
> 
> #!/usr/bin/perl
> package Rabbit;
> my $VERSION = '0.14';
> use Inline C => 'DATA',
>  VERSION => '0.14',
>  NAME => 'Rabbit',
>  OPTIMIZE => '-g',
>  CLEAN_AFTER_BUILD => 0,
>  FILTERS => 'Strip_POD',
>  ;
> 
> use 5.008;
> use strict;
> use warnings;
> use Turtle; # <-- the problem happens here during compile
> 
> sub gauge_speed {
>  my $self = shift;
>  $self->proc_speed();
>  my $turtle_result = Turtle->relative_speed($self->speed);
>  die $! unless $turtle_result;
>  return $turtle_result;
> }
> 
> Thanks!
> 
> 
>  
>  
>  
>  
>  


-- 
=====================
Patrick LeBoutllier
Laval, Québec, Canada

Reply via email to