From b32d9a1c70cb81680b75f3b02ae54d4e6afb20e5 Mon Sep 17 00:00:00 2001 From: John Emmas Date: Mon, 10 Mar 2014 15:37:23 +0000 Subject: [PATCH] Transfer 'vst_search_path()' into 'libs/ardour/search_paths.cc' --- libs/ardour/ardour/search_paths.h | 2 + libs/ardour/ardour/vst_search_path.h | 8 -- libs/ardour/plugin_manager.cc | 1 - libs/ardour/search_paths.cc | 120 +++++++++++++++++++++- libs/ardour/vst_search_path.cc | 146 --------------------------- 5 files changed, 121 insertions(+), 156 deletions(-) delete mode 100644 libs/ardour/ardour/vst_search_path.h delete mode 100644 libs/ardour/vst_search_path.cc diff --git a/libs/ardour/ardour/search_paths.h b/libs/ardour/ardour/search_paths.h index 6de5db3ef0..85ed2cbfd7 100644 --- a/libs/ardour/ardour/search_paths.h +++ b/libs/ardour/ardour/search_paths.h @@ -25,6 +25,8 @@ namespace ARDOUR { + LIBARDOUR_API const char *vst_search_path (); + /** * return a SearchPath containing directories in which to look for * backend plugins. diff --git a/libs/ardour/ardour/vst_search_path.h b/libs/ardour/ardour/vst_search_path.h deleted file mode 100644 index b220cd0ec2..0000000000 --- a/libs/ardour/ardour/vst_search_path.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __libardour_vst_search_path_h__ -#define __libardour_vst_search_path_h__ - -namespace ARDOUR { - const char *vst_search_path (); -}; - -#endif /* __libardour_vst_path_h__ */ diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 456cf42c9a..2db24ed269 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -63,7 +63,6 @@ #include "ardour/rc_configuration.h" #include "ardour/search_paths.h" -#include "ardour/vst_search_path.h" #ifdef LV2_SUPPORT #include "ardour/lv2_plugin.h" 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 diff --git a/libs/ardour/vst_search_path.cc b/libs/ardour/vst_search_path.cc deleted file mode 100644 index c727b9b9ab..0000000000 --- a/libs/ardour/vst_search_path.cc +++ /dev/null @@ -1,146 +0,0 @@ -/* - Copyright (C) 2008 John Emmas - - 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include -#include -#include - -#include "ardour/vst_search_path.h" - -#ifdef PLATFORM_WINDOWS - -#include -#include // CSIDL_* -#include "pbd/windows_special_dirs.h" - -namespace ARDOUR { - -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; -} - -} // namespace ARDOUR - -#else - -/* Unix-like. Probably require some OS X specific breakdown if we ever add VST - * support on that platform. - */ - -namespace ARDOUR { - -const char * -vst_search_path () -{ - return "/usr/local/lib/vst:/usr/lib/vst"; -} - -} // namespace ARDOUR - -#endif /* PLATFORM_WINDOWS */ - -- 2.30.2