diff options
| -rw-r--r-- | build/linux/Makefile.in | 10 | ||||
| -rw-r--r-- | matlab/mex/astra_mex_plugin_c.cpp | 25 | ||||
| -rw-r--r-- | matlab/mex/mexInitFunctions.cpp | 8 | 
3 files changed, 42 insertions, 1 deletions
| diff --git a/build/linux/Makefile.in b/build/linux/Makefile.in index d5644bc..57ed8f8 100644 --- a/build/linux/Makefile.in +++ b/build/linux/Makefile.in @@ -95,6 +95,11 @@ ifeq ($(cuda),yes)  MEXFLAGS += -DASTRA_CUDA  endif +ifeq ($(python),yes) +MEXPYLDFLAGS='$$LDFLAGS $(LDFLAGS) -L$(PYLIBDIR)' +MEXPYLIBS=$(MEXLIBS) -l$(PYLIBVER) +endif +  endif  LIBDIR=/usr/local/lib @@ -265,6 +270,11 @@ mex: $(MATLAB_MEX)  %.$(MEXSUFFIX): %.o $(MATLAB_CXX_OBJECTS) libastra.la  	$(MEX) LDFLAGS=$(MEXLDFLAGS) $(MEXFLAGS) $(LIBS) $(MEXLIBS) -lastra -output $* $*.o $(MATLAB_CXX_OBJECTS) + +ifeq ($(python),yes) +matlab/mex/astra_mex_plugin_c.$(MEXSUFFIX): matlab/mex/astra_mex_plugin_c.o $(MATLAB_CXX_OBJECTS) libastra.la +	$(MEX) LDFLAGS=$(MEXPYLDFLAGS) $(MEXFLAGS) $(LIBS) $(MEXPYLIBS) -lastra -output matlab/mex/astra_mex_plugin_c $< $(MATLAB_CXX_OBJECTS) +endif  endif  ifeq ($(python),yes) diff --git a/matlab/mex/astra_mex_plugin_c.cpp b/matlab/mex/astra_mex_plugin_c.cpp index 627e34a..9bd4446 100644 --- a/matlab/mex/astra_mex_plugin_c.cpp +++ b/matlab/mex/astra_mex_plugin_c.cpp @@ -37,11 +37,32 @@ $Id$  #include "astra/PluginAlgorithm.h" +#include <Python.h> +  using namespace std;  using namespace astra;  //----------------------------------------------------------------------------------------- +/** astra_mex_plugin('init'); + * + * Initialize plugin support by initializing python and importing astra + */ +void astra_mex_plugin_init() +{ +    if(!Py_IsInitialized()){ +        Py_Initialize(); +        PyEval_InitThreads(); +    } + +    // Importing astra may be overkill, since we only need to initialize +    // PythonPluginAlgorithmFactory from astra.plugin_c. +    PyObject *mod = PyImport_ImportModule("astra"); +    Py_DECREF(mod); +} + + +//-----------------------------------------------------------------------------------------  /** astra_mex_plugin('get_registered');   *   * Print registered plugins. @@ -128,7 +149,9 @@ void mexFunction(int nlhs, mxArray* plhs[],  	initASTRAMex();  	// SWITCH (MODE) -	if (sMode ==  std::string("get_registered")) { +	if (sMode == "init") { +		astra_mex_plugin_init(); +	} else if (sMode ==  std::string("get_registered")) {  		astra_mex_plugin_get_registered(nlhs, plhs, nrhs, prhs);  	}else if (sMode ==  std::string("get_help")) {  		astra_mex_plugin_get_help(nlhs, plhs, nrhs, prhs); diff --git a/matlab/mex/mexInitFunctions.cpp b/matlab/mex/mexInitFunctions.cpp index bd3df2c..7245af2 100644 --- a/matlab/mex/mexInitFunctions.cpp +++ b/matlab/mex/mexInitFunctions.cpp @@ -23,5 +23,13 @@ void initASTRAMex(){      if(!astra::CLogger::setCallbackScreen(&logCallBack)){          mexErrMsgTxt("Error initializing mex functions.");      } +      mexIsInitialized=true; + + +    // If we have support for plugins, initialize them. +    // (NB: Call this after setting mexIsInitialized, to avoid recursively +    //      calling initASTRAMex) +    mexEvalString("if exist('astra_mex_plugin_c') == 3; astra_mex_plugin_c('init'); end"); +  } | 
