Skip to content

Commit e322cad

Browse files
Create FrozenMain.c
1 parent e1e9ced commit e322cad

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

FrozenMain.c

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/* Python interpreter main program for frozen scripts */
2+
3+
#include "Python.h"
4+
#include "pycore_runtime.h" // _PyRuntime_Initialize()
5+
#include <locale.h>
6+
7+
#ifdef MS_WINDOWS
8+
extern void PyWinFreeze_ExeInit(void);
9+
extern void PyWinFreeze_ExeTerm(void);
10+
extern int PyInitFrozenExtensions(void);
11+
#endif
12+
13+
/* Main program */
14+
15+
int
16+
Py_FrozenMain(int argc, char **argv)
17+
{
18+
PyStatus status = _PyRuntime_Initialize();
19+
if (PyStatus_Exception(status)) {
20+
Py_ExitStatusException(status);
21+
}
22+
23+
PyConfig config;
24+
PyConfig_InitPythonConfig(&config);
25+
// Suppress errors from getpath.c
26+
config.pathconfig_warnings = 0;
27+
// Don't parse command line options like -E
28+
config.parse_argv = 0;
29+
30+
status = PyConfig_SetBytesArgv(&config, argc, argv);
31+
if (PyStatus_Exception(status)) {
32+
PyConfig_Clear(&config);
33+
Py_ExitStatusException(status);
34+
}
35+
36+
const char *p;
37+
int inspect = 0;
38+
if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') {
39+
inspect = 1;
40+
}
41+
42+
#ifdef MS_WINDOWS
43+
PyInitFrozenExtensions();
44+
#endif /* MS_WINDOWS */
45+
46+
status = Py_InitializeFromConfig(&config);
47+
PyConfig_Clear(&config);
48+
if (PyStatus_Exception(status)) {
49+
Py_ExitStatusException(status);
50+
}
51+
52+
#ifdef MS_WINDOWS
53+
PyWinFreeze_ExeInit();
54+
#endif
55+
56+
if (_Py_GetConfig()->verbose) {
57+
fprintf(stderr, "Python %s\n%s\n",
58+
Py_GetVersion(), Py_GetCopyright());
59+
}
60+
61+
int sts = 1;
62+
int n = PyImport_ImportFrozenModule("__main__");
63+
if (n == 0) {
64+
Py_FatalError("the __main__ module is not frozen");
65+
}
66+
if (n < 0) {
67+
PyErr_Print();
68+
sts = 1;
69+
}
70+
else {
71+
sts = 0;
72+
}
73+
74+
if (inspect && isatty((int)fileno(stdin))) {
75+
sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
76+
}
77+
78+
#ifdef MS_WINDOWS
79+
PyWinFreeze_ExeTerm();
80+
#endif
81+
if (Py_FinalizeEx() < 0) {
82+
sts = 120;
83+
}
84+
return sts;
85+
}

0 commit comments

Comments
 (0)