source: git/Singular/dyn_modules/python/python_module.cc @ 4cb8c8

spielwiese
Last change on this file since 4cb8c8 was 4cb8c8, checked in by Hans Schoenemann <hannes@…>, 4 years ago
fix: mod_init if no HAVE_PYTHON
  • Property mode set to 100644
File size: 2.1 KB
Line 
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
25static 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//  )
57extern "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\
74path.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
82extern "C" int SI_MOD_INIT(python_module)(SModulFunctions* psModulFunctions)
83{
84  PrintS("no python_mod support\n");
85  return MAX_TOK;
86}
87#endif
Note: See TracBrowser for help on using the repository browser.