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