diff options
Diffstat (limited to 'source/creator/creator.c')
-rw-r--r-- | source/creator/creator.c | 50 |
1 files changed, 39 insertions, 11 deletions
diff --git a/source/creator/creator.c b/source/creator/creator.c index 6c95ee3e490..2cd54deeab5 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -24,7 +24,6 @@ #include "DNA_genfile.h" -#include "BLI_args.h" #include "BLI_string.h" #include "BLI_system.h" #include "BLI_task.h" @@ -41,7 +40,6 @@ #include "BKE_global.h" #include "BKE_gpencil_modifier.h" #include "BKE_idtype.h" -#include "BKE_image.h" #include "BKE_main.h" #include "BKE_material.h" #include "BKE_modifier.h" @@ -52,6 +50,10 @@ #include "BKE_vfont.h" #include "BKE_volume.h" +#ifndef WITH_PYTHON_MODULE +# include "BLI_args.h" +#endif + #include "DEG_depsgraph.h" #include "IMB_imbuf.h" /* For #IMB_init. */ @@ -95,6 +97,18 @@ #include "creator_intern.h" /* Own include. */ /* -------------------------------------------------------------------- */ +/** \name Local Defines + * \{ */ + +/* When building as a Python module, don't use special argument handling + * so the module loading logic can control the `argv` & `argc`. */ +#if defined(WIN32) && !defined(WITH_PYTHON_MODULE) +# define USE_WIN32_UNICODE_ARGS +#endif + +/** \} */ + +/* -------------------------------------------------------------------- */ /** \name Local Application State * \{ */ @@ -133,23 +147,34 @@ static void main_callback_setup(void) /* free data on early exit (if Python calls 'sys.exit()' while parsing args for eg). */ struct CreatorAtExitData { +#ifndef WITH_PYTHON_MODULE bArgs *ba; -#ifdef WIN32 +#endif + +#ifdef USE_WIN32_UNICODE_ARGS const char **argv; int argv_num; #endif + +#if defined(WITH_PYTHON_MODULE) && !defined(USE_WIN32_UNICODE_ARGS) + void *_empty; /* Prevent empty struct error with MSVC. */ +#endif }; static void callback_main_atexit(void *user_data) { struct CreatorAtExitData *app_init_data = user_data; +#ifndef WITH_PYTHON_MODULE if (app_init_data->ba) { BLI_args_destroy(app_init_data->ba); app_init_data->ba = NULL; } +#else + UNUSED_VARS(app_init_data); /* May be unused. */ +#endif -#ifdef WIN32 +#ifdef USE_WIN32_UNICODE_ARGS if (app_init_data->argv) { while (app_init_data->argv_num) { free((void *)app_init_data->argv[--app_init_data->argv_num]); @@ -157,6 +182,8 @@ static void callback_main_atexit(void *user_data) free((void *)app_init_data->argv); app_init_data->argv = NULL; } +#else + UNUSED_VARS(app_init_data); /* May be unused. */ #endif } @@ -242,7 +269,7 @@ void gmp_blender_init_allocator() * or exit immediately when running in background-mode. */ int main(int argc, -#ifdef WIN32 +#ifdef USE_WIN32_UNICODE_ARGS const char **UNUSED(argv_c) #else const char **argv @@ -255,7 +282,7 @@ int main(int argc, bArgs *ba; #endif -#ifdef WIN32 +#ifdef USE_WIN32_UNICODE_ARGS char **argv; int argv_num; #endif @@ -281,11 +308,11 @@ int main(int argc, _putenv_s("OMP_WAIT_POLICY", "PASSIVE"); # endif +# ifdef USE_WIN32_UNICODE_ARGS /* Win32 Unicode Arguments. */ - /* NOTE: cannot use `guardedalloc` allocation here, as it's not yet initialized - * (it depends on the arguments passed in, which is what we're getting here!) - */ { + /* NOTE: Can't use `guardedalloc` allocation here, as it's not yet initialized + * (it depends on the arguments passed in, which is what we're getting here!) */ wchar_t **argv_16 = CommandLineToArgvW(GetCommandLineW(), &argc); argv = malloc(argc * sizeof(char *)); for (argv_num = 0; argv_num < argc; argv_num++) { @@ -297,7 +324,8 @@ int main(int argc, app_init_data.argv = argv; app_init_data.argv_num = argv_num; } -#endif /* WIN32 */ +# endif /* USE_WIN32_UNICODE_ARGS */ +#endif /* WIN32 */ /* NOTE: Special exception for guarded allocator type switch: * we need to perform switch from lock-free to fully @@ -528,7 +556,7 @@ int main(int argc, (void)ba; #endif -#ifdef WIN32 +#ifdef USE_WIN32_UNICODE_ARGS argv = NULL; (void)argv; #endif |