blob: e742172494ee00966f335613469e84a37cc4db42 [file] [log] [blame]
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001
2/* Python interpreter main program for frozen scripts */
3
Guido van Rossum4e2e0f91995-03-31 10:27:23 +00004#include "Python.h"
Guido van Rossumf56e3db1993-04-01 20:59:32 +00005
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00006#ifdef MS_WINDOWS
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00007extern void PyWinFreeze_ExeInit(void);
8extern void PyWinFreeze_ExeTerm(void);
9extern int PyInitFrozenExtensions(void);
Guido van Rossum6deac7a1998-04-03 21:11:15 +000010#endif
11
Guido van Rossum47ad5e71995-08-04 04:10:43 +000012/* Main program */
13
14int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000015Py_FrozenMain(int argc, char **argv)
Guido van Rossumf56e3db1993-04-01 20:59:32 +000016{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000017 char *p;
18 int n, sts;
19 int inspect = 0;
20 int unbuffered = 0;
Guido van Rossum1d5735e1994-08-30 08:27:36 +000021
Antoine Pitrouc83ea132010-05-09 14:46:46 +000022 Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
Guido van Rossum919b83d1998-02-06 22:30:29 +000023
Antoine Pitrouc83ea132010-05-09 14:46:46 +000024 if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
25 inspect = 1;
26 if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
27 unbuffered = 1;
Guido van Rossum9e90a671993-06-24 11:10:19 +000028
Antoine Pitrouc83ea132010-05-09 14:46:46 +000029 if (unbuffered) {
30 setbuf(stdin, (char *)NULL);
31 setbuf(stdout, (char *)NULL);
32 setbuf(stderr, (char *)NULL);
33 }
Guido van Rossum1d5735e1994-08-30 08:27:36 +000034
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000035#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +000036 PyInitFrozenExtensions();
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000037#endif /* MS_WINDOWS */
Benjamin Peterson4cc93db2015-02-14 15:17:25 -050038 if (argc >= 1)
39 Py_SetProgramName(argv[0]);
Antoine Pitrouc83ea132010-05-09 14:46:46 +000040 Py_Initialize();
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000041#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +000042 PyWinFreeze_ExeInit();
Guido van Rossum6deac7a1998-04-03 21:11:15 +000043#endif
Guido van Rossum3768fb11997-07-19 19:24:41 +000044
Antoine Pitrouc83ea132010-05-09 14:46:46 +000045 if (Py_VerboseFlag)
46 fprintf(stderr, "Python %s\n%s\n",
47 Py_GetVersion(), Py_GetCopyright());
Guido van Rossum3768fb11997-07-19 19:24:41 +000048
Antoine Pitrouc83ea132010-05-09 14:46:46 +000049 PySys_SetArgv(argc, argv);
Guido van Rossum9e90a671993-06-24 11:10:19 +000050
Antoine Pitrouc83ea132010-05-09 14:46:46 +000051 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;
Guido van Rossum9e90a671993-06-24 11:10:19 +000060
Antoine Pitrouc83ea132010-05-09 14:46:46 +000061 if (inspect && isatty((int)fileno(stdin)))
62 sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
Guido van Rossum9e90a671993-06-24 11:10:19 +000063
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000064#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +000065 PyWinFreeze_ExeTerm();
Guido van Rossum6deac7a1998-04-03 21:11:15 +000066#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +000067 Py_Finalize();
68 return sts;
Guido van Rossumf56e3db1993-04-01 20:59:32 +000069}