[Bf-blender-cvs] [f1bc0aedded] master: Fix (unreported) broken 'get system path' in some cases.

Bastien Montagne noreply at git.blender.org
Wed Apr 25 10:39:29 CEST 2018


Commit: f1bc0aeddedacf68182164dde5d4674d11aba6c9
Author: Bastien Montagne
Date:   Wed Apr 25 10:33:29 2018 +0200
Branches: master
https://developer.blender.org/rBf1bc0aeddedacf68182164dde5d4674d11aba6c9

Fix (unreported) broken 'get system path' in some cases.

There were two issues here actually:
* The hack to allow running Blender directly from the source directory
would just check for a 'release' directory, without actually ensuring it
is release dir from blender source tree, and not some other random
folder.
* GHOST_getSystemDir returns nothing for portable installations, now
we'll then check directly in the blender binary dir in that case.

This fix is more critical in 2.8 branch, where that system path is used
to retrieve new '3D' icons...

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

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

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

diff --git a/source/blender/blenkernel/intern/appdir.c b/source/blender/blenkernel/intern/appdir.c
index 8d4776dca0e..142449b8aeb 100644
--- a/source/blender/blenkernel/intern/appdir.c
+++ b/source/blender/blenkernel/intern/appdir.c
@@ -298,22 +298,36 @@ static bool get_path_system_dev_build_exception(
         char *targetpath, size_t targetpath_len, const char *relfolder)
 {
 	char cwd[FILE_MAX];
+	char tmp_path[FILE_MAX];
+	bool ret = false;
 
 	/* Try EXECUTABLE_DIR/release/folder_name. Allows symlinking release folder from source dir. */
 	if (test_path(targetpath, targetpath_len, bprogdir, "release", relfolder)) {
-		return true;
+		ret = true;
 	}
 	/* Try CWD/release/folder_name. Allows executing Blender from any directory
 	 * (usually source dir), even without a release dir in bprogdir. */
 	if (BLI_current_working_dir(cwd, sizeof(cwd))) {
 		if (test_path(targetpath, targetpath_len, cwd, "release", relfolder)) {
-			return true;
+			ret = true;
 		}
 	}
+
+	/* Ensure we are in source dir, not in another one that happens to have a release folder. */
+	if (ret) {
+		BLI_join_dirfile(tmp_path, sizeof(tmp_path), bprogdir,
+		                 "source" SEP_STR "blender" SEP_STR "blenkernel" SEP_STR "BKE_blender_version.h");
+		if (!BLI_is_file(tmp_path)) {
+			ret = false;
+		}
+	}
+
 	/* never use if not existing. */
-	targetpath[0] = '\0';
+	if (!ret) {
+		targetpath[0] = '\0';
+	}
 
-	return false;
+	return ret;
 }
 
 /**
@@ -362,10 +376,19 @@ static bool get_path_system(
 		}
 	}
 
-	system_base_path = (const char *)GHOST_getSystemDir(ver, blender_version_decimal(ver));
+	const char *blender_version_str = blender_version_decimal(ver);
+	system_base_path = (const char *)GHOST_getSystemDir(ver, blender_version_str);
 	if (system_base_path)
 		BLI_strncpy(system_path, system_base_path, FILE_MAX);
-	
+
+	/* GHOST_getSystemDir returns nothing in case of portable install, so we try binary directory itself. */
+	if (!system_path[0]) {
+		const char *prog_dir = BKE_appdir_program_dir();
+		if (prog_dir != NULL) {
+			BLI_join_dirfile(system_path, sizeof(system_path), prog_dir, blender_version_str);
+		}
+	}
+
 	if (!system_path[0])
 		return false;



More information about the Bf-blender-cvs mailing list