aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Python/frozenmain.c
diff options
context:
space:
mode:
authornkozlovskiy <nmk@ydb.tech>2023-09-29 12:24:06 +0300
committernkozlovskiy <nmk@ydb.tech>2023-09-29 12:41:34 +0300
commite0e3e1717e3d33762ce61950504f9637a6e669ed (patch)
treebca3ff6939b10ed60c3d5c12439963a1146b9711 /contrib/tools/python3/src/Python/frozenmain.c
parent38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff)
downloadydb-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.c85
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;
+}