blob: efc87d72a3884944dd4cd5c75702c2fe4cf0b506 [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
Guido van Rossum6deac7a1998-04-03 21:11:15 +00006#ifdef MS_WIN32
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 Rossum73bacfc1998-01-19 22:05:22 +000012#ifdef HAVE_UNISTD_H
13#include <unistd.h> /* For isatty() */
14#endif
15
Guido van Rossum1a8791e1998-08-04 22:46:29 +000016/* For isatty()'s proto. - [cjh] */
17#ifdef HAVE_UNISTD_H
18#include <unistd.h>
19#endif
20
Guido van Rossum47ad5e71995-08-04 04:10:43 +000021/* Main program */
22
23int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000024Py_FrozenMain(int argc, char **argv)
Guido van Rossumf56e3db1993-04-01 20:59:32 +000025{
26 char *p;
Guido van Rossum094885b1993-11-05 10:16:09 +000027 int n, sts;
28 int inspect = 0;
Guido van Rossum1d5735e1994-08-30 08:27:36 +000029 int unbuffered = 0;
30
Guido van Rossum919b83d1998-02-06 22:30:29 +000031 Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
32
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000033 if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
Guido van Rossum9e90a671993-06-24 11:10:19 +000034 inspect = 1;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000035 if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
Guido van Rossum1d5735e1994-08-30 08:27:36 +000036 unbuffered = 1;
Guido van Rossum9e90a671993-06-24 11:10:19 +000037
Guido van Rossum1d5735e1994-08-30 08:27:36 +000038 if (unbuffered) {
Guido van Rossumc425d2f1997-12-02 20:41:39 +000039 setbuf(stdin, (char *)NULL);
Guido van Rossum1d5735e1994-08-30 08:27:36 +000040 setbuf(stdout, (char *)NULL);
41 setbuf(stderr, (char *)NULL);
42 }
43
Guido van Rossum47ae0281999-01-02 21:42:48 +000044#ifdef MS_WIN32
45 PyInitFrozenExtensions();
46#endif /* MS_WIN32 */
Guido van Rossum3768fb11997-07-19 19:24:41 +000047 Py_SetProgramName(argv[0]);
48 Py_Initialize();
Guido van Rossum6deac7a1998-04-03 21:11:15 +000049#ifdef MS_WIN32
50 PyWinFreeze_ExeInit();
51#endif
Guido van Rossum3768fb11997-07-19 19:24:41 +000052
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000053 if (Py_VerboseFlag)
Guido van Rossum1d5735e1994-08-30 08:27:36 +000054 fprintf(stderr, "Python %s\n%s\n",
Guido van Rossum582646a1996-05-28 22:30:17 +000055 Py_GetVersion(), Py_GetCopyright());
Guido van Rossum3768fb11997-07-19 19:24:41 +000056
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000057 PySys_SetArgv(argc, argv);
Guido van Rossum9e90a671993-06-24 11:10:19 +000058
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000059 n = PyImport_ImportFrozenModule("__main__");
Guido van Rossumf56e3db1993-04-01 20:59:32 +000060 if (n == 0)
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000061 Py_FatalError("__main__ not frozen");
Guido van Rossumf56e3db1993-04-01 20:59:32 +000062 if (n < 0) {
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000063 PyErr_Print();
Guido van Rossum9e90a671993-06-24 11:10:19 +000064 sts = 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +000065 }
66 else
Guido van Rossum9e90a671993-06-24 11:10:19 +000067 sts = 0;
68
Guido van Rossumf1dc5661993-07-05 10:31:29 +000069 if (inspect && isatty((int)fileno(stdin)))
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000070 sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
Guido van Rossum9e90a671993-06-24 11:10:19 +000071
Guido van Rossum6deac7a1998-04-03 21:11:15 +000072#ifdef MS_WIN32
73 PyWinFreeze_ExeTerm();
74#endif
Guido van Rossum7c141031997-08-15 02:52:08 +000075 Py_Finalize();
76 return sts;
Guido van Rossumf56e3db1993-04-01 20:59:32 +000077}