From b32d9a1c70cb81680b75f3b02ae54d4e6afb20e5 Mon Sep 17 00:00:00 2001 From: John Emmas Date: Mon, 10 Mar 2014 15:37:23 +0000 Subject: Transfer 'vst_search_path()' into 'libs/ardour/search_paths.cc' --- libs/ardour/search_paths.cc | 120 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) (limited to 'libs/ardour/search_paths.cc') diff --git a/libs/ardour/search_paths.cc b/libs/ardour/search_paths.cc index 825a6c52b8..09227f6347 100644 --- a/libs/ardour/search_paths.cc +++ b/libs/ardour/search_paths.cc @@ -18,7 +18,9 @@ */ -#include +#include +#include +#include #include "pbd/pathexpand.h" @@ -26,6 +28,12 @@ #include "ardour/directory_names.h" #include "ardour/filesystem_paths.h" +#ifdef PLATFORM_WINDOWS +#include +#include // CSIDL_* +#include "pbd/windows_special_dirs.h" +#endif + namespace { const char * const backend_env_variable_name = "ARDOUR_BACKEND_PATH"; const char * const surfaces_env_variable_name = "ARDOUR_SURFACES_PATH"; @@ -139,4 +147,114 @@ panner_search_path () return spath; } +#ifdef PLATFORM_WINDOWS + +const char* +vst_search_path () +{ + DWORD dwType = REG_SZ; + HKEY hKey; + DWORD dwSize = PATH_MAX; + char* p = 0; + char* user_home = 0; + char tmp[PATH_MAX+1]; + + 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); + + RegCloseKey (hKey); + } + + if (p == 0) { + if (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, "Software\\VST", 0, KEY_READ, &hKey)) + { + // 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); + + RegCloseKey (hKey); + } + } + + if (p == 0) { + char *pVSTx86 = 0; + char *pProgFilesX86 = PBD::get_win_special_folder (CSIDL_PROGRAM_FILESX86); + + if (pProgFilesX86) { + // Look for a VST folder under C:\Program Files (x86) + if (pVSTx86 = g_build_filename (pProgFilesX86, "Steinberg", "VSTPlugins", 0)) + { + 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); + + 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); + } + } + } + + 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); + } else { + user_home = g_build_filename(g_get_home_dir(), "My Documents", 0); + if (user_home) + p = g_build_filename (user_home, "Plugins", "VST", 0); + } + } 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); + } else { + user_home = g_build_filename(g_get_home_dir(), "My Documents", 0); + + if (user_home) { + p = g_build_path (";", p, g_build_filename (user_home, "Plugins", "VST", 0), 0); + } + } + } + + return p; +} + +#else + +/* Unix-like. Probably require some OS X specific breakdown if we ever add VST + * support on that platform. + */ + +const char * +vst_search_path () +{ + return "/usr/local/lib/vst:/usr/lib/vst"; +} + +#endif // PLATFORM_WINDOWS + } // namespace ARDOUR -- cgit v1.2.3