Home | History | Annotate | Download | only in python
      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