]> git.saurik.com Git - wxWidgets.git/blame - wxPython/wxSWIG/swig_lib/python/embed14.i
compilation error fix (trailing comma in an enum)
[wxWidgets.git] / wxPython / wxSWIG / swig_lib / python / embed14.i
CommitLineData
c90f71dd
RD
1//
2// embed.i
3// SWIG file embedding the Python interpreter in something else.
4// This file is based on Python-1.4.
5//
6// This file makes it possible to extend Python and all of its
7// built-in functions without having to hack it's setup script.
8//
9
10
11#ifdef AUTODOC
12%subsection "embed.i"
13%text %{
14This module provides support for building a new version of the
15Python executable. This will be necessary on systems that do
16not support shared libraries and may be necessary with C++
17extensions. This file contains everything you need to build
18a new version of Python from include files and libraries normally
19installed with the Python language.
20
21This module will automatically grab all of the Python modules
22present in your current Python executable (including any special
23purpose modules you have enabled such as tkinter). Thus, you
24may need to provide additional link libraries when compiling.
25
26This library file only works with Python 1.4. A version compatible
27with Python 1.3 is available as embed13.i. A Python 1.5 version is
28available as embed15.i As far as I know, this module is C++ safe
29(well, it works for me).
30%}
31#else
32%echo "embed.i : Using Python 1.4"
33#endif
34
35%wrapper %{
36#ifndef NEED_GETOPT
37#include <unistd.h>
38#endif
39
40#include <pythonrun.h>
41
42#ifdef __cplusplus
43extern "C"
44#endif
45void SWIG_init(); /* Forward reference */
46
47#define inittab python_inittab
48
49/* Grab Python's inittab[] structure */
50
51#ifdef __cplusplus
52extern "C" {
53#endif
54#include <config.c>
55
56#undef inittab
57
58/* Now define our own version of it.
59 Hopefully someone does not have more than 1000 built-in modules */
60
61struct _inittab inittab[1000];
62
63static int swig_num_modules = 0;
64
65/* Function for adding modules to Python */
66
67
68static void swig_add_module(char *name, void (*initfunc)()) {
69 inittab[swig_num_modules].name = name;
70 inittab[swig_num_modules].initfunc = initfunc;
71 swig_num_modules++;
72 inittab[swig_num_modules].name = (char *) 0;
73 inittab[swig_num_modules].initfunc = 0;
74}
75
76/* Function to add all of Python's build in modules to our interpreter */
77
78static void swig_add_builtin() {
79 int i = 0;
80 while (python_inittab[i].name) {
81 swig_add_module(python_inittab[i].name, python_inittab[i].initfunc);
82 i++;
83 }
84#ifdef SWIGMODINIT
85 SWIGMODINIT
86#endif
87 /* Add SWIG builtin function */
88 swig_add_module(SWIG_name, SWIG_init);
89}
90
91#ifdef __cplusplus
92}
93#endif
94
95/* Interface to getopt(): */
96extern int optind;
97extern char *optarg;
98#ifdef NEED_GETOPT
99#ifdef __cplusplus
100extern "C" int getopt(int, char **, char *);
101#else
102extern int getopt(); /* PROTO((int, char **, char *)); -- not standardized */
103#endif
104#endif
105
106extern int Py_DebugFlag; /* For parser.c, declared in pythonrun.c */
107extern int Py_VerboseFlag; /* For import.c, declared in pythonrun.c */
108extern int Py_SuppressPrintingFlag; /* For ceval.c, declared in pythonrun.c */
109
110/* Subroutines that live in their own file */
111#ifdef __cplusplus
112extern "C" {
113extern int isatty(int fd);
114extern void PySys_SetArgv(int, char **);
115#endif
116extern char *Py_GetVersion();
117extern char *Py_GetCopyright();
118#ifdef __cplusplus
119}
120#endif
121
122/* For getprogramname(); set by main() */
123static char *argv0;
124
125/* For getargcargv(); set by main() */
126static char **orig_argv;
127static int orig_argc;
128
129/* Short usage message (with %s for argv0) */
130static char *usage_line =
131"usage: %s [-d] [-i] [-s] [-u ] [-v] [-c cmd | file | -] [arg] ...\n";
132
133/* Long usage message, split into parts < 512 bytes */
134static char *usage_top = "\n\
135Options and arguments (and corresponding environment variables):\n\
136-d : debug output from parser (also PYTHONDEBUG=x)\n\
137-i : inspect interactively after running script (also PYTHONINSPECT=x)\n\
138-s : suppress printing of top level expressions (also PYTHONSUPPRESS=x)\n\
139-u : unbuffered stdout and stderr (also PYTHONUNBUFFERED=x)\n\
140-v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
141-c cmd : program passed in as string (terminates option list)\n\
142";
143static char *usage_bot = "\
144file : program read from script file\n\
145- : program read from stdin (default; interactive mode if a tty)\n\
146arg ...: arguments passed to program in sys.argv[1:]\n\
147\n\
148Other environment variables:\n\
149PYTHONSTARTUP: file executed on interactive startup (no default)\n\
150PYTHONPATH : colon-separated list of directories prefixed to the\n\
151 default module search path. The result is sys.path.\n\
152";
153
154/* Main program */
155
156int
157main(int argc, char **argv) {
158 int c;
159 int sts;
160 char *command = NULL;
161 char *filename = NULL;
162 FILE *fp = stdin;
163 char *p;
164 int inspect = 0;
165 int unbuffered = 0;
166
167 swig_add_builtin(); /* Add SWIG built-in modules */
168 orig_argc = argc; /* For getargcargv() */
169 orig_argv = argv;
170 argv0 = argv[0]; /* For getprogramname() */
171
172 if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
173 Py_DebugFlag = 1;
174 if ((p = getenv("PYTHONSUPPRESS")) && *p != '\0')
175 Py_SuppressPrintingFlag = 1;
176 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
177 Py_VerboseFlag = 1;
178 if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
179 inspect = 1;
180 if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
181 unbuffered = 1;
182
183 while ((c = getopt(argc, argv, "c:disuv")) != EOF) {
184 if (c == 'c') {
185 /* -c is the last option; following arguments
186 that look like options are left for the
187 the command to interpret. */
188 command = (char *) malloc(strlen(optarg) + 2);
189 if (command == NULL)
190 Py_FatalError(
191 "not enough memory to copy -c argument");
192 strcpy(command, optarg);
193 strcat(command, "\n");
194 break;
195 }
196
197 switch (c) {
198
199 case 'd':
200 Py_DebugFlag++;
201 break;
202
203 case 'i':
204 inspect++;
205 break;
206
207 case 's':
208 Py_SuppressPrintingFlag++;
209 break;
210
211 case 'u':
212 unbuffered++;
213 break;
214
215 case 'v':
216 Py_VerboseFlag++;
217 break;
218
219 /* This space reserved for other options */
220
221 default:
222 fprintf(stderr, usage_line, argv[0]);
223 fprintf(stderr, usage_top);
224 fprintf(stderr, usage_bot);
225 exit(2);
226 /*NOTREACHED*/
227
228 }
229 }
230
231 if (unbuffered) {
232#ifndef MPW
233 setbuf(stdout, (char *)NULL);
234 setbuf(stderr, (char *)NULL);
235#else
236 /* On MPW (3.2) unbuffered seems to hang */
237 setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
238 setvbuf(stderr, (char *)NULL, _IOLBF, BUFSIZ);
239#endif
240 }
241
242 if (command == NULL && optind < argc &&
243 strcmp(argv[optind], "-") != 0)
244 filename = argv[optind];
245
246 if (Py_VerboseFlag ||
247 command == NULL && filename == NULL && isatty((int)fileno(fp)))
248 fprintf(stderr, "Python %s\n%s\n",
249 Py_GetVersion(), Py_GetCopyright());
250
251 if (filename != NULL) {
252 if ((fp = fopen(filename, "r")) == NULL) {
253 fprintf(stderr, "%s: can't open file '%s'\n",
254 argv[0], filename);
255 exit(2);
256 }
257 }
258
259 Py_Initialize();
260 if (command != NULL) {
261 /* Backup optind and force sys.argv[0] = '-c' */
262 optind--;
263 argv[optind] = "-c";
264 }
265
266 PySys_SetArgv(argc-optind, argv+optind);
267
268 if (command) {
269 sts = PyRun_SimpleString(command) != 0;
270 }
271 else {
272 if (filename == NULL && isatty((int)fileno(fp))) {
273 char *startup = getenv("PYTHONSTARTUP");
274 if (startup != NULL && startup[0] != '\0') {
275 FILE *fp = fopen(startup, "r");
276 if (fp != NULL) {
277 (void) PyRun_SimpleFile(fp, startup);
278 PyErr_Clear();
279 fclose(fp);
280 }
281 }
282 }
283 sts = PyRun_AnyFile(
284 fp, filename == NULL ? "<stdin>" : filename) != 0;
285 if (filename != NULL)
286 fclose(fp);
287 }
288
289 if (inspect && isatty((int)fileno(stdin)) &&
290 (filename != NULL || command != NULL))
291 sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
292
293 Py_Exit(sts);
294 /*NOTREACHED*/
295}
296
297
298/* Return the program name -- some code out there needs this. */
299
300#ifdef __cplusplus
301extern "C"
302#endif
303
304char *
305Py_GetProgramName()
306{
307 return argv0;
308}
309
310
311/* Make the *original* argc/argv available to other modules.
312 This is rare, but it is needed by the secureware extension. */
313
314#ifdef __cplusplus
315extern "C"
316#endif
317void
318getargcargv(int *argc,char ***argv)
319{
320 *argc = orig_argc;
321 *argv = orig_argv;
322}
323
324/* Total Hack to get getpath.c to compile under C++ */
325
326#ifdef __cplusplus
327#define malloc (char *) malloc
328extern "C" {
329#endif
330#include <getpath.c>
331#ifdef __cplusplus
332}
333#undef malloc
334#endif
335
336%}
337
338
339
340