Changeset 11974


Ignore:
Timestamp:
04/12/12 21:16:16 (13 years ago)
Author:
Eric.Larour
Message:

New macros to implement API transparent wrappers, which can be hooked up to Python or Matlab.
pythonincludes now relies on the NumPY C API instead of the boost python bindings.

Location:
issm/trunk-jpl/src/c
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/Makefile.am

    r11952 r11974  
    695695#}}}
    696696#Matlab sources  {{{1
    697 matlab_sources= ./shared/Matlab/matlabshared.h\
    698                                     ./shared/Matlab/mxGetAssignedField.cpp\
    699                                     ./shared/Matlab/CheckNumMatlabArguments.cpp\
    700                                     ./toolkits/matlab/matlabincludes.h\
     697matlab_sources= ./toolkits/matlab/matlabincludes.h\
    701698                                    ./toolkits/matlab/MatlabNArrayToNArray.cpp\
    702699                                    ./toolkits/double/MatlabVectorToDoubleVector.cpp\
     
    704701                                    ./toolkits/double/MatlabMatrixToDoubleMatrix.cpp\
    705702                                    ./io/Matlab/matlabio.h\
     703                                    ./io/Matlab/CheckNumMatlabArguments.cpp\
     704                                    ./io/Matlab/mxGetAssignedField.cpp\
    706705                                    ./io/Matlab/WriteMatlabData.cpp\
    707706                                    ./io/Matlab/FetchMatlabData.cpp\
     
    711710python_sources=     ./io/Python/pythonio.h\
    712711                                    ./io/Python/WritePythonData.cpp\
     712                                    ./io/Python/CheckNumPythonArguments.cpp\
    713713                                    ./io/Python/FetchPythonData.cpp
    714714#}}}
     
    934934libISSM_a_SOURCES += $(bamg_sources)
    935935libISSM_a_SOURCES += $(kml_sources)
    936 libISSM_a_CXXFLAGS = -fPIC -D_SERIAL_ -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS)
     936dnl libISSM_a_CXXFLAGS = -fPIC -D_SERIAL_ -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS)
     937libISSM_a_CXXFLAGS = -D_SERIAL_ -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER   $(CXXFLAGS) $(CXXOPTFLAGS)
    937938
    938939if PYTHON
     
    963964bin_PROGRAMS =
    964965else
    965 bin_PROGRAMS = issm
     966bin_PROGRAMS = issm issm2
    966967endif
    967968
     
    974975issm_SOURCES = solutions/issm.cpp
    975976issm_CXXFLAGS= -fPIC -D_PARALLEL_ $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS)
     977issm2_SOURCES = solutions/issm2.cpp
     978issm2_CXXFLAGS= $(issm_CXXFLAGS)
     979
    976980#}}}
    977981#Automatic differentiation: append this fold to the end of the src/c/Makefile.am to get this Makefile.am {{{
  • issm/trunk-jpl/src/c/include/macros.h

    r11943 r11974  
    4040#endif
    4141/*}}}*/
     42
    4243/* MODULEBOOT/MODULEEND {{{1*/
    4344
     
    6263#endif //}}}
    6364#ifdef _HAVE_PYTHON_ //{{{2
    64 #define MODULEBOOT(); ModuleBoot(); \
    65         try{
     65#define MODULEBOOT(); ModuleBoot();  \
     66        PyObject* output = PyTuple_New(NLHS); if (!output) return NULL;
    6667
    67 #define MODULEEND();  ModuleEnd(); }\
    68         catch(ErrorException &exception){\
    69                 exception.Report(); \
    70                 return; \
    71         }\
    72         catch (exception& e) {\
    73                 _printf_(true,"Standard exception: %s\n",e.what());\
    74                 return;\
    75         }
     68#define MODULEEND();  ModuleEnd(); \
     69                                                 return output;
    7670#endif //}}}
    7771#else
     
    9791#endif
    9892#ifdef _HAVE_PYTHON_
    99 #define WRAPPER(modulename,...) void modulename(__VA_ARGS__)
     93#define WRAPPER(modulename,...)  \
     94\
     95static PyObject* modulename(PyObject* self,PyObject* args);\
     96static PyMethodDef modulename##_funcs[] = {\
     97        {#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
     98        {NULL,NULL,0,NULL}\
     99};\
     100\
     101static struct PyModuleDef modulename##module= {\
     102        PyModuleDef_HEAD_INIT,\
     103        #modulename,   /* name of module */\
     104        NULL, /* module documentation, may be NULL */\
     105        -1,       /* size of per-interpreter state of the module,\
     106                                 or -1 if the module keeps state in global variables. */\
     107        modulename##_funcs\
     108};\
     109\
     110PyMODINIT_FUNC PyInit_##modulename(void){\
     111\
     112        import_array();\
     113        return PyModule_Create(&modulename##module);\
     114}\
     115\
     116static PyObject* modulename(PyObject* self,PyObject* args)
     117
    100118#endif
     119
    101120/*}}}*/
    102121/* CHECKARGUMENTS {{{1*/
     
    105124#endif
    106125#ifdef _HAVE_PYTHON_
    107 #define CHECKARGUMENTS(NLHS,NRHS,functionpointer)
     126#define CHECKARGUMENTS(NLHS,NRHS,functionpointer) CheckNumPythonArguments(args, NRHS,functionpointer)
    108127#endif
    109128/*}}}*/
    110129
     130
    111131#endif
  • issm/trunk-jpl/src/c/toolkits/python/pythonincludes.h

    r11939 r11974  
    66#define _PYTHON_INCLUDES_H_
    77
     8
     9#include "Python.h"
     10#include "arrayobject.h"
     11
     12
     13
     14#ifdef _HAVE_BOOST_
    815using namespace std;
    9 
     16#include <boost/python/def.hpp>
    1017#include <boost/python.hpp>
    11 #include <boost/python/def.hpp>
    12 #include <numpy/arrayobject.h>
    1318#include <boost/python/module.hpp>
    14 
    1519using namespace boost::python;
    1620typedef boost::python::numeric::array pyArray;
     21#endif
     22
    1723
    1824#endif
Note: See TracChangeset for help on using the changeset viewer.