use PyImport_ExtendInittab for py module initialization rather then adding to sys...
authorCampbell Barton <ideasman42@gmail.com>
Fri, 29 Oct 2010 22:59:39 +0000 (22:59 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 29 Oct 2010 22:59:39 +0000 (22:59 +0000)
13 files changed:
intern/audaspace/intern/AUD_C-API.cpp
source/blender/python/generic/bgl.c
source/blender/python/generic/bgl.h
source/blender/python/generic/blf_api.c
source/blender/python/generic/blf_api.h
source/blender/python/generic/mathutils.c
source/blender/python/generic/mathutils.h
source/blender/python/generic/mathutils_geometry.c
source/blender/python/generic/mathutils_geometry.h
source/blender/python/generic/noise.c
source/blender/python/intern/bpy.c
source/blender/python/intern/bpy_interface.c
source/blender/python/intern/bpy_operator.c

index d22d9e6c434152aeb3af5bd56f137e6eb21cfe03..38732fc13e15d6cfb9b3b850af4bb074ff35be13 100644 (file)
@@ -197,7 +197,7 @@ PyObject* AUD_initPython()
 {
        PyObject* module = PyInit_aud();
        PyModule_AddObject(module, "device", (PyObject *)PyCFunction_New(meth_getcdevice, NULL));
-       PyDict_SetItemString(PySys_GetObject("modules"), "aud", module);
+       PyDict_SetItemString(PyImport_GetModuleDict(), "aud", module);
        if(AUD_device)
        {
                g_device = (Device*)Device_empty();
index 86b7bc522feb4ca0e4ced7b7a0109f6595fa965c..321152ab581c64aee6ca19864eb177c6278367ff 100644 (file)
@@ -1115,12 +1115,11 @@ static struct PyModuleDef BGL_module_def = {
 };
 
 
-PyObject *BGL_Init(void)
+PyObject *BPyInit_bgl(void)
 {
-       PyObject *mod, *dict, *item;
-       mod = PyModule_Create(&BGL_module_def);
-       PyDict_SetItemString(PyImport_GetModuleDict(), BGL_module_def.m_name, mod);
-       dict= PyModule_GetDict(mod);
+       PyObject *submodule, *dict, *item;
+       submodule= PyModule_Create(&BGL_module_def);
+       dict= PyModule_GetDict(submodule);
        
        if( PyType_Ready( &BGL_bufferType) < 0)
                return NULL; /* should never happen */
@@ -1612,6 +1611,6 @@ PyObject *BGL_Init(void)
        EXPP_ADDCONST(GL_TEXTURE_BINDING_1D);
        EXPP_ADDCONST(GL_TEXTURE_BINDING_2D);
       
-       return mod;
+       return submodule;
 }
 
index 80b0b90f643e9541ffc18e131a142fa4158cf2ec..5e40cda311458d3517bfa67937db6c9e395cb5c5 100644 (file)
@@ -38,7 +38,7 @@
 
 #include <Python.h>
 
-PyObject *BGL_Init(void);
+PyObject *BPyInit_bgl(void);
 
 /*@ Create a buffer object */
 /*@ dimensions is an array of ndimensions integers representing the size of each dimension */
index 66d8cdd923aa5652b6b9fa88071c333226dfeefc..80e140b7eac418a7e14e8cf0d2f92447e72a0d49 100644 (file)
@@ -390,17 +390,16 @@ static struct PyModuleDef BLF_module_def = {
        0,  /* m_free */
 };
 
-PyObject *BLF_Init(void)
+PyObject *BPyInit_blf(void)
 {
        PyObject *submodule;
 
        submodule = PyModule_Create(&BLF_module_def);
-       PyDict_SetItemString(PyImport_GetModuleDict(), BLF_module_def.m_name, submodule);
 
        PyModule_AddIntConstant(submodule, "ROTATION", BLF_ROTATION);
        PyModule_AddIntConstant(submodule, "CLIPPING", BLF_CLIPPING);
        PyModule_AddIntConstant(submodule, "SHADOW", BLF_SHADOW);
        PyModule_AddIntConstant(submodule, "KERNING_DEFAULT", BLF_KERNING_DEFAULT);
 
-       return (submodule);
+       return submodule;
 }
index fae20ace9965401e577bb42a2a1875d2a44e0927..db17f62337bf7fe51b17d4f7380a94f79d21565f 100644 (file)
@@ -22,5 +22,4 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-
-PyObject *BLF_Init(void);
+PyObject *BPyInit_blf(void);
index f6b291622e32795f72af2349a42de596d9f13136..4f54ee9e90e542214704c66bde48da4a19b3d4e1 100644 (file)
@@ -245,12 +245,10 @@ static struct PyModuleDef M_Mathutils_module_def = {
        0,  /* m_free */
 };
 
-PyObject *Mathutils_Init(void)
+PyMODINIT_FUNC BPyInit_mathutils(void)
 {
        PyObject *submodule;
-       
-       
-       
+
        if( PyType_Ready( &vector_Type ) < 0 )
                return NULL;
        if( PyType_Ready( &matrix_Type ) < 0 )
@@ -263,7 +261,6 @@ PyObject *Mathutils_Init(void)
                return NULL;
 
        submodule = PyModule_Create(&M_Mathutils_module_def);
-       PyDict_SetItemString(PyImport_GetModuleDict(), M_Mathutils_module_def.m_name, submodule);
        
        /* each type has its own new() function */
        PyModule_AddObject( submodule, "Vector",                (PyObject *)&vector_Type );
@@ -273,9 +270,9 @@ PyObject *Mathutils_Init(void)
        PyModule_AddObject( submodule, "Color",                 (PyObject *)&color_Type );
        
        /* submodule */
-       PyModule_AddObject( submodule, "geometry",                      Geometry_Init());
+       PyModule_AddObject( submodule, "geometry",              BPyInit_mathutils_geometry());
        
        mathutils_matrix_vector_cb_index= Mathutils_RegisterCallback(&mathutils_matrix_vector_cb);
 
-       return (submodule);
+       return submodule;
 }
index d5dc48bd5898e14524236015c55bbd68d0cedeca..22f1536bb10468f9feaac5e927d57d610f6fc314 100644 (file)
@@ -61,8 +61,7 @@ PyObject *BaseMathObject_getOwner( BaseMathObject * self, void * );
 PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void * );
 void BaseMathObject_dealloc(BaseMathObject * self);
 
-PyObject *Mathutils_Init(void);
-PyObject *Noise_Init(void); /* lazy, saves having own header */
+PyMODINIT_FUNC BPyInit_mathutils(void);
 
 int EXPP_FloatsAreEqual(float A, float B, int floatSteps);
 int EXPP_VectorsAreEqual(float *vecA, float *vecB, int size, int floatSteps);
index 1644a502fa8edcf0b35c0bf9a5aef6baafee302d..e57eb4ce83d481879117afb73c2a561b1e105684 100644 (file)
@@ -830,12 +830,8 @@ static struct PyModuleDef M_Geometry_module_def = {
 };
 
 /*----------------------------MODULE INIT-------------------------*/
-PyObject *Geometry_Init(void)
+PyMODINIT_FUNC BPyInit_mathutils_geometry(void)
 {
-       PyObject *submodule;
-
-       submodule = PyModule_Create(&M_Geometry_module_def);
-       PyDict_SetItemString(PyImport_GetModuleDict(), M_Geometry_module_def.m_name, submodule);
-
-       return (submodule);
+       PyObject *submodule= PyModule_Create(&M_Geometry_module_def);
+       return submodule;
 }
index 401efcc788834b905b770ebe48012d0d5967502e..3d3f7c606a492d83f186f98c38dee23c75e2c015 100644 (file)
@@ -34,6 +34,6 @@
 #include <Python.h>
 #include "mathutils.h"
 
-PyObject *Geometry_Init(void);
+PyMODINIT_FUNC BPyInit_mathutils_geometry(void);
 
 #endif                         /* EXPP_Geometry_H */
index a9bbc016a54f1faf4fe3fa342d83bfbf7647795e..b12ca47bdda86ced078023ffd834256f0defb499 100644 (file)
@@ -122,8 +122,6 @@ static int left = 1;
 static int initf = 0;
 static unsigned long *next;
 
-PyObject *Noise_Init(void);
-
 /* initializes state[N] with a seed */
 static void init_genrand(unsigned long s)
 {
@@ -657,10 +655,9 @@ static struct PyModuleDef noise_module_def = {
        0,  /* m_free */
 };
 
-PyObject *Noise_Init(void)
+PyObject *BPyInit_noise(void)
 {
        PyObject *submodule = PyModule_Create(&noise_module_def);
-       PyDict_SetItemString(PyImport_GetModuleDict(), noise_module_def.m_name, submodule);
 
        /* use current time as seed for random number generator by default */
        setRndSeed(0);  
index 5a74e8412d11f9ebc54cf2a62c4cbed4dc16bd5f..3461f1eb65dd9f7bfd973a1fb519720fa1e6001e 100644 (file)
@@ -195,12 +195,7 @@ void BPy_init_modules( void )
                printf("bpy: couldnt find 'scripts/modules', blender probably wont start.\n");
        }
        /* stand alone utility modules not related to blender directly */
-       Mathutils_Init();
-       Noise_Init();
-       BGL_Init();
-       BLF_Init();
-       IDProp_Init_Types();
-       AUD_initPython();
+       IDProp_Init_Types(); /* not actually a submodule, just types */
 
        mod = PyModule_New("_bpy");
 
index 47b4c11494486197c0158644fa31c282603243c3..ab8a355be47ac7195fc734b82449db83baa5f30d 100644 (file)
@@ -196,6 +196,22 @@ void BPY_set_context(bContext *C)
        BPy_SetContext(C);
 }
 
+/* init-tab */
+extern PyObject *BPyInit_noise(void);
+extern PyObject *BPyInit_mathutils(void);
+extern PyObject *BPyInit_bgl(void);
+extern PyObject *BPyInit_blf(void);
+extern PyObject *AUD_initPython(void);
+
+static struct _inittab bpy_internal_modules[]= {
+       {"noise", BPyInit_noise},
+       {"mathutils", BPyInit_mathutils},
+       {"bgl", BPyInit_bgl},
+       {"blf", BPyInit_blf},
+       {"aud", AUD_initPython},
+       {NULL, NULL}
+};
+
 /* call BPY_set_context first */
 void BPY_start_python( int argc, char **argv )
 {
@@ -206,6 +222,9 @@ void BPY_start_python( int argc, char **argv )
        utf8towchar(bprogname_wchar, bprogname);
        Py_SetProgramName(bprogname_wchar);
 
+       /* builtin modules */
+       PyImport_ExtendInittab(bpy_internal_modules);
+
        BPY_start_python_path(); /* allow to use our own included python */
 
        Py_Initialize(  );
index 3ffa78dab7003aa5c6c53996a787fdc2dec66f27..1cf99218bf6f21cd19e6ff2aaad8e7dcd6b0b032 100644 (file)
@@ -313,14 +313,8 @@ static struct PyModuleDef bpy_ops_module = {
 PyObject *BPY_operator_module(void)
 {
        PyObject *submodule;
-       
-       submodule= PyModule_Create(&bpy_ops_module);
-       PyDict_SetItemString(PyImport_GetModuleDict(), bpy_ops_module.m_name, submodule);
 
-       /* INCREF since its its assumed that all these functions return the
-        * module with a new ref like PyDict_New, since they are passed to
-         * PyModule_AddObject which steals a ref */
-       Py_INCREF(submodule);
+       submodule= PyModule_Create(&bpy_ops_module);
 
        return submodule;
 }