X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsearch_paths.cc;h=96df905eda4315eb2fe1ee2d271f26b905bfded5;hb=dec10f2f3c6fffe27e72243d9bf36713d8f084f9;hp=0efcce6451b5b61763557315e1b8b3282976ce45;hpb=34c67ba85403fc0e785e2bf135581cd9ed8a3cd4;p=ardour.git diff --git a/libs/ardour/search_paths.cc b/libs/ardour/search_paths.cc index 0efcce6451..96df905eda 100644 --- a/libs/ardour/search_paths.cc +++ b/libs/ardour/search_paths.cc @@ -1,6 +1,6 @@ /* - Copyright (C) 2011 Tim Mayberry - Copyright (C) 2013 Paul Davis + Copyright (C) 2011 Tim Mayberry + Copyright (C) 2013 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,6 +38,7 @@ namespace { const char * const backend_env_variable_name = "ARDOUR_BACKEND_PATH"; const char * const surfaces_env_variable_name = "ARDOUR_SURFACES_PATH"; const char * const export_env_variable_name = "ARDOUR_EXPORT_FORMATS_PATH"; + const char * const theme_env_variable_name = "ARDOUR_THEMES_PATH"; const char * const ladspa_env_variable_name = "LADSPA_PATH"; const char * const midi_patch_env_variable_name = "ARDOUR_MIDI_PATCH_PATH"; const char * const panner_env_variable_name = "ARDOUR_PANNER_PATH"; @@ -64,11 +65,21 @@ control_protocol_search_path () Searchpath spath(user_config_directory ()); spath += ardour_dll_directory (); spath.add_subdirectory_to_paths (surfaces_dir_name); - + spath += Searchpath(Glib::getenv(surfaces_env_variable_name)); return spath; } +Searchpath +theme_search_path () +{ + Searchpath spath (ardour_data_search_path ()); + spath.add_subdirectory_to_paths (theme_dir_name); + + spath += Searchpath(Glib::getenv(theme_env_variable_name)); + return spath; +} + Searchpath export_formats_search_path () { @@ -163,14 +174,23 @@ route_template_search_path () return spath; } +Searchpath +lua_search_path () +{ + Searchpath spath (ardour_data_search_path()); + spath.add_subdirectory_to_paths(lua_dir_name); + + return spath; +} + #ifdef PLATFORM_WINDOWS const char* vst_search_path () { - DWORD dwType = REG_SZ; + DWORD dwType = REG_SZ; HKEY hKey; - DWORD dwSize = PATH_MAX; + DWORD dwSize = PATH_MAX; char* p = 0; char* user_home = 0; char tmp[PATH_MAX+1]; @@ -178,7 +198,7 @@ vst_search_path () if (ERROR_SUCCESS == RegOpenKeyExA (HKEY_CURRENT_USER, "Software\\VST", 0, KEY_READ, &hKey)) { // Look for the user's VST Registry entry if (ERROR_SUCCESS == RegQueryValueExA (hKey, "VSTPluginsPath", 0, &dwType, (LPBYTE)tmp, &dwSize)) - p = g_build_filename (Glib::locale_to_utf8(tmp).c_str(), 0); + p = g_build_filename (Glib::locale_to_utf8(tmp).c_str(), NULL); RegCloseKey (hKey); } @@ -188,70 +208,66 @@ vst_search_path () { // Look for a global VST Registry entry if (ERROR_SUCCESS == RegQueryValueExA (hKey, "VSTPluginsPath", 0, &dwType, (LPBYTE)tmp, &dwSize)) - p = g_build_filename (Glib::locale_to_utf8(tmp).c_str(), 0); + p = g_build_filename (Glib::locale_to_utf8(tmp).c_str(), NULL); RegCloseKey (hKey); } } if (p == 0) { +#if ( (defined __i386__) || (defined _M_IX86) ) char *pVSTx86 = 0; - char *pProgFilesX86 = PBD::get_win_special_folder (CSIDL_PROGRAM_FILESX86); + std::string pProgFilesX86 = PBD::get_win_special_folder_path (CSIDL_PROGRAM_FILESX86); - if (pProgFilesX86) { + if (!pProgFilesX86.empty()) { // Look for a VST folder under C:\Program Files (x86) - if (pVSTx86 = g_build_filename (pProgFilesX86, "Steinberg", "VSTPlugins", 0)) + if ((pVSTx86 = g_build_filename (pProgFilesX86.c_str(), "Steinberg", "VSTPlugins", NULL))) { if (Glib::file_test (pVSTx86, Glib::FILE_TEST_EXISTS)) if (Glib::file_test (pVSTx86, Glib::FILE_TEST_IS_DIR)) - p = g_build_filename (pVSTx86, 0); + p = g_build_filename (pVSTx86, NULL); g_free (pVSTx86); } - - g_free (pProgFilesX86); } - - if (p == 0) { - // Look for a VST folder under C:\Program Files - char *pVST = 0; - char *pProgFiles = PBD::get_win_special_folder (CSIDL_PROGRAM_FILES); - - if (pProgFiles) { - if (pVST = g_build_filename (pProgFiles, "Steinberg", "VSTPlugins", 0)) { - if (Glib::file_test (pVST, Glib::FILE_TEST_EXISTS)) - if (Glib::file_test (pVST, Glib::FILE_TEST_IS_DIR)) - p = g_build_filename (pVST, 0); - - g_free (pVST); - } - - g_free (pProgFiles); +#else + // Look for a VST folder under C:\Program Files + char *pVST = 0; + std::string pProgFiles = PBD::get_win_special_folder_path (CSIDL_PROGRAM_FILES); + + if (!pProgFiles.empty()) { + if ((pVST = g_build_filename (pProgFiles.c_str(), "Steinberg", "VSTPlugins", NULL))) { + if (Glib::file_test (pVST, Glib::FILE_TEST_EXISTS)) + if (Glib::file_test (pVST, Glib::FILE_TEST_IS_DIR)) + p = g_build_filename (pVST, NULL); + + g_free (pVST); } } +#endif } if (p == 0) { // If all else failed, assume the plugins are under "My Documents" user_home = (char*) g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); if (user_home) { - p = g_build_filename (user_home, "Plugins", "VST", 0); + p = g_build_filename (user_home, "Plugins", "VST", NULL); } else { - user_home = g_build_filename(g_get_home_dir(), "My Documents", 0); + user_home = g_build_filename(g_get_home_dir(), "My Documents", NULL); if (user_home) - p = g_build_filename (user_home, "Plugins", "VST", 0); + p = g_build_filename (user_home, "Plugins", "VST", NULL); } } else { // Concatenate the registry path with the user's personal path user_home = (char*) g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS); if (user_home) { - p = g_build_path (";", p, g_build_filename(user_home, "Plugins", "VST", 0), 0); + p = g_build_path (";", p, g_build_filename(user_home, "Plugins", "VST", NULL), NULL); } else { - user_home = g_build_filename(g_get_home_dir(), "My Documents", 0); + user_home = g_build_filename(g_get_home_dir(), "My Documents", NULL); if (user_home) { - p = g_build_path (";", p, g_build_filename (user_home, "Plugins", "VST", 0), 0); + p = g_build_path (";", p, g_build_filename (user_home, "Plugins", "VST", NULL), NULL); } } } @@ -259,7 +275,7 @@ vst_search_path () return p; } -#else +#else /* Unix-like. Probably require some OS X specific breakdown if we ever add VST * support on that platform.