[Bf-blender-cvs] [bf4926b30c6] master: Support environment variables to override USER & SYSTEM resource paths

Campbell Barton noreply at git.blender.org
Tue Oct 4 04:55:05 CEST 2022


Commit: bf4926b30c6fc7b9f98dde508b7b644feaf21022
Author: Campbell Barton
Date:   Tue Oct 4 13:54:09 2022 +1100
Branches: master
https://developer.blender.org/rBbf4926b30c6fc7b9f98dde508b7b644feaf21022

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

===================================================================

M	source/blender/blenkernel/intern/appdir.c
M	source/creator/creator_args.c

===================================================================

diff --git a/source/blender/blenkernel/intern/appdir.c b/source/blender/blenkernel/intern/appdir.c
index e3c42c8bb78..7c409f1095b 100644
--- a/source/blender/blenkernel/intern/appdir.c
+++ b/source/blender/blenkernel/intern/appdir.c
@@ -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]) {
diff --git a/source/creator/creator_args.c b/source/creator/creator_args.c
index e0fea8a4686..06b898587bf 100644
--- a/source/creator/creator_args.c
+++ b/source/creator/creator_args.c
@@ -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



More information about the Bf-blender-cvs mailing list