Support environment variables to override USER & SYSTEM resource paths
Even though individual USER/SYSTEM paths could be set using environment variables, it wasn't possible to override the USER or SYSTEM paths. This meant the result of `bpy.utils.resource_path('USER')` & `bpy.utils.resource_path('SYSTEM')` could still be used by scripts, making the Blender session potentially the default USER directory (even when `BLENDER_USER_CONFIG`, `BLENDER_USER_SCRIPTS` & `BLENDER_USER_DATAFILES` all point elsewhere). Resolve by adding environment variables: - BLENDER_USER_RESOURCES - BLENDER_SYSTEM_RESOURCES These will be used for `bpy.utils.resource_path('USER')` & `bpy.utils.resource_path('SYSTEM')`, as well as a basis for user & system directories, unless those environment variables are set (`BLENDER_USER_*` or `BLENDER_SYSTEM_*`). Resolves issue raised by T101389. Example usage & output: {P3225} Reviewed By: brecht Ref D16111
This commit is contained in:
parent
868ef9ec37
commit
bf4926b30c
Notes:
blender-bot
2023-02-14 06:17:17 +01:00
Referenced by issue #101389, bpy.utils.resource_path() does not return the right paths with portable blender and environment variables
|
@ -460,18 +460,22 @@ static bool get_path_user_ex(char *targetpath,
|
|||
const bool check_is_dir)
|
||||
{
|
||||
char user_path[FILE_MAX];
|
||||
const char *user_base_path;
|
||||
|
||||
/* for portable install, user path is always local */
|
||||
if (BKE_appdir_app_is_portable_install()) {
|
||||
return get_path_local_ex(
|
||||
targetpath, targetpath_len, folder_name, subfolder_name, version, check_is_dir);
|
||||
if (test_env_path(user_path, "BLENDER_USER_RESOURCES", check_is_dir)) {
|
||||
/* Pass. */
|
||||
}
|
||||
user_path[0] = '\0';
|
||||
else {
|
||||
/* for portable install, user path is always local */
|
||||
if (BKE_appdir_app_is_portable_install()) {
|
||||
return get_path_local_ex(
|
||||
targetpath, targetpath_len, folder_name, subfolder_name, version, check_is_dir);
|
||||
}
|
||||
user_path[0] = '\0';
|
||||
|
||||
user_base_path = GHOST_getUserDir(version, blender_version_decimal(version));
|
||||
if (user_base_path) {
|
||||
BLI_strncpy(user_path, user_base_path, FILE_MAX);
|
||||
const char *user_base_path = GHOST_getUserDir(version, blender_version_decimal(version));
|
||||
if (user_base_path) {
|
||||
BLI_strncpy(user_path, user_base_path, FILE_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
if (!user_path[0]) {
|
||||
|
@ -518,7 +522,6 @@ static bool get_path_system_ex(char *targetpath,
|
|||
const bool check_is_dir)
|
||||
{
|
||||
char system_path[FILE_MAX];
|
||||
const char *system_base_path;
|
||||
char relfolder[FILE_MAX];
|
||||
|
||||
if (folder_name) { /* `subfolder_name` may be NULL. */
|
||||
|
@ -528,10 +531,15 @@ static bool get_path_system_ex(char *targetpath,
|
|||
relfolder[0] = '\0';
|
||||
}
|
||||
|
||||
system_path[0] = '\0';
|
||||
system_base_path = GHOST_getSystemDir(version, blender_version_decimal(version));
|
||||
if (system_base_path) {
|
||||
BLI_strncpy(system_path, system_base_path, FILE_MAX);
|
||||
if (test_env_path(system_path, "BLENDER_SYSTEM_RESOURCES", check_is_dir)) {
|
||||
/* Pass. */
|
||||
}
|
||||
else {
|
||||
system_path[0] = '\0';
|
||||
const char *system_base_path = GHOST_getSystemDir(version, blender_version_decimal(version));
|
||||
if (system_base_path) {
|
||||
BLI_strncpy(system_path, system_base_path, FILE_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
if (!system_path[0]) {
|
||||
|
|
|
@ -656,12 +656,18 @@ static int arg_handle_print_help(int UNUSED(argc), const char **UNUSED(argv), vo
|
|||
printf("\t...works as expected.\n\n");
|
||||
|
||||
printf("Environment Variables:\n");
|
||||
printf(" $BLENDER_USER_CONFIG Directory for user configuration files.\n");
|
||||
printf(" $BLENDER_USER_SCRIPTS Directory for user scripts.\n");
|
||||
printf(" $BLENDER_SYSTEM_SCRIPTS Directory for system wide scripts.\n");
|
||||
printf(" $BLENDER_USER_DATAFILES Directory for user data files (icons, translations, ..).\n");
|
||||
printf(" $BLENDER_SYSTEM_DATAFILES Directory for system wide data files.\n");
|
||||
printf(" $BLENDER_SYSTEM_PYTHON Directory for system Python libraries.\n");
|
||||
printf(" $BLENDER_USER_RESOURCES Top level directory for user files.\n");
|
||||
printf(" (other 'BLENDER_USER_*' variables override when set).\n");
|
||||
printf(" $BLENDER_USER_CONFIG Directory for user configuration files.\n");
|
||||
printf(" $BLENDER_USER_SCRIPTS Directory for user scripts.\n");
|
||||
printf(" $BLENDER_USER_DATAFILES Directory for user data files (icons, translations, ..).\n");
|
||||
printf("\n");
|
||||
printf(" $BLENDER_SYSTEM_RESOURCES Top level directory for system files.\n");
|
||||
printf(" (other 'BLENDER_SYSTEM_*' variables override when set).\n");
|
||||
printf(" $BLENDER_SYSTEM_SCRIPTS Directory for system wide scripts.\n");
|
||||
printf(" $BLENDER_SYSTEM_DATAFILES Directory for system wide data files.\n");
|
||||
printf(" $BLENDER_SYSTEM_PYTHON Directory for system Python libraries.\n");
|
||||
|
||||
# ifdef WITH_OCIO
|
||||
printf(" $OCIO Path to override the OpenColorIO config file.\n");
|
||||
# endif
|
||||
|
|
Loading…
Reference in New Issue