2 Copyright (C) 2008 John Emmas
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 #include "ardour/vst_search_path.h"
25 #ifdef PLATFORM_WINDOWS
28 #include <shlobj.h> // CSIDL_*
29 #include "pbd/windows_special_dirs.h"
36 DWORD dwType = REG_SZ;
38 DWORD dwSize = PATH_MAX;
43 if (ERROR_SUCCESS == RegOpenKeyExA (HKEY_CURRENT_USER, "Software\\VST", 0, KEY_READ, &hKey)) {
44 // Look for the user's VST Registry entry
45 if (ERROR_SUCCESS == RegQueryValueExA (hKey, "VSTPluginsPath", 0, &dwType, (LPBYTE)tmp, &dwSize)) {
46 p = g_build_filename (Glib::locale_to_utf8(tmp).c_str(), 0);
51 if (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, "Software\\VST", 0, KEY_READ, &hKey)) {
52 // Look for a global VST Registry entry
53 if (ERROR_SUCCESS == RegQueryValueExA (hKey, "VSTPluginsPath", 0, &dwType, (LPBYTE)tmp, &dwSize))
54 p = g_build_filename (Glib::locale_to_utf8(tmp).c_str(), 0);
61 char *pProgFilesX86 = PBD::get_win_special_folder (CSIDL_PROGRAM_FILESX86);
64 // Look for a VST folder under C:\Program Files (x86)
65 if (pVSTx86 = g_build_filename (pProgFilesX86, "Steinberg", "VSTPlugins", 0)) {
66 if (Glib::file_test (pVSTx86, Glib::FILE_TEST_EXISTS))
67 if (Glib::file_test (pVSTx86, Glib::FILE_TEST_IS_DIR))
68 p = g_build_filename (pVSTx86, 0);
73 g_free (pProgFilesX86);
78 // Look for a VST folder under C:\Program Files
80 char *pProgFiles = PBD::get_win_special_folder (CSIDL_PROGRAM_FILES);
83 if (pVST = g_build_filename (pProgFiles, "Steinberg", "VSTPlugins", 0)) {
84 if (Glib::file_test (pVST, Glib::FILE_TEST_EXISTS))
85 if (Glib::file_test (pVST, Glib::FILE_TEST_IS_DIR))
86 p = g_build_filename (pVST, 0);
96 // If all else failed, assume the plugins are under "My Documents"
97 user_home = (char*) g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
99 p = g_build_filename (user_home, "Plugins", "VST", 0);
101 user_home = g_build_filename(g_get_home_dir(), "My Documents", 0);
103 p = g_build_filename (user_home, "Plugins", "VST", 0);
106 // Concatenate the registry path with the user's personal path
108 user_home = (char*) g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
111 p = g_build_path (";", p, g_build_filename(user_home, "Plugins", "VST", 0), 0);
113 user_home = g_build_filename(g_get_home_dir(), "My Documents", 0);
115 p = g_build_path (";", p, g_build_filename (user_home, "Plugins", "VST", 0), 0);
124 } // namespace ARDOUR
128 /* Unix-like. Probably require some OS X specific breakdown if we ever add VST
129 * support on that platform.
137 return "/usr/local/lib/vst:/usr/lib/vst";
140 } // namespace ARDOUR
142 #endif /* PLATFORM_WINDOWS */