Branch data Line data Source code
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 : 1 : Py_FrozenMain(int argc, char **argv) 17 : : { 18 : 1 : PyStatus status = _PyRuntime_Initialize(); 19 [ - + ]: 1 : if (PyStatus_Exception(status)) { 20 : 0 : Py_ExitStatusException(status); 21 : : } 22 : : 23 : : PyConfig config; 24 : 1 : PyConfig_InitPythonConfig(&config); 25 : : // Suppress errors from getpath.c 26 : 1 : config.pathconfig_warnings = 0; 27 : : // Don't parse command line options like -E 28 : 1 : config.parse_argv = 0; 29 : : 30 : 1 : status = PyConfig_SetBytesArgv(&config, argc, argv); 31 [ - + ]: 1 : if (PyStatus_Exception(status)) { 32 : 0 : PyConfig_Clear(&config); 33 : 0 : Py_ExitStatusException(status); 34 : : } 35 : : 36 : : const char *p; 37 : 1 : int inspect = 0; 38 [ - + - - ]: 1 : if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') { 39 : 0 : inspect = 1; 40 : : } 41 : : 42 : : #ifdef MS_WINDOWS 43 : : PyInitFrozenExtensions(); 44 : : #endif /* MS_WINDOWS */ 45 : : 46 : 1 : status = Py_InitializeFromConfig(&config); 47 : 1 : PyConfig_Clear(&config); 48 [ - + ]: 1 : if (PyStatus_Exception(status)) { 49 : 0 : Py_ExitStatusException(status); 50 : : } 51 : : 52 : : #ifdef MS_WINDOWS 53 : : PyWinFreeze_ExeInit(); 54 : : #endif 55 : : 56 [ - + ]: 1 : if (_Py_GetConfig()->verbose) { 57 : 0 : fprintf(stderr, "Python %s\n%s\n", 58 : : Py_GetVersion(), Py_GetCopyright()); 59 : : } 60 : : 61 : 1 : int sts = 1; 62 : 1 : int n = PyImport_ImportFrozenModule("__main__"); 63 [ - + ]: 1 : if (n == 0) { 64 : : Py_FatalError("the __main__ module is not frozen"); 65 : : } 66 [ - + ]: 1 : if (n < 0) { 67 : 0 : PyErr_Print(); 68 : 0 : sts = 1; 69 : : } 70 : : else { 71 : 1 : sts = 0; 72 : : } 73 : : 74 [ - + - - ]: 1 : if (inspect && isatty((int)fileno(stdin))) { 75 : 0 : sts = PyRun_AnyFile(stdin, "<stdin>") != 0; 76 : : } 77 : : 78 : : #ifdef MS_WINDOWS 79 : : PyWinFreeze_ExeTerm(); 80 : : #endif 81 [ - + ]: 1 : if (Py_FinalizeEx() < 0) { 82 : 0 : sts = 120; 83 : : } 84 : 1 : return sts; 85 : : }