blob: d31da077085e71d50dcccb7a559f5f41e68dbfb6 [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 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +000038 Py_SetProgramName(argv[0]);
39 Py_Initialize();
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000040#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +000041 PyWinFreeze_ExeInit();
Guido van Rossum6deac7a1998-04-03 21:11:15 +000042#endif
Guido van Rossum3768fb11997-07-19 19:24:41 +000043
Antoine Pitrouc83ea132010-05-09 14:46:46 +000044 if (Py_VerboseFlag)
45 fprintf(stderr, "Python %s\n%s\n",
46 Py_GetVersion(), Py_GetCopyright());
Guido van Rossum3768fb11997-07-19 19:24:41 +000047
Antoine Pitrouc83ea132010-05-09 14:46:46 +000048 PySys_SetArgv(argc, argv);
Guido van Rossum9e90a671993-06-24 11:10:19 +000049
Antoine Pitrouc83ea132010-05-09 14:46:46 +000050 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;
Guido van Rossum9e90a671993-06-24 11:10:19 +000059
Antoine Pitrouc83ea132010-05-09 14:46:46 +000060 if (inspect && isatty((int)fileno(stdin)))
61 sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
Guido van Rossum9e90a671993-06-24 11:10:19 +000062
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000063#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +000064 PyWinFreeze_ExeTerm();
Guido van Rossum6deac7a1998-04-03 21:11:15 +000065#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +000066 Py_Finalize();
67 return sts;
Guido van Rossumf56e3db1993-04-01 20:59:32 +000068}