/* Python interpreter main program for frozen scripts */

#include "Python.h"
#include "pycore_pystate.h"       // _Py_GetConfig()
#include "pycore_runtime.h"       // _PyRuntime_Initialize()

#ifdef HAVE_UNISTD_H
#  include <unistd.h>             // isatty()
#endif


#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_GetConfig()->verbose) {
        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;
}
