blob: 2fb1c2e8b6b61e65712d843716ad7e4eed91fc1b [file] [log] [blame]
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf56e3db1993-04-01 20:59:32 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf56e3db1993-04-01 20:59:32 +00009******************************************************************/
10
11/* Python interpreter main program for frozen scripts */
12
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000013#include "Python.h"
Guido van Rossumf56e3db1993-04-01 20:59:32 +000014
Guido van Rossum6deac7a1998-04-03 21:11:15 +000015#ifdef MS_WIN32
16extern void PyWinFreeze_ExeInit();
17extern void PyWinFreeze_ExeTerm();
Guido van Rossum47ae0281999-01-02 21:42:48 +000018extern int PyInitFrozenExtensions();
Guido van Rossum6deac7a1998-04-03 21:11:15 +000019#endif
20
Guido van Rossum73bacfc1998-01-19 22:05:22 +000021#ifdef HAVE_UNISTD_H
22#include <unistd.h> /* For isatty() */
23#endif
24
Guido van Rossum1a8791e1998-08-04 22:46:29 +000025/* For isatty()'s proto. - [cjh] */
26#ifdef HAVE_UNISTD_H
27#include <unistd.h>
28#endif
29
Guido van Rossum47ad5e71995-08-04 04:10:43 +000030/* Main program */
31
32int
Guido van Rossuma9414511997-07-19 21:59:47 +000033Py_FrozenMain(argc, argv)
Guido van Rossumf56e3db1993-04-01 20:59:32 +000034 int argc;
35 char **argv;
36{
37 char *p;
Guido van Rossum094885b1993-11-05 10:16:09 +000038 int n, sts;
39 int inspect = 0;
Guido van Rossum1d5735e1994-08-30 08:27:36 +000040 int unbuffered = 0;
41
Guido van Rossum919b83d1998-02-06 22:30:29 +000042 Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
43
Guido van Rossum9e90a671993-06-24 11:10:19 +000044 if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
45 inspect = 1;
Guido van Rossum1d5735e1994-08-30 08:27:36 +000046 if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
47 unbuffered = 1;
Guido van Rossum9e90a671993-06-24 11:10:19 +000048
Guido van Rossum1d5735e1994-08-30 08:27:36 +000049 if (unbuffered) {
Guido van Rossumc425d2f1997-12-02 20:41:39 +000050 setbuf(stdin, (char *)NULL);
Guido van Rossum1d5735e1994-08-30 08:27:36 +000051 setbuf(stdout, (char *)NULL);
52 setbuf(stderr, (char *)NULL);
53 }
54
Guido van Rossum47ae0281999-01-02 21:42:48 +000055#ifdef MS_WIN32
56 PyInitFrozenExtensions();
57#endif /* MS_WIN32 */
Guido van Rossum3768fb11997-07-19 19:24:41 +000058 Py_SetProgramName(argv[0]);
59 Py_Initialize();
Guido van Rossum6deac7a1998-04-03 21:11:15 +000060#ifdef MS_WIN32
61 PyWinFreeze_ExeInit();
62#endif
Guido van Rossum3768fb11997-07-19 19:24:41 +000063
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000064 if (Py_VerboseFlag)
Guido van Rossum1d5735e1994-08-30 08:27:36 +000065 fprintf(stderr, "Python %s\n%s\n",
Guido van Rossum582646a1996-05-28 22:30:17 +000066 Py_GetVersion(), Py_GetCopyright());
Guido van Rossum3768fb11997-07-19 19:24:41 +000067
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000068 PySys_SetArgv(argc, argv);
Guido van Rossum9e90a671993-06-24 11:10:19 +000069
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000070 n = PyImport_ImportFrozenModule("__main__");
Guido van Rossumf56e3db1993-04-01 20:59:32 +000071 if (n == 0)
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000072 Py_FatalError("__main__ not frozen");
Guido van Rossumf56e3db1993-04-01 20:59:32 +000073 if (n < 0) {
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000074 PyErr_Print();
Guido van Rossum9e90a671993-06-24 11:10:19 +000075 sts = 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +000076 }
77 else
Guido van Rossum9e90a671993-06-24 11:10:19 +000078 sts = 0;
79
Guido van Rossumf1dc5661993-07-05 10:31:29 +000080 if (inspect && isatty((int)fileno(stdin)))
Guido van Rossum4e2e0f91995-03-31 10:27:23 +000081 sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
Guido van Rossum9e90a671993-06-24 11:10:19 +000082
Guido van Rossum6deac7a1998-04-03 21:11:15 +000083#ifdef MS_WIN32
84 PyWinFreeze_ExeTerm();
85#endif
Guido van Rossum7c141031997-08-15 02:52:08 +000086 Py_Finalize();
87 return sts;
Guido van Rossumf56e3db1993-04-01 20:59:32 +000088}