1
2/* Python interpreter main program for frozen scripts */
3
4#include "Python.h"
5
6#ifdef MS_WINDOWS
7extern void PyWinFreeze_ExeInit(void);
8extern void PyWinFreeze_ExeTerm(void);
9extern int PyInitFrozenExtensions(void);
10#endif
11
12/* Main program */
13
14int
15Py_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    Py_SetProgramName(argv[0]);
39    Py_Initialize();
40#ifdef MS_WINDOWS
41    PyWinFreeze_ExeInit();
42#endif
43
44    if (Py_VerboseFlag)
45        fprintf(stderr, "Python %s\n%s\n",
46            Py_GetVersion(), Py_GetCopyright());
47
48    PySys_SetArgv(argc, argv);
49
50    n = PyImport_ImportFrozenModule("__main__");
51    if (n == 0)
52        Py_FatalError("__main__ not frozen");
53    if (n < 0) {
54        PyErr_Print();
55        sts = 1;
56    }
57    else
58        sts = 0;
59
60    if (inspect && isatty((int)fileno(stdin)))
61        sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
62
63#ifdef MS_WINDOWS
64    PyWinFreeze_ExeTerm();
65#endif
66    Py_Finalize();
67    return sts;
68}
69