Fix issue5076: bdist_wininst fails on py3k
This commit is contained in:
parent
6d0e9757d1
commit
891f2631f5
Binary file not shown.
Binary file not shown.
|
@ -114,6 +114,7 @@
|
||||||
FILE *logfile;
|
FILE *logfile;
|
||||||
|
|
||||||
char modulename[MAX_PATH];
|
char modulename[MAX_PATH];
|
||||||
|
wchar_t wmodulename[MAX_PATH];
|
||||||
|
|
||||||
HWND hwndMain;
|
HWND hwndMain;
|
||||||
HWND hDialog;
|
HWND hDialog;
|
||||||
|
@ -299,6 +300,27 @@ static int do_compile_files(int (__cdecl * PyRun_SimpleString)(char *),
|
||||||
|
|
||||||
typedef void PyObject;
|
typedef void PyObject;
|
||||||
|
|
||||||
|
// Convert a "char *" string to "whcar_t *", or NULL on error.
|
||||||
|
// Result string must be free'd
|
||||||
|
wchar_t *widen_string(char *src)
|
||||||
|
{
|
||||||
|
wchar_t *result;
|
||||||
|
DWORD dest_cch;
|
||||||
|
int src_len = strlen(src) + 1; // include NULL term in all ops
|
||||||
|
/* use MultiByteToWideChar() to see how much we need. */
|
||||||
|
/* NOTE: this will include the null-term in the length */
|
||||||
|
dest_cch = MultiByteToWideChar(CP_ACP, 0, src, src_len, NULL, 0);
|
||||||
|
// alloc the buffer
|
||||||
|
result = (wchar_t *)malloc(dest_cch * sizeof(wchar_t));
|
||||||
|
if (result==NULL)
|
||||||
|
return NULL;
|
||||||
|
/* do the conversion */
|
||||||
|
if (0==MultiByteToWideChar(CP_ACP, 0, src, src_len, result, dest_cch)) {
|
||||||
|
free(result);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns number of files which failed to compile,
|
* Returns number of files which failed to compile,
|
||||||
|
@ -307,7 +329,7 @@ typedef void PyObject;
|
||||||
static int compile_filelist(HINSTANCE hPython, BOOL optimize_flag)
|
static int compile_filelist(HINSTANCE hPython, BOOL optimize_flag)
|
||||||
{
|
{
|
||||||
DECLPROC(hPython, void, Py_Initialize, (void));
|
DECLPROC(hPython, void, Py_Initialize, (void));
|
||||||
DECLPROC(hPython, void, Py_SetProgramName, (char *));
|
DECLPROC(hPython, void, Py_SetProgramName, (wchar_t *));
|
||||||
DECLPROC(hPython, void, Py_Finalize, (void));
|
DECLPROC(hPython, void, Py_Finalize, (void));
|
||||||
DECLPROC(hPython, int, PyRun_SimpleString, (char *));
|
DECLPROC(hPython, int, PyRun_SimpleString, (char *));
|
||||||
DECLPROC(hPython, PyObject *, PySys_GetObject, (char *));
|
DECLPROC(hPython, PyObject *, PySys_GetObject, (char *));
|
||||||
|
@ -326,7 +348,7 @@ static int compile_filelist(HINSTANCE hPython, BOOL optimize_flag)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
*Py_OptimizeFlag = optimize_flag ? 1 : 0;
|
*Py_OptimizeFlag = optimize_flag ? 1 : 0;
|
||||||
Py_SetProgramName(modulename);
|
Py_SetProgramName(wmodulename);
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
|
|
||||||
errors += do_compile_files(PyRun_SimpleString, optimize_flag);
|
errors += do_compile_files(PyRun_SimpleString, optimize_flag);
|
||||||
|
@ -696,9 +718,10 @@ static int prepare_script_environment(HINSTANCE hPython)
|
||||||
static int
|
static int
|
||||||
do_run_installscript(HINSTANCE hPython, char *pathname, int argc, char **argv)
|
do_run_installscript(HINSTANCE hPython, char *pathname, int argc, char **argv)
|
||||||
{
|
{
|
||||||
int fh, result;
|
int fh, result, i;
|
||||||
|
static wchar_t *wargv[256];
|
||||||
DECLPROC(hPython, void, Py_Initialize, (void));
|
DECLPROC(hPython, void, Py_Initialize, (void));
|
||||||
DECLPROC(hPython, int, PySys_SetArgv, (int, char **));
|
DECLPROC(hPython, int, PySys_SetArgv, (int, wchar_t **));
|
||||||
DECLPROC(hPython, int, PyRun_SimpleString, (char *));
|
DECLPROC(hPython, int, PyRun_SimpleString, (char *));
|
||||||
DECLPROC(hPython, void, Py_Finalize, (void));
|
DECLPROC(hPython, void, Py_Finalize, (void));
|
||||||
DECLPROC(hPython, PyObject *, Py_BuildValue, (char *, ...));
|
DECLPROC(hPython, PyObject *, Py_BuildValue, (char *, ...));
|
||||||
|
@ -732,7 +755,16 @@ do_run_installscript(HINSTANCE hPython, char *pathname, int argc, char **argv)
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
|
|
||||||
prepare_script_environment(hPython);
|
prepare_script_environment(hPython);
|
||||||
PySys_SetArgv(argc, argv);
|
// widen the argv array for py3k.
|
||||||
|
memset(wargv, 0, sizeof(wargv));
|
||||||
|
for (i=0;i<argc;i++)
|
||||||
|
wargv[i] = argv[i] ? widen_string(argv[i]) : NULL;
|
||||||
|
PySys_SetArgv(argc, wargv);
|
||||||
|
// free the strings we just widened.
|
||||||
|
for (i=0;i<argc;i++)
|
||||||
|
if (wargv[i])
|
||||||
|
free(wargv[i]);
|
||||||
|
|
||||||
result = 3;
|
result = 3;
|
||||||
{
|
{
|
||||||
struct _stat statbuf;
|
struct _stat statbuf;
|
||||||
|
@ -807,7 +839,7 @@ static int do_run_simple_script(HINSTANCE hPython, char *script)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
DECLPROC(hPython, void, Py_Initialize, (void));
|
DECLPROC(hPython, void, Py_Initialize, (void));
|
||||||
DECLPROC(hPython, void, Py_SetProgramName, (char *));
|
DECLPROC(hPython, void, Py_SetProgramName, (wchar_t *));
|
||||||
DECLPROC(hPython, void, Py_Finalize, (void));
|
DECLPROC(hPython, void, Py_Finalize, (void));
|
||||||
DECLPROC(hPython, int, PyRun_SimpleString, (char *));
|
DECLPROC(hPython, int, PyRun_SimpleString, (char *));
|
||||||
DECLPROC(hPython, void, PyErr_Print, (void));
|
DECLPROC(hPython, void, PyErr_Print, (void));
|
||||||
|
@ -816,7 +848,7 @@ static int do_run_simple_script(HINSTANCE hPython, char *script)
|
||||||
!PyRun_SimpleString || !PyErr_Print)
|
!PyRun_SimpleString || !PyErr_Print)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
Py_SetProgramName(modulename);
|
Py_SetProgramName(wmodulename);
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
prepare_script_environment(hPython);
|
prepare_script_environment(hPython);
|
||||||
rc = PyRun_SimpleString(script);
|
rc = PyRun_SimpleString(script);
|
||||||
|
@ -2618,6 +2650,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
|
||||||
char *basename;
|
char *basename;
|
||||||
|
|
||||||
GetModuleFileName(NULL, modulename, sizeof(modulename));
|
GetModuleFileName(NULL, modulename, sizeof(modulename));
|
||||||
|
GetModuleFileNameW(NULL, wmodulename, sizeof(wmodulename)/sizeof(wmodulename[0]));
|
||||||
|
|
||||||
/* Map the executable file to memory */
|
/* Map the executable file to memory */
|
||||||
arc_data = MapExistingFile(modulename, &arc_size);
|
arc_data = MapExistingFile(modulename, &arc_size);
|
||||||
|
|
Loading…
Reference in New Issue