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 Py_FrozenMain(int argc,char ** argv)16Py_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_VerboseFlag) { 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 } 86