mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-28 07:48:37 -04:00
parent
470e352ab8
commit
2e42400700
@ -90,6 +90,16 @@ static struct _inittab extensions[] = {
|
||||
static wchar_t *log_pathw = NULL;
|
||||
#endif
|
||||
|
||||
#if PY_VERSION_HEX >= 0x030b0000
|
||||
typedef struct {
|
||||
const char *name;
|
||||
const unsigned char *code;
|
||||
int size;
|
||||
} ModuleDef;
|
||||
#else
|
||||
typedef struct _frozen ModuleDef;
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32) && PY_VERSION_HEX < 0x03060000
|
||||
static int supports_code_page(UINT cp) {
|
||||
if (cp == 0) {
|
||||
@ -742,7 +752,7 @@ int wmain(int argc, wchar_t *argv[]) {
|
||||
int main(int argc, char *argv[]) {
|
||||
#endif
|
||||
int retval;
|
||||
struct _frozen *moddef;
|
||||
ModuleDef *moddef;
|
||||
const char *log_filename;
|
||||
void *blob = NULL;
|
||||
log_filename = NULL;
|
||||
@ -792,6 +802,9 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
// Offset the pointers in the module table using the base mmap address.
|
||||
moddef = blobinfo.pointers[0];
|
||||
#if PY_VERSION_HEX < 0x030b0000
|
||||
PyImport_FrozenModules = moddef;
|
||||
#endif
|
||||
while (moddef->name) {
|
||||
moddef->name = (char *)((uintptr_t)moddef->name + (uintptr_t)blob);
|
||||
if (moddef->code != 0) {
|
||||
@ -800,6 +813,24 @@ int main(int argc, char *argv[]) {
|
||||
//printf("MOD: %s %p %d\n", moddef->name, (void*)moddef->code, moddef->size);
|
||||
moddef++;
|
||||
}
|
||||
|
||||
// In Python 3.11, we need to convert this to the new structure format.
|
||||
#if PY_VERSION_HEX >= 0x030b0000
|
||||
ModuleDef *moddef_end = moddef;
|
||||
ptrdiff_t num_modules = moddef - (ModuleDef *)blobinfo.pointers[0];
|
||||
struct _frozen *new_moddef = (struct _frozen *)calloc(num_modules + 1, sizeof(struct _frozen));
|
||||
PyImport_FrozenModules = new_moddef;
|
||||
for (moddef = blobinfo.pointers[0]; moddef < moddef_end; ++moddef) {
|
||||
new_moddef->name = moddef->name;
|
||||
new_moddef->code = moddef->code;
|
||||
new_moddef->size = moddef->size < 0 ? -(moddef->size) : moddef->size;
|
||||
new_moddef->is_package = moddef->size < 0;
|
||||
new_moddef->get_code = NULL;
|
||||
new_moddef++;
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
PyImport_FrozenModules = blobinfo.pointers[0];
|
||||
}
|
||||
|
||||
if (log_filename != NULL) {
|
||||
@ -822,12 +853,16 @@ int main(int argc, char *argv[]) {
|
||||
#endif
|
||||
|
||||
// Run frozen application
|
||||
PyImport_FrozenModules = blobinfo.pointers[0];
|
||||
retval = Py_FrozenMain(argc, argv);
|
||||
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
|
||||
#if PY_VERSION_HEX >= 0x030b0000
|
||||
free((void *)PyImport_FrozenModules);
|
||||
PyImport_FrozenModules = NULL;
|
||||
#endif
|
||||
|
||||
unmap_blob(blob);
|
||||
return retval;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user