1 | #include "kernel/mod2.h" |
---|
2 | #include <stdlib.h> |
---|
3 | #include <stdio.h> |
---|
4 | #include <string.h> |
---|
5 | #include <ctype.h> |
---|
6 | |
---|
7 | #include <unistd.h> |
---|
8 | #include <sys/stat.h> |
---|
9 | #include "Singular/tok.h" |
---|
10 | #include "kernel/structs.h" |
---|
11 | #include "Singular/mod_lib.h" |
---|
12 | #include "Singular/ipid.h" |
---|
13 | |
---|
14 | #include "Singular/locals.h" |
---|
15 | |
---|
16 | #include "omalloc/omalloc.h" |
---|
17 | |
---|
18 | #include <time.h> |
---|
19 | #if defined(HAVE_PYTHON_MOD) && defined(HAVE_PYTHON) |
---|
20 | #include <boost/python.hpp> |
---|
21 | #include <Python.h> |
---|
22 | #include <Python.h> |
---|
23 | #include "wrapper.h" |
---|
24 | |
---|
25 | static BOOLEAN mod_python(leftv __res, leftv __h) |
---|
26 | { |
---|
27 | leftv __v = __h, __v_save; |
---|
28 | int __tok = NONE, __index = 0; |
---|
29 | sleftv __sa; leftv __za = &__sa; |
---|
30 | char * a; |
---|
31 | if(__v==NULL) goto mod_python_error; |
---|
32 | __tok = __v->Typ(); |
---|
33 | if((__index=iiTestConvert(__tok, STRING_CMD))==0) |
---|
34 | goto mod_python_error; |
---|
35 | __v_save = __v->next; |
---|
36 | __v->next = NULL; |
---|
37 | if(iiConvert(__tok, STRING_CMD, __index, __v, __za)) |
---|
38 | goto mod_python_error; |
---|
39 | __v = __v_save; |
---|
40 | a = (char *)__za->Data(); |
---|
41 | if(__v!=NULL) { __tok = __v->Typ(); goto mod_python_error; } |
---|
42 | |
---|
43 | PyRun_SimpleString(a); |
---|
44 | __res->data = NULL; |
---|
45 | __res->rtyp = END_RING; |
---|
46 | return FALSE; |
---|
47 | |
---|
48 | mod_python_error: |
---|
49 | Werror("python(`%s`) is not supported", Tok2Cmdname(__tok)); |
---|
50 | Werror("expected python('string')"); |
---|
51 | return TRUE; |
---|
52 | } |
---|
53 | //int mod_init( |
---|
54 | // int (*iiAddCproc)(char *libname, char *procname, BOOLEAN pstatic, |
---|
55 | // BOOLEAN(*func)(leftv res, leftv v)) |
---|
56 | // ) |
---|
57 | extern "C" int SI_MOD_INIT(python_module)(SModulFunctions* psModulFunctions) |
---|
58 | { |
---|
59 | VAR char *py=getenv("PYTHONPATH"); |
---|
60 | VAR char buf[1024]; |
---|
61 | if (py!=NULL) |
---|
62 | { |
---|
63 | strcpy(buf,py); |
---|
64 | strcat(buf,":"); |
---|
65 | strcat(buf,feResource('s',FALSE)); |
---|
66 | } |
---|
67 | else |
---|
68 | strcpy(buf,feResource('s',FALSE)); |
---|
69 | Print("setting PYTHONAPTH to %s\n",buf); |
---|
70 | setenv("PYTHONPATH",buf,1); |
---|
71 | |
---|
72 | Py_Initialize(); |
---|
73 | PyRun_SimpleString("from sys import path\n\ |
---|
74 | path.insert(0,'.')\n"); |
---|
75 | initSingular(); |
---|
76 | init_Singular(); |
---|
77 | |
---|
78 | psModulFunctions->iiAddCproc(currPack->libname,"python",FALSE, mod_python); |
---|
79 | return MAX_TOK; |
---|
80 | } |
---|
81 | #else |
---|
82 | extern "C" int SI_MOD_INIT(python_module)(SModulFunctions* psModulFunctions) |
---|
83 | { |
---|
84 | PrintS("no python_mod support\n"); |
---|
85 | return MAX_TOK; |
---|
86 | } |
---|
87 | #endif |
---|