1 
2 /* Python interpreter main program for frozen scripts */
3 
4 #include "Python.h"
5 
6 #ifdef MS_WINDOWS
7 extern void PyWinFreeze_ExeInit(void);
8 extern void PyWinFreeze_ExeTerm(void);
9 extern int PyInitFrozenExtensions(void);
10 #endif
11 
12 /* Main program */
13 
14 int
Py_FrozenMain(int argc,char ** argv)15 Py_FrozenMain(int argc, char **argv)
16 {
17     char *p;
18     int n, sts;
19     int inspect = 0;
20     int unbuffered = 0;
21 
22     Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
23 
24     if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
25         inspect = 1;
26     if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
27         unbuffered = 1;
28 
29     if (unbuffered) {
30         setbuf(stdin, (char *)NULL);
31         setbuf(stdout, (char *)NULL);
32         setbuf(stderr, (char *)NULL);
33     }
34 
35 #ifdef MS_WINDOWS
36     PyInitFrozenExtensions();
37 #endif /* MS_WINDOWS */
38     if (argc >= 1)
39         Py_SetProgramName(argv[0]);
40     Py_Initialize();
41 #ifdef MS_WINDOWS
42     PyWinFreeze_ExeInit();
43 #endif
44 
45     if (Py_VerboseFlag)
46         fprintf(stderr, "Python %s\n%s\n",
47             Py_GetVersion(), Py_GetCopyright());
48 
49     PySys_SetArgv(argc, argv);
50 
51     n = PyImport_ImportFrozenModule("__main__");
52     if (n == 0)
53         Py_FatalError("__main__ not frozen");
54     if (n < 0) {
55         PyErr_Print();
56         sts = 1;
57     }
58     else
59         sts = 0;
60 
61     if (inspect && isatty((int)fileno(stdin)))
62         sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
63 
64 #ifdef MS_WINDOWS
65     PyWinFreeze_ExeTerm();
66 #endif
67     Py_Finalize();
68     return sts;
69 }
70