You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
13KB

  1. #include "global_pre.hpp"
  2. #include "plugin.hpp"
  3. #include "Core/Core.hpp"
  4. #include "app.hpp"
  5. #include "asset.hpp"
  6. #include "util/request.hpp"
  7. #include "osdialog.h"
  8. #include <stdio.h>
  9. #include <assert.h>
  10. #include <string.h>
  11. #ifdef YAC_POSIX
  12. #include <unistd.h>
  13. #include <sys/types.h>
  14. #include <sys/stat.h>
  15. #include <sys/param.h> // for MAXPATHLEN
  16. #include <fcntl.h>
  17. #include <dirent.h>
  18. #else
  19. #include "util/dirent_win32/dirent.h"
  20. #endif // YAC_POSIX
  21. #include <thread>
  22. #include <stdexcept>
  23. #include "global.hpp"
  24. #include "global_ui.hpp"
  25. #ifndef USE_VST2
  26. #define ZIP_STATIC
  27. #include <zip.h>
  28. #endif // USE_VST2
  29. #include <jansson.h>
  30. #if ARCH_WIN
  31. #include <windows.h>
  32. #include <direct.h>
  33. #define mkdir(_dir, _perms) _mkdir(_dir)
  34. #else
  35. #include <dlfcn.h>
  36. #endif
  37. namespace rack {
  38. extern Plugin *pluginGetPlugin (std::string pluginSlug);
  39. #ifdef USE_VST2
  40. #ifndef RACK_PLUGIN
  41. #ifndef SKIP_STATIC_MODULES
  42. extern "C" {
  43. extern void init_plugin_21kHz (rack::Plugin *p);
  44. extern void init_plugin_AmalgamatedHarmonics (rack::Plugin *p);
  45. extern void init_plugin_Alikins (rack::Plugin *p);
  46. extern void init_plugin_alto777_LFSR (rack::Plugin *p);
  47. extern void init_plugin_arjo_modules (rack::Plugin *p);
  48. extern void init_plugin_AS (rack::Plugin *p);
  49. extern void init_plugin_AudibleInstruments (rack::Plugin *p);
  50. extern void init_plugin_Autodafe (rack::Plugin *p);
  51. extern void init_plugin_BaconMusic (rack::Plugin *p);
  52. extern void init_plugin_Bark (rack::Plugin *p);
  53. extern void init_plugin_Befaco (rack::Plugin *p);
  54. extern void init_plugin_Bidoo (rack::Plugin *p);
  55. extern void init_plugin_Bogaudio (rack::Plugin *p);
  56. // extern void init_plugin_bsp (rack::Plugin *p); // contains GPLv3 code from Ob-Xd (Obxd_VCF)
  57. // extern void init_plugin_BOKONTEPByteBeatMachine (rack::Plugin *p); // unstable
  58. extern void init_plugin_CastleRocktronics (rack::Plugin *p);
  59. extern void init_plugin_cf (rack::Plugin *p);
  60. extern void init_plugin_com_soundchasing_stochasm (rack::Plugin *p);
  61. extern void init_plugin_computerscare (rack::Plugin *p);
  62. //extern void init_plugin_dBiz (rack::Plugin *p); // now a DLL (13Jul2018)
  63. extern void init_plugin_DHE_Modules (rack::Plugin *p);
  64. extern void init_plugin_DrumKit (rack::Plugin *p);
  65. extern void init_plugin_Edge (rack::Plugin *p);
  66. extern void init_plugin_EH_modules (rack::Plugin *p);
  67. extern void init_plugin_ErraticInstruments (rack::Plugin *p);
  68. extern void init_plugin_ESeries (rack::Plugin *p);
  69. extern void init_plugin_FrankBussFormula (rack::Plugin *p);
  70. extern void init_plugin_FrozenWasteland (rack::Plugin *p);
  71. extern void init_plugin_Fundamental (rack::Plugin *p);
  72. extern void init_plugin_Geodesics (rack::Plugin *p);
  73. extern void init_plugin_Gratrix (rack::Plugin *p);
  74. extern void init_plugin_HetrickCV (rack::Plugin *p);
  75. extern void init_plugin_huaba (rack::Plugin *p);
  76. extern void init_plugin_ImpromptuModular (rack::Plugin *p);
  77. extern void init_plugin_JE (rack::Plugin *p);
  78. extern void init_plugin_JW_Modules (rack::Plugin *p);
  79. extern void init_plugin_Koralfx (rack::Plugin *p);
  80. extern void init_plugin_LabSeven (rack::Plugin *p);
  81. extern void init_plugin_LindenbergResearch (rack::Plugin *p);
  82. extern void init_plugin_LOGinstruments (rack::Plugin *p);
  83. extern void init_plugin_mental (rack::Plugin *p);
  84. extern void init_plugin_MicMusic (rack::Plugin *p);
  85. extern void init_plugin_ML_modules (rack::Plugin *p);
  86. extern void init_plugin_moDllz (rack::Plugin *p);
  87. extern void init_plugin_modular80 (rack::Plugin *p);
  88. extern void init_plugin_mscHack (rack::Plugin *p);
  89. extern void init_plugin_mtsch_plugins (rack::Plugin *p);
  90. extern void init_plugin_NauModular (rack::Plugin *p);
  91. extern void init_plugin_Nohmad (rack::Plugin *p);
  92. extern void init_plugin_noobhour (rack::Plugin *p);
  93. extern void init_plugin_Ohmer (rack::Plugin *p);
  94. // extern void init_plugin_ParableInstruments (rack::Plugin *p); // alternative "Clouds" module (crashes)
  95. extern void init_plugin_PG_Instruments (rack::Plugin *p);
  96. extern void init_plugin_PvC (rack::Plugin *p);
  97. extern void init_plugin_QuantalAudio (rack::Plugin *p);
  98. extern void init_plugin_Qwelk (rack::Plugin *p);
  99. extern void init_plugin_rcm (rack::Plugin *p);
  100. extern void init_plugin_RJModules (rack::Plugin *p);
  101. extern void init_plugin_SerialRacker (rack::Plugin *p);
  102. extern void init_plugin_Skylights (rack::Plugin *p);
  103. extern void init_plugin_SonusModular (rack::Plugin *p);
  104. extern void init_plugin_Southpole (rack::Plugin *p);
  105. extern void init_plugin_Southpole_parasites (rack::Plugin *p);
  106. extern void init_plugin_squinkylabs_plug1 (rack::Plugin *p);
  107. extern void init_plugin_SubmarineFree (rack::Plugin *p);
  108. extern void init_plugin_SynthKit (rack::Plugin *p);
  109. extern void init_plugin_Template (rack::Plugin *p);
  110. extern void init_plugin_TheXOR (rack::Plugin *p);
  111. extern void init_plugin_trowaSoft (rack::Plugin *p);
  112. extern void init_plugin_unless_modules (rack::Plugin *p);
  113. extern void init_plugin_Valley (rack::Plugin *p);
  114. // extern void init_plugin_VultModules (rack::Plugin *p);
  115. }
  116. static void vst2_load_static_rack_plugin(const char *_name, InitCallback _initCallback) {
  117. std::string path = assetStaticPlugin(_name);
  118. // Construct and initialize Plugin instance
  119. Plugin *plugin = new Plugin();
  120. plugin->path = path;
  121. plugin->handle = NULL;
  122. _initCallback(plugin);
  123. #if 0
  124. // Reject plugin if slug already exists
  125. Plugin *oldPlugin = pluginGetPlugin(plugin->slug);
  126. if (oldPlugin) {
  127. warn("Plugin \"%s\" is already loaded, not attempting to load it again", plugin->slug.c_str());
  128. // TODO
  129. // Fix memory leak with `plugin` here
  130. return false;
  131. }
  132. #endif
  133. // Add plugin to list
  134. global->plugin.gPlugins.push_back(plugin);
  135. info("vcvrack: Loaded static plugin %s %s", plugin->slug.c_str(), plugin->version.c_str());
  136. }
  137. #endif // SKIP_STATIC_MODULES
  138. void vst2_load_static_rack_plugins(void) {
  139. #ifndef SKIP_STATIC_MODULES
  140. printf("[dbg] vst2_load_static_rack_plugins: ENTER\n");
  141. #if 1
  142. vst2_load_static_rack_plugin("21kHz", &init_plugin_21kHz);
  143. vst2_load_static_rack_plugin("AmalgamatedHarmonics", &init_plugin_AmalgamatedHarmonics);
  144. vst2_load_static_rack_plugin("Alikins", &init_plugin_Alikins);
  145. vst2_load_static_rack_plugin("alto777_LFSR", &init_plugin_alto777_LFSR);
  146. vst2_load_static_rack_plugin("arjo_modules", &init_plugin_arjo_modules);
  147. vst2_load_static_rack_plugin("AS", &init_plugin_AS);
  148. vst2_load_static_rack_plugin("AudibleInstruments", &init_plugin_AudibleInstruments);
  149. vst2_load_static_rack_plugin("Autodafe", &init_plugin_Autodafe);
  150. vst2_load_static_rack_plugin("BaconMusic", &init_plugin_BaconMusic);
  151. vst2_load_static_rack_plugin("Bark", &init_plugin_Bark);
  152. vst2_load_static_rack_plugin("Befaco", &init_plugin_Befaco);
  153. vst2_load_static_rack_plugin("Bidoo", &init_plugin_Bidoo);
  154. vst2_load_static_rack_plugin("Bogaudio", &init_plugin_Bogaudio);
  155. // vst2_load_static_rack_plugin("bsp", &init_plugin_bsp); // contains GPLv3 code from Ob-Xd (Obxd_VCF)
  156. // vst2_load_static_rack_plugin("BOKONTEPByteBeatMachine", &init_plugin_BOKONTEPByteBeatMachine);
  157. vst2_load_static_rack_plugin("CastleRocktronics", &init_plugin_CastleRocktronics);
  158. vst2_load_static_rack_plugin("cf", &init_plugin_cf);
  159. vst2_load_static_rack_plugin("com_soundchasing_stochasm", &init_plugin_com_soundchasing_stochasm);
  160. vst2_load_static_rack_plugin("computerscare", &init_plugin_computerscare);
  161. // vst2_load_static_rack_plugin("dBiz", &init_plugin_dBiz); // now a DLL (13Jul2018)
  162. vst2_load_static_rack_plugin("DHE-Modules", &init_plugin_DHE_Modules);
  163. vst2_load_static_rack_plugin("DrumKit", &init_plugin_DrumKit);
  164. vst2_load_static_rack_plugin("Edge", &init_plugin_Edge);
  165. vst2_load_static_rack_plugin("EH_modules", &init_plugin_EH_modules);
  166. vst2_load_static_rack_plugin("ErraticInstruments", &init_plugin_ErraticInstruments);
  167. vst2_load_static_rack_plugin("ESeries", &init_plugin_ESeries);
  168. vst2_load_static_rack_plugin("FrankBussFormula", &init_plugin_FrankBussFormula);
  169. vst2_load_static_rack_plugin("FrozenWasteland", &init_plugin_FrozenWasteland);
  170. vst2_load_static_rack_plugin("Fundamental", &init_plugin_Fundamental);
  171. vst2_load_static_rack_plugin("Geodesics", &init_plugin_Geodesics);
  172. vst2_load_static_rack_plugin("Gratrix", &init_plugin_Gratrix);
  173. vst2_load_static_rack_plugin("HetrickCV", &init_plugin_HetrickCV);
  174. vst2_load_static_rack_plugin("huaba", &init_plugin_huaba);
  175. vst2_load_static_rack_plugin("ImpromptuModular", &init_plugin_ImpromptuModular);
  176. vst2_load_static_rack_plugin("JE", &init_plugin_JE);
  177. vst2_load_static_rack_plugin("JW_Modules", &init_plugin_JW_Modules);
  178. vst2_load_static_rack_plugin("Koralfx-Modules", &init_plugin_Koralfx);
  179. vst2_load_static_rack_plugin("LabSeven", &init_plugin_LabSeven);
  180. vst2_load_static_rack_plugin("LindenbergResearch", &init_plugin_LindenbergResearch);
  181. vst2_load_static_rack_plugin("LOGinstruments", &init_plugin_LOGinstruments);
  182. vst2_load_static_rack_plugin("mental", &init_plugin_mental);
  183. vst2_load_static_rack_plugin("MicMusic", &init_plugin_MicMusic);
  184. vst2_load_static_rack_plugin("ML_modules", &init_plugin_ML_modules);
  185. vst2_load_static_rack_plugin("moDllz", &init_plugin_moDllz);
  186. vst2_load_static_rack_plugin("modular80", &init_plugin_modular80);
  187. vst2_load_static_rack_plugin("mscHack", &init_plugin_mscHack);
  188. vst2_load_static_rack_plugin("mtsch_plugins", &init_plugin_mtsch_plugins);
  189. vst2_load_static_rack_plugin("NauModular", &init_plugin_NauModular);
  190. vst2_load_static_rack_plugin("Nohmad", &init_plugin_Nohmad);
  191. vst2_load_static_rack_plugin("noobhour", &init_plugin_noobhour);
  192. vst2_load_static_rack_plugin("Ohmer", &init_plugin_Ohmer);
  193. // vst2_load_static_rack_plugin("ParableInstruments", &init_plugin_ParableInstruments);
  194. vst2_load_static_rack_plugin("PG_Instruments", &init_plugin_PG_Instruments);
  195. vst2_load_static_rack_plugin("PvC", &init_plugin_PvC);
  196. vst2_load_static_rack_plugin("QuantalAudio", &init_plugin_QuantalAudio);
  197. vst2_load_static_rack_plugin("Qwelk", &init_plugin_Qwelk);
  198. vst2_load_static_rack_plugin("rcm", &init_plugin_rcm);
  199. vst2_load_static_rack_plugin("RJModules", &init_plugin_RJModules);
  200. vst2_load_static_rack_plugin("SerialRacker", &init_plugin_SerialRacker);
  201. vst2_load_static_rack_plugin("Skylights", &init_plugin_Skylights);
  202. vst2_load_static_rack_plugin("SonusModular", &init_plugin_SonusModular);
  203. vst2_load_static_rack_plugin("Southpole", &init_plugin_Southpole);
  204. vst2_load_static_rack_plugin("Southpole_parasites", &init_plugin_Southpole_parasites);
  205. vst2_load_static_rack_plugin("squinkylabs-plug1", &init_plugin_squinkylabs_plug1);
  206. vst2_load_static_rack_plugin("SubmarineFree", &init_plugin_SubmarineFree);
  207. vst2_load_static_rack_plugin("SynthKit", &init_plugin_SynthKit);
  208. vst2_load_static_rack_plugin("Template", &init_plugin_Template);
  209. vst2_load_static_rack_plugin("TheXOR", &init_plugin_TheXOR);
  210. vst2_load_static_rack_plugin("trowaSoft", &init_plugin_trowaSoft);
  211. vst2_load_static_rack_plugin("unless_modules", &init_plugin_unless_modules);
  212. vst2_load_static_rack_plugin("Valley", &init_plugin_Valley);
  213. // vst2_load_static_rack_plugin("VultModules", &init_plugin_VultModules);
  214. #else
  215. vst2_load_static_rack_plugin("Template", &init_plugin_Template);
  216. #endif
  217. printf("[dbg] vst2_load_static_rack_plugins: LEAVE\n");
  218. #endif // SKIP_STATIC_MODULES
  219. }
  220. #endif // RACK_PLUGIN
  221. #endif // USE_VST2
  222. }