On Jul 25, 8:35 pm, [EMAIL PROTECTED] (Rajnikant)
wrote:
> Hello All,
>
> I'm trying to call C routine from Perl using XS but some how my 'make test'
> is failing. Following are the steps I did :
>
> file: hypotenuse.h
> double hypotenuse(double x, double y); /* Func Declaration */
> file: hypotenuse.c
> /* Func Definition */
> double hypotenuse(double x, double y)
> {
> return sqrt(x*x + y*y);
> }
>
I would probably just create a Makefile.PL that looks like:
----------------------------------
use ExtUtils::MakeMaker;
my %options = (
'NAME' => 'Geometry',
'VERSION' => '0.01'
);
WriteMakefile(%options);
# Remove the Makefile dependency. Causes problems on a few systems.
sub MY::makefile { '' }
----------------------------------
a Geometry.pm that looks like:
----------------------------------
package Geometry;
use strict;
require Exporter;
*import = \&Exporter::import;
require DynaLoader;
$Geometry::VERSION = '0.01';
DynaLoader::bootstrap Geometry $Geometry::VERSION;
@Geometry::EXPORT = ();
@Geometry::EXPORT_OK = ('hypotenuse');
sub dl_load_flags {0} # Prevent DynaLoader from complaining and
croaking
1;
----------------------------------
a Geometry.xs that looks like:
----------------------------------
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
double hypotenuse(double x, double y) {
return sqrt(x*x + y*y);
}
MODULE = Geometry PACKAGE = Geometry
PROTOTYPES: DISABLE
double
hypotenuse (x, y)
double x
double y
----------------------------------
and a test.pl that looks like:
----------------------------------
use warnings;
use strict;
use Geometry 'hypotenuse';
print "1..1\n";
if(hypotenuse(5, 12) == 13) {print "ok 1\n"}
else {print "not ok 1\n"}
----------------------------------
I used InlineX::C2XS (needs Inline::C) to autogenerate the first 3 of
those 4 files - though there's some very minor hand editing that went
on as well wrt the Makefile.PL and Geometry.pm.
'test.pl' was written entirely by hand.
The source file that InlineX::C2XS used (./src/Geometry.c) looked
like:
----------------------------------
double hypotenuse(double x, double y) {
return sqrt(x*x + y*y);
}
----------------------------------
Cheers,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/