Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/mantaflow/patches/local_namespace.diff')
-rw-r--r--extern/mantaflow/patches/local_namespace.diff86
1 files changed, 86 insertions, 0 deletions
diff --git a/extern/mantaflow/patches/local_namespace.diff b/extern/mantaflow/patches/local_namespace.diff
new file mode 100644
index 00000000000..41bc1696772
--- /dev/null
+++ b/extern/mantaflow/patches/local_namespace.diff
@@ -0,0 +1,86 @@
+diff --git a/extern/mantaflow/helper/pwrapper/registry.cpp b/extern/mantaflow/helper/pwrapper/registry.cpp
+index 5196c0409f8..b4206a41dea 100644
+--- a/extern/mantaflow/helper/pwrapper/registry.cpp
++++ b/extern/mantaflow/helper/pwrapper/registry.cpp
+@@ -115,7 +115,7 @@ class WrapperRegistry {
+ void construct(const std::string &scriptname, const vector<string> &args);
+ void cleanup();
+ void renameObjects();
+- void runPreInit();
++ void runPreInit(PyObject *name_space);
+ PyObject *initModule();
+ ClassData *lookup(const std::string &name);
+ bool canConvert(ClassData *from, ClassData *to);
+@@ -505,7 +505,7 @@ void WrapperRegistry::addConstants(PyObject *module)
+ }
+ }
+
+-void WrapperRegistry::runPreInit()
++void WrapperRegistry::runPreInit(PyObject *name_space)
+ {
+ // add python directories to path
+ PyObject *sys_path = PySys_GetObject((char *)"path");
+@@ -518,7 +518,15 @@ void WrapperRegistry::runPreInit()
+ }
+ if (!mCode.empty()) {
+ mCode = "from manta import *\n" + mCode;
+- PyRun_SimpleString(mCode.c_str());
++ PyObject *return_value = PyRun_String(mCode.c_str(), Py_file_input, name_space, name_space);
++ if (return_value == nullptr) {
++ if (PyErr_Occurred()) {
++ PyErr_Print();
++ }
++ }
++ else {
++ Py_DECREF(return_value);
++ }
+ }
+ }
+
+@@ -698,16 +706,23 @@ PyObject *WrapperRegistry::initModule()
+ //******************************************************
+ // Register members and exposed functions
+
+-void setup(const std::string &filename, const std::vector<std::string> &args)
++void setup(const bool python_lifecycle,
++ const std::string &filename,
++ const std::vector<std::string> &args,
++ PyObject *name_space)
+ {
+ WrapperRegistry::instance().construct(filename, args);
+- Py_Initialize();
+- WrapperRegistry::instance().runPreInit();
++ if (python_lifecycle) {
++ Py_Initialize();
++ }
++ WrapperRegistry::instance().runPreInit(name_space);
+ }
+
+-void finalize()
++void finalize(const bool python_lifecycle)
+ {
+- Py_Finalize();
++ if (python_lifecycle) {
++ Py_Finalize();
++ }
+ WrapperRegistry::instance().cleanup();
+ }
+
+diff --git a/extern/mantaflow/helper/pwrapper/registry.h b/extern/mantaflow/helper/pwrapper/registry.h
+index d9d2bbb624b..2273d0b9bb1 100644
+--- a/extern/mantaflow/helper/pwrapper/registry.h
++++ b/extern/mantaflow/helper/pwrapper/registry.h
+@@ -48,8 +48,11 @@ template<class T> struct Namify {
+ namespace Pb {
+
+ // internal registry access
+-void setup(const std::string &filename, const std::vector<std::string> &args);
+-void finalize();
++void setup(bool python_lifecycle,
++ const std::string &filename,
++ const std::vector<std::string> &args,
++ PyObject *name_space);
++void finalize(bool python_lifecycle);
+ bool canConvert(PyObject *obj, const std::string &to);
+ Manta::PbClass *objFromPy(PyObject *obj);
+ Manta::PbClass *createPy(const std::string &classname,