frozenmain.c 1.41 KB
Newer Older
1 2 3

/* Python interpreter main program for frozen scripts */

Guido van Rossum's avatar
Guido van Rossum committed
4
#include "Python.h"
5

6
#ifdef MS_WINDOWS
7 8 9
extern void PyWinFreeze_ExeInit(void);
extern void PyWinFreeze_ExeTerm(void);
extern int PyInitFrozenExtensions(void);
10 11
#endif

12 13 14
/* Main program */

int
15
Py_FrozenMain(int argc, char **argv)
16
{
17 18 19 20
    char *p;
    int n, sts;
    int inspect = 0;
    int unbuffered = 0;
21

22
    Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
23

24 25 26 27
    if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
        inspect = 1;
    if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
        unbuffered = 1;
28

29 30 31 32 33
    if (unbuffered) {
        setbuf(stdin, (char *)NULL);
        setbuf(stdout, (char *)NULL);
        setbuf(stderr, (char *)NULL);
    }
34

35
#ifdef MS_WINDOWS
36
    PyInitFrozenExtensions();
37
#endif /* MS_WINDOWS */
38 39
    Py_SetProgramName(argv[0]);
    Py_Initialize();
40
#ifdef MS_WINDOWS
41
    PyWinFreeze_ExeInit();
42
#endif
43

44 45 46
    if (Py_VerboseFlag)
        fprintf(stderr, "Python %s\n%s\n",
            Py_GetVersion(), Py_GetCopyright());
47

48
    PySys_SetArgv(argc, argv);
49

50 51 52 53 54 55 56 57 58
    n = PyImport_ImportFrozenModule("__main__");
    if (n == 0)
        Py_FatalError("__main__ not frozen");
    if (n < 0) {
        PyErr_Print();
        sts = 1;
    }
    else
        sts = 0;
59

60 61
    if (inspect && isatty((int)fileno(stdin)))
        sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
62

63
#ifdef MS_WINDOWS
64
    PyWinFreeze_ExeTerm();
65
#endif
66 67
    Py_Finalize();
    return sts;
68
}