Thanks much Rob

The versions are
$ perl -le 'require Inline;print $Inline::VERSION'
0.45
$ perl -le 'require Parse::RecDescent;print $Parse::RecDescent::VERSION'
1.94

FWIW my sense is that the uninitialized hash value leads to a missing entry in the typemap for 'double *'. I can recreate the compilation error with this test code, which works fine with the C++ function addDouble removed:

#!/usr/bin/perl
use warnings;
use lib '/opt/local/lib/perl5/site_perl/5.8.9/';

print "9 + 16 = ", add(9, 16), "\n";

use Inline CPP => <<'END';

int add(int x, int y) {
  return x + y;
}

double addDouble( double *x, double *y ) {
        return x[0] + y[0];
}

END



Below are lines 875 ff from /private/var/vpfiles/_Inline/build/ VirtualPlant/Analysis/Correlation/CorrelationCalc_fa1b/ CorrelationCalc_fa1b.xs
double
BetaI(x, pin, qin)
        double  x
        double  pin
        double  qin

double
LnBeta(a, b)
        double  a
        double  b

double
d9lgmc(x)
        double  x

double
LogRel(x)
        double  x

double
LnGamma(x)
        double  x

double
Gamma(x)
        double  x

int
initds(os, nos, eta)
        double *        os
        int     nos
        double  eta

double *
getFlArray(sv)
        SV *    sv

void
dgamlm(xmin, xmax)
        double &    xmin
        double &    xmax
    PREINIT:
        I32 *   __temp_markstack_ptr;
    PPCODE:
        __temp_markstack_ptr = PL_markstack_ptr++;
        dgamlm(xmin,xmax);
        if (PL_markstack_ptr != __temp_markstack_ptr) {
          /* truly void, because dXSARGS not invoked */
          PL_markstack_ptr = __temp_markstack_ptr;
          XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
        return; /* assume stack size is correct */

double
dcsevl(x, cs, n)
        double  x
        double *        cs
        int     n

double
Dint(d)
        double  d




Also, ultimately I think it would be great to modify the Inline CPP's Makefile.PL so that it selects the right compiler and library on Mac OS X.

BR
A

On Jun 9, 2009, at 9:07 AM, Sisyphus wrote:


----- Original Message ----- From: "ARTHUR GOLDBERG" <a...@cs.nyu.edu>

and the compilation finally dies with
/usr/bin/perl /System/Library/Perl/5.8.8/ExtUtils/xsubpp  -typemap /
System/Library/Perl/5.8.8/ExtUtils/typemap   CorrelationCalc_fa1b.xs
> CorrelationCalc_fa1b.xsc && mv CorrelationCalc_fa1b.xsc
CorrelationCalc_fa1b.c\nError: 'double *' not in typemap in
CorrelationCalc_fa1b.xs, line 904\nError: 'double *' not in typemap
in CorrelationCalc_fa1b.xs, line 910\nError: 'double *' not in
typemap in CorrelationCalc_fa1b.xs, line 932\nmake: ***

I should know how to generate that error ... but apparently I don't.
Could you provide us with lines 904, 910 and 932 of
/private/var/vpfiles/_Inline/build/VirtualPlant/Analysis/Correlation/ CorrelationCalc_fa1b/CorrelationCalc_fa1b.xs (and maybe a few lines either side for context, if you think that might help).

Also, what version of Inline, and what version of Parse::RecDescent do you have:
perl -le 'require Inline;print $Inline::VERSION'
perl -le 'require Parse::RecDescent;print $Parse::RecDescent::VERSION'

Cheers,
Rob




Reply via email to