frozenmain.c 1.27 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
{
	char *p;
18 19
	int n, sts;
	int inspect = 0;
20 21
	int unbuffered = 0;

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

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

	if (unbuffered) {
30
		setbuf(stdin, (char *)NULL);
31 32 33
		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 42
	PyWinFreeze_ExeInit();
#endif
43

Guido van Rossum's avatar
Guido van Rossum committed
44
	if (Py_VerboseFlag)
45
		fprintf(stderr, "Python %s\n%s\n",
46
			Py_GetVersion(), Py_GetCopyright());
47

Guido van Rossum's avatar
Guido van Rossum committed
48
	PySys_SetArgv(argc, argv);
49

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

60
	if (inspect && isatty((int)fileno(stdin)))
Guido van Rossum's avatar
Guido van Rossum committed
61
		sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
62

63
#ifdef MS_WINDOWS
64 65
	PyWinFreeze_ExeTerm();
#endif
Guido van Rossum's avatar
Guido van Rossum committed
66 67
	Py_Finalize();
	return sts;
68
}