From: Tamas P. <tk...@gm...> - 2008-07-23 12:29:59
|
Hi, I would like to use SWIG to generate Common Lisp wrappers for some Fortran code. It appears that Fortran is not one of the 18 target languages, yet on http://www.swig.org/projects.html, people talk about having used SWIG for Fortran. What is the trick? Thanks, Tamas |
From: Ben W. <be...@sa...> - 2008-07-23 15:58:40
|
Tamas Papp wrote: > I would like to use SWIG to generate Common Lisp wrappers for some > Fortran code. It appears that Fortran is not one of the 18 tar get > languages, yet on http://www.swig.org/projects.html, people talk about > having used SWIG for Fortran. What is the trick? One way is to first write C wrappers for your Fortran code. The resulting C API can then be wrapped by SWIG; a C API also makes it a lot easier to link against your code from other languages such as C or C++. For example, given a Fortran subroutine: SUBROUTINE myfunc_f(i, f, s) INTEGER :: i REAL :: f CHARACTER(*) :: s END SUBROUTINE myfunc_f You could write a C wrapper function similar to: void myfunc_c(int i, float f, char *s) { myfunc_f_(&i, &f, s, s ? strlen(s) : 0); } Obviously this is a little dependent on your Fortran compiler's name mangling (whether it adds an underscore or not, and for routines in Fortran 90 modules, whether it adds the module name) and the positioning of the 'hidden argument' for string lengths. Ben -- be...@sa... http://salilab.org/~ben/ "It is a capital mistake to theorize before one has data." - Sir Arthur Conan Doyle |