== installation paths ==

* fix case where environment variable was used without subfolder
* some small cleanup
This commit is contained in:
Andrea Weikert
2010-07-15 19:42:36 +00:00
parent 7df9df1373
commit 7a3ff66575

View File

@@ -947,13 +947,13 @@ static int test_path(char *targetpath, char *path_base, char *path_sep, char *fo
} }
} }
static int test_env_path(char *path, char *subfolder_name, char *envvar) static int test_env_path(char *path, char *envvar)
{ {
char *env = envvar?getenv(envvar):NULL; char *env = envvar?getenv(envvar):NULL;
if (!env) return 0; if (!env) return 0;
if (BLI_is_dir(env)) { if (BLI_is_dir(env)) {
BLI_make_file_string("/", path, env, subfolder_name); BLI_strncpy(path, env, FILE_MAX);
return 1; return 1;
} else { } else {
path[0] = '\0'; path[0] = '\0';
@@ -961,10 +961,11 @@ static int test_env_path(char *path, char *subfolder_name, char *envvar)
} }
} }
static int get_path_local(char *targetpath, char *folder_name) static int get_path_local(char *targetpath, char *folder_name, char *subfolder_name)
{ {
extern char bprogname[]; /* argv[0] from creator.c */ extern char bprogname[]; /* argv[0] from creator.c */
char bprogdir[FILE_MAX]; char bprogdir[FILE_MAX];
char relfolder[FILE_MAX];
char cwd[FILE_MAX]; char cwd[FILE_MAX];
char *s; char *s;
int i; int i;
@@ -973,6 +974,11 @@ static int get_path_local(char *targetpath, char *folder_name)
printf("get_path_local...\n"); printf("get_path_local...\n");
#endif #endif
if (subfolder_name) {
BLI_join_dirfile(relfolder, folder_name, subfolder_name);
} else {
BLI_strncpy(relfolder, folder_name, FILE_MAX);
}
/* use argv[0] (bprogname) to get the path to the executable */ /* use argv[0] (bprogname) to get the path to the executable */
s = BLI_last_slash(bprogname); s = BLI_last_slash(bprogname);
@@ -980,23 +986,23 @@ static int get_path_local(char *targetpath, char *folder_name)
BLI_strncpy(bprogdir, bprogname, i); BLI_strncpy(bprogdir, bprogname, i);
/* try EXECUTABLE_DIR/folder_name */ /* try EXECUTABLE_DIR/folder_name */
if(test_path(targetpath, bprogdir, "", folder_name)) if(test_path(targetpath, bprogdir, "", relfolder))
return 1; return 1;
/* try CWD/release/folder_name */ /* try CWD/release/folder_name */
if(test_path(targetpath, BLI_getwdN(cwd), "release", folder_name)) if(test_path(targetpath, BLI_getwdN(cwd), "release", relfolder))
return 1; return 1;
/* try EXECUTABLE_DIR/release/folder_name */ /* try EXECUTABLE_DIR/release/folder_name */
if(test_path(targetpath, bprogdir, "release", folder_name)) if(test_path(targetpath, bprogdir, "release", relfolder))
return 1; return 1;
/* try EXECUTABLE_DIR/2.5/folder_name - new default directory for local blender installed files */ /* try EXECUTABLE_DIR/2.5/folder_name - new default directory for local blender installed files */
if(test_path(targetpath, bprogdir, blender_version_decimal(), folder_name)) if(test_path(targetpath, bprogdir, blender_version_decimal(), relfolder))
return 1; return 1;
/* try ./.blender/folder_name -- DEPRECATED, need to update build systems */ /* try ./.blender/folder_name -- DEPRECATED, need to update build systems */
if(test_path(targetpath, bprogdir, ".blender", folder_name)) if(test_path(targetpath, bprogdir, ".blender", relfolder))
return 1; return 1;
return 0; return 0;
@@ -1009,8 +1015,14 @@ static int get_path_user(char *targetpath, char *folder_name, char *subfolder_na
user_path[0] = '\0'; user_path[0] = '\0';
if (test_env_path(targetpath, subfolder_name, envvar)) if (test_env_path(user_path, envvar)) {
return 1; if (subfolder_name) {
return test_path(targetpath, user_path, NULL, subfolder_name);
} else {
BLI_strncpy(targetpath, user_path, FILE_MAX);
return 1;
}
}
user_base_path = (const char *)GHOST_getUserDir(); user_base_path = (const char *)GHOST_getUserDir();
if (user_base_path) { if (user_base_path) {
@@ -1024,8 +1036,13 @@ static int get_path_user(char *targetpath, char *folder_name, char *subfolder_na
printf("get_path_user: %s\n", user_path); printf("get_path_user: %s\n", user_path);
#endif #endif
/* try $HOME/folder_name */ if (subfolder_name) {
return test_path(targetpath, user_path, NULL, folder_name); /* try $HOME/folder_name/subfolder_name */
return test_path(targetpath, user_path, folder_name, subfolder_name);
} else {
/* try $HOME/folder_name */
return test_path(targetpath, user_path, NULL, folder_name);
}
} }
static int get_path_system(char *targetpath, char *folder_name, char *subfolder_name, char *envvar) static int get_path_system(char *targetpath, char *folder_name, char *subfolder_name, char *envvar)
@@ -1035,8 +1052,14 @@ static int get_path_system(char *targetpath, char *folder_name, char *subfolder_
system_path[0] = '\0'; system_path[0] = '\0';
if (test_env_path(targetpath, subfolder_name, envvar)) if (test_env_path(system_path, envvar)) {
return 1; if (subfolder_name) {
return test_path(targetpath, system_path, NULL, subfolder_name);
} else {
BLI_strncpy(targetpath, system_path, FILE_MAX);
return 1;
}
}
system_base_path = (const char *)GHOST_getSystemDir(); system_base_path = (const char *)GHOST_getSystemDir();
if (system_base_path) { if (system_base_path) {
@@ -1050,8 +1073,13 @@ static int get_path_system(char *targetpath, char *folder_name, char *subfolder_
printf("get_path_system: %s\n", system_path); printf("get_path_system: %s\n", system_path);
#endif #endif
/* try $BLENDERPATH/folder_name */ if (subfolder_name) {
return test_path(targetpath, system_path, NULL, folder_name); /* try $BLENDERPATH/folder_name/subfolder_name */
return test_path(targetpath, system_path, folder_name, subfolder_name);
} else {
/* try $BLENDERPATH/folder_name */
return test_path(targetpath, system_path, NULL, folder_name);
}
} }
/* get a folder out of the 'folder_id' presets for paths */ /* get a folder out of the 'folder_id' presets for paths */
@@ -1059,72 +1087,60 @@ static int get_path_system(char *targetpath, char *folder_name, char *subfolder_
char *BLI_get_folder(int folder_id, char *subfolder) char *BLI_get_folder(int folder_id, char *subfolder)
{ {
static char path[FILE_MAX] = ""; static char path[FILE_MAX] = "";
char search_path[FILE_MAX];
switch (folder_id) { switch (folder_id) {
case BLENDER_DATAFILES: /* general case */ case BLENDER_DATAFILES: /* general case */
BLI_join_dirfile(search_path, "datafiles", subfolder); if (get_path_local(path, "datafiles", subfolder)) break;
if (get_path_local(path, search_path)) break; if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES")) break;
if (get_path_user(path, search_path, subfolder, "BLENDER_USER_DATAFILES")) break; if (get_path_system(path, "datafiles", subfolder, "BLENDER_SYSTEM_DATAFILES")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_DATAFILES")) break;
return NULL; return NULL;
case BLENDER_USER_DATAFILES: case BLENDER_USER_DATAFILES:
BLI_join_dirfile(search_path, "datafiles", subfolder); if (get_path_local(path, "datafiles", subfolder)) break;
if (get_path_local(path, search_path)) break; if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES")) break;
if (get_path_user(path, search_path, subfolder, "BLENDER_USER_DATAFILES")) break;
return NULL; return NULL;
case BLENDER_SYSTEM_DATAFILES: case BLENDER_SYSTEM_DATAFILES:
BLI_join_dirfile(search_path, "datafiles", subfolder); if (get_path_system(path, "datafiles", subfolder, "BLENDER_SYSTEM_DATAFILES")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_DATAFILES")) break;
return NULL; return NULL;
case BLENDER_CONFIG: /* general case */ case BLENDER_CONFIG: /* general case */
BLI_join_dirfile(search_path, "config", subfolder); if (get_path_local(path, "config", subfolder)) break;
if (get_path_local(path, search_path)) break; if (get_path_user(path, "config", subfolder, "BLENDER_USER_CONFIG")) break;
if (get_path_user(path, search_path, subfolder, "BLENDER_USER_CONFIG")) break; if (get_path_system(path, "config", subfolder, "BLENDER_SYSTEM_CONFIG")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_CONFIG")) break;
return NULL; return NULL;
case BLENDER_USER_CONFIG: case BLENDER_USER_CONFIG:
BLI_join_dirfile(search_path, "config", subfolder); if (get_path_local(path, "config", subfolder)) break;
if (get_path_local(path, search_path)) break; if (get_path_user(path, "config", subfolder, "BLENDER_USER_CONFIG")) break;
if (get_path_user(path, search_path, subfolder, "BLENDER_USER_CONFIG")) break;
return NULL; return NULL;
case BLENDER_SYSTEM_CONFIG: case BLENDER_SYSTEM_CONFIG:
BLI_join_dirfile(search_path, "config", subfolder); if (get_path_system(path, "config", subfolder, "BLENDER_SYSTEM_CONFIG")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_CONFIG")) break;
return NULL; return NULL;
case BLENDER_SCRIPTS: /* general case */ case BLENDER_SCRIPTS: /* general case */
BLI_join_dirfile(search_path, "scripts", subfolder); if (get_path_local(path, "scripts", subfolder)) break;
if (get_path_local(path, search_path)) break; if (get_path_user(path, "scripts", subfolder, "BLENDER_USER_SCRIPTS")) break;
if (get_path_user(path, search_path, subfolder, "BLENDER_USER_SCRIPTS")) break; if (get_path_system(path, "scripts", subfolder, "BLENDER_SYSTEM_SCRIPTS")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_SCRIPTS")) break;
return NULL; return NULL;
case BLENDER_USER_SCRIPTS: case BLENDER_USER_SCRIPTS:
BLI_join_dirfile(search_path, "scripts", subfolder); if (get_path_local(path, "scripts", subfolder)) break;
if (get_path_local(path, search_path)) break; if (get_path_user(path, "scripts", subfolder, "BLENDER_USER_SCRIPTS")) break;
if (get_path_user(path, search_path, subfolder, "BLENDER_USER_SCRIPTS")) break;
return NULL; return NULL;
case BLENDER_SYSTEM_SCRIPTS: case BLENDER_SYSTEM_SCRIPTS:
BLI_join_dirfile(search_path, "scripts", subfolder); if (get_path_system(path, "scripts", subfolder, "BLENDER_SYSTEM_SCRIPTS")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_SCRIPTS")) break;
return NULL; return NULL;
case BLENDER_PYTHON: /* general case */ case BLENDER_PYTHON: /* general case */
BLI_join_dirfile(search_path, "python", subfolder); if (get_path_local(path, "python", subfolder)) break;
if (get_path_local(path, search_path)) break; if (get_path_system(path, "python", subfolder, "BLENDER_SYSTEM_PYTHON")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_PYTHON")) break;
return NULL; return NULL;
case BLENDER_SYSTEM_PYTHON: case BLENDER_SYSTEM_PYTHON:
BLI_join_dirfile(search_path, "python", subfolder); if (get_path_system(path, "python", subfolder, "BLENDER_SYSTEM_PYTHON")) break;
if (get_path_system(path, search_path, subfolder, "BLENDER_SYSTEM_PYTHON")) break;
return NULL; return NULL;
} }