1 // 2 // embed.i 3 // SWIG file embedding the Python interpreter in something else. 4 // This file is based on Python-1.5. It will not work with 5 // earlier versions. 6 // 7 // This file makes it possible to extend Python and all of its 8 // built-in functions without having to hack its setup script. 9 // 10 11 12 #ifdef AUTODOC 13 %subsection "embed.i" 14 %text %{ 15 This module provides support for building a new version of the 16 Python executable. This will be necessary on systems that do 17 not support shared libraries and may be necessary with C++ 18 extensions. This file contains everything you need to build 19 a new version of Python from include files and libraries normally 20 installed with the Python language. 21 22 This module will automatically grab all of the Python modules 23 present in your current Python executable (including any special 24 purpose modules you have enabled such as Tkinter). Thus, you 25 may need to provide additional link libraries when compiling. 26 27 This library file only works with Python 1.5. A version 28 compatible with Python 1.4 is available as embed14.i and 29 a Python1.3 version is available as embed13.i. As far as 30 I know, this module is C++ safe. 31 %} 32 #else 33 %echo "embed.i : Using Python 1.5" 34 #endif 35 36 %wrapper %{ 37 38 #include <Python.h> 39 40 #ifdef __cplusplus 41 extern "C" 42 #endif 43 void SWIG_init(); /* Forward reference */ 44 45 #define _PyImport_Inittab swig_inittab 46 47 /* Grab Python's inittab[] structure */ 48 49 #ifdef __cplusplus 50 extern "C" { 51 #endif 52 #include <config.c> 53 54 #undef _PyImport_Inittab 55 56 /* Now define our own version of it. 57 Hopefully someone does not have more than 1000 built-in modules */ 58 59 struct _inittab SWIG_Import_Inittab[1000]; 60 61 static int swig_num_modules = 0; 62 63 /* Function for adding modules to Python */ 64 65 static void swig_add_module(char *name, void (*initfunc)()) { 66 SWIG_Import_Inittab[swig_num_modules].name = name; 67 SWIG_Import_Inittab[swig_num_modules].initfunc = initfunc; 68 swig_num_modules++; 69 SWIG_Import_Inittab[swig_num_modules].name = (char *) 0; 70 SWIG_Import_Inittab[swig_num_modules].initfunc = 0; 71 } 72 73 /* Function to add all of Python's build in modules to our interpreter */ 74 75 static void swig_add_builtin() { 76 int i = 0; 77 while (swig_inittab[i].name) { 78 swig_add_module(swig_inittab[i].name, swig_inittab[i].initfunc); 79 i++; 80 } 81 #ifdef SWIGMODINIT 82 SWIGMODINIT 83 #endif 84 /* Add SWIG builtin function */ 85 swig_add_module(SWIG_name, SWIG_init); 86 } 87 88 #ifdef __cplusplus 89 } 90 #endif 91 92 #ifdef __cplusplus 93 extern "C" { 94 #endif 95 96 extern int Py_Main(int, char **); 97 98 #ifdef __cplusplus 99 } 100 #endif 101 102 extern struct _inittab *PyImport_Inittab; 103 104 int 105 main(int argc, char **argv) { 106 swig_add_builtin(); 107 PyImport_Inittab = SWIG_Import_Inittab; 108 return Py_Main(argc,argv); 109 } 110 111 %} 112 113 114 115 116