diff options
author | nkozlovskiy <nmk@ydb.tech> | 2023-09-29 12:24:06 +0300 |
---|---|---|
committer | nkozlovskiy <nmk@ydb.tech> | 2023-09-29 12:41:34 +0300 |
commit | e0e3e1717e3d33762ce61950504f9637a6e669ed (patch) | |
tree | bca3ff6939b10ed60c3d5c12439963a1146b9711 /contrib/tools/python3/src/Python/frozenmain.c | |
parent | 38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff) | |
download | ydb-e0e3e1717e3d33762ce61950504f9637a6e669ed.tar.gz |
add ydb deps
Diffstat (limited to 'contrib/tools/python3/src/Python/frozenmain.c')
-rw-r--r-- | contrib/tools/python3/src/Python/frozenmain.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/contrib/tools/python3/src/Python/frozenmain.c b/contrib/tools/python3/src/Python/frozenmain.c new file mode 100644 index 0000000000..8743e082b4 --- /dev/null +++ b/contrib/tools/python3/src/Python/frozenmain.c @@ -0,0 +1,85 @@ +/* Python interpreter main program for frozen scripts */ + +#include "Python.h" +#include "pycore_runtime.h" // _PyRuntime_Initialize() +#include <locale.h> + +#ifdef MS_WINDOWS +extern void PyWinFreeze_ExeInit(void); +extern void PyWinFreeze_ExeTerm(void); +extern int PyInitFrozenExtensions(void); +#endif + +/* Main program */ + +int +Py_FrozenMain(int argc, char **argv) +{ + PyStatus status = _PyRuntime_Initialize(); + if (PyStatus_Exception(status)) { + Py_ExitStatusException(status); + } + + PyConfig config; + PyConfig_InitPythonConfig(&config); + // Suppress errors from getpath.c + config.pathconfig_warnings = 0; + // Don't parse command line options like -E + config.parse_argv = 0; + + status = PyConfig_SetBytesArgv(&config, argc, argv); + if (PyStatus_Exception(status)) { + PyConfig_Clear(&config); + Py_ExitStatusException(status); + } + + const char *p; + int inspect = 0; + if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') { + inspect = 1; + } + +#ifdef MS_WINDOWS + PyInitFrozenExtensions(); +#endif /* MS_WINDOWS */ + + status = Py_InitializeFromConfig(&config); + PyConfig_Clear(&config); + if (PyStatus_Exception(status)) { + Py_ExitStatusException(status); + } + +#ifdef MS_WINDOWS + PyWinFreeze_ExeInit(); +#endif + + if (Py_VerboseFlag) { + fprintf(stderr, "Python %s\n%s\n", + Py_GetVersion(), Py_GetCopyright()); + } + + int sts = 1; + int n = PyImport_ImportFrozenModule("__main__"); + if (n == 0) { + Py_FatalError("the __main__ module is not frozen"); + } + if (n < 0) { + PyErr_Print(); + sts = 1; + } + else { + sts = 0; + } + + if (inspect && isatty((int)fileno(stdin))) { + sts = PyRun_AnyFile(stdin, "<stdin>") != 0; + } + +#ifdef MS_WINDOWS + PyWinFreeze_ExeTerm(); +#endif + if (Py_FinalizeEx() < 0) { + sts = 120; + } + return sts; +} |