[GRASS5] Swig interface for Grass

Ari Jolma ari.jolma at tkk.fi
Tue Aug 30 10:25:44 EDT 2005


[note: this discussion got initiated outside this list]

Markus Neteler wrote:

>One example as "seed" may be sufficient to get other people
>interested, something like a proof of concept. This may break
>the barrier to do more python and perl with GRASS.
>  
>

Well, I managed to get a Grass error message from a Perl program :)

I made a simple Swig interface file into which I added the main() from 
r.slope.aspect with a new name:

int r_slope_aspect (int argc, char **argv);

With this I get the wrapper code and the Grass Perl module. Then I made 
a simple Makefile.PL for the Perl extension, which lists the shared 
grass libs and object code files from the wrapper and the 
r_slope_aspect. Makefile.PL is standard, after running it gives 
Makefile, which is for making the necessary binaries for the Grass 
module and installing the module etc. I put into the test code a 
function call:

Grass::r_slope_aspect(1,['abc']);

which gives me the Grass error "ERROR: LOCATION_NAME not set"

I have a Grass database and I get the same error running r.slope.aspect.

I had to comment out a lot of declarations from gisdefs.h because the 
functions are non-existing and Perl does not tolerate that.

The tedious part would be to write typemaps for all structs in Grass 
code. Converting all modules into functions is a more difficult job but 
could probably be automated (with a suitable Perl program of course).

Ari

-- 
Prof. Ari Jolma
Kartografia ja Geoinformatiikka / Cartography and Geoinformatics
Teknillinen Korkeakoulu / Helsinki University of Technology
POBox 1200, 02015 TKK, Finland
Email: ari.jolma at tkk.fi URL: http://www.tkk.fi/~jolma




More information about the grass-dev mailing list