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.

219 lines
11KB

  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_AS (rack::Plugin *p);
  48. extern void init_plugin_AudibleInstruments (rack::Plugin *p);
  49. extern void init_plugin_Autodafe (rack::Plugin *p);
  50. extern void init_plugin_BaconMusic (rack::Plugin *p);
  51. extern void init_plugin_Befaco (rack::Plugin *p);
  52. extern void init_plugin_Bidoo (rack::Plugin *p);
  53. extern void init_plugin_Bogaudio (rack::Plugin *p);
  54. // extern void init_plugin_bsp (rack::Plugin *p); // contains GPLv3 code from Ob-Xd (Obxd_VCF)
  55. // extern void init_plugin_BOKONTEPByteBeatMachine (rack::Plugin *p); // unstable
  56. extern void init_plugin_CastleRocktronics (rack::Plugin *p);
  57. extern void init_plugin_cf (rack::Plugin *p);
  58. extern void init_plugin_com_soundchasing_stochasm (rack::Plugin *p);
  59. extern void init_plugin_computerscare (rack::Plugin *p);
  60. //extern void init_plugin_dBiz (rack::Plugin *p); // now a DLL (13Jul2018)
  61. extern void init_plugin_DHE_Modules (rack::Plugin *p);
  62. extern void init_plugin_DrumKit (rack::Plugin *p);
  63. extern void init_plugin_ErraticInstruments (rack::Plugin *p);
  64. extern void init_plugin_ESeries (rack::Plugin *p);
  65. extern void init_plugin_FrankBussFormula (rack::Plugin *p);
  66. extern void init_plugin_FrozenWasteland (rack::Plugin *p);
  67. extern void init_plugin_Fundamental (rack::Plugin *p);
  68. extern void init_plugin_Geodesics (rack::Plugin *p);
  69. extern void init_plugin_Gratrix (rack::Plugin *p);
  70. extern void init_plugin_HetrickCV (rack::Plugin *p);
  71. extern void init_plugin_huaba (rack::Plugin *p);
  72. extern void init_plugin_ImpromptuModular (rack::Plugin *p);
  73. extern void init_plugin_JE (rack::Plugin *p);
  74. extern void init_plugin_JW_Modules (rack::Plugin *p);
  75. extern void init_plugin_Koralfx (rack::Plugin *p);
  76. extern void init_plugin_LindenbergResearch (rack::Plugin *p);
  77. extern void init_plugin_LOGinstruments (rack::Plugin *p);
  78. extern void init_plugin_mental (rack::Plugin *p);
  79. extern void init_plugin_ML_modules (rack::Plugin *p);
  80. extern void init_plugin_moDllz (rack::Plugin *p);
  81. extern void init_plugin_modular80 (rack::Plugin *p);
  82. extern void init_plugin_mscHack (rack::Plugin *p);
  83. extern void init_plugin_mtsch_plugins (rack::Plugin *p);
  84. extern void init_plugin_NauModular (rack::Plugin *p);
  85. extern void init_plugin_Nohmad (rack::Plugin *p);
  86. extern void init_plugin_Ohmer (rack::Plugin *p);
  87. // extern void init_plugin_ParableInstruments (rack::Plugin *p); // alternative "Clouds" module (crashes)
  88. extern void init_plugin_PG_Instruments (rack::Plugin *p);
  89. extern void init_plugin_PvC (rack::Plugin *p);
  90. extern void init_plugin_Qwelk (rack::Plugin *p);
  91. extern void init_plugin_RJModules (rack::Plugin *p);
  92. extern void init_plugin_SerialRacker (rack::Plugin *p);
  93. extern void init_plugin_SonusModular (rack::Plugin *p);
  94. extern void init_plugin_Southpole (rack::Plugin *p);
  95. extern void init_plugin_Southpole_parasites (rack::Plugin *p);
  96. extern void init_plugin_squinkylabs_plug1 (rack::Plugin *p);
  97. extern void init_plugin_SubmarineFree (rack::Plugin *p);
  98. extern void init_plugin_SynthKit (rack::Plugin *p);
  99. extern void init_plugin_Template (rack::Plugin *p);
  100. extern void init_plugin_TheXOR (rack::Plugin *p);
  101. extern void init_plugin_trowaSoft (rack::Plugin *p);
  102. extern void init_plugin_unless_modules (rack::Plugin *p);
  103. extern void init_plugin_Valley (rack::Plugin *p);
  104. // extern void init_plugin_VultModules (rack::Plugin *p);
  105. }
  106. #endif // SKIP_STATIC_MODULES
  107. static void vst2_load_static_rack_plugin(const char *_name, InitCallback _initCallback) {
  108. std::string path = assetStaticPlugin(_name);
  109. // Construct and initialize Plugin instance
  110. Plugin *plugin = new Plugin();
  111. plugin->path = path;
  112. plugin->handle = NULL;
  113. _initCallback(plugin);
  114. #if 0
  115. // Reject plugin if slug already exists
  116. Plugin *oldPlugin = pluginGetPlugin(plugin->slug);
  117. if (oldPlugin) {
  118. warn("Plugin \"%s\" is already loaded, not attempting to load it again", plugin->slug.c_str());
  119. // TODO
  120. // Fix memory leak with `plugin` here
  121. return false;
  122. }
  123. #endif
  124. // Add plugin to list
  125. global->plugin.gPlugins.push_back(plugin);
  126. info("vcvrack: Loaded static plugin %s %s", plugin->slug.c_str(), plugin->version.c_str());
  127. }
  128. void vst2_load_static_rack_plugins(void) {
  129. #ifndef SKIP_STATIC_MODULES
  130. printf("[dbg] vst2_load_static_rack_plugins: ENTER\n");
  131. #if 1
  132. vst2_load_static_rack_plugin("21kHz", &init_plugin_21kHz);
  133. vst2_load_static_rack_plugin("AmalgamatedHarmonics", &init_plugin_AmalgamatedHarmonics);
  134. vst2_load_static_rack_plugin("Alikins", &init_plugin_Alikins);
  135. vst2_load_static_rack_plugin("alto777_LFSR", &init_plugin_alto777_LFSR);
  136. vst2_load_static_rack_plugin("AS", &init_plugin_AS);
  137. vst2_load_static_rack_plugin("AudibleInstruments", &init_plugin_AudibleInstruments);
  138. vst2_load_static_rack_plugin("Autodafe", &init_plugin_Autodafe);
  139. vst2_load_static_rack_plugin("BaconMusic", &init_plugin_BaconMusic);
  140. vst2_load_static_rack_plugin("Befaco", &init_plugin_Befaco);
  141. vst2_load_static_rack_plugin("Bidoo", &init_plugin_Bidoo);
  142. vst2_load_static_rack_plugin("Bogaudio", &init_plugin_Bogaudio);
  143. // vst2_load_static_rack_plugin("bsp", &init_plugin_bsp); // contains GPLv3 code from Ob-Xd (Obxd_VCF)
  144. // vst2_load_static_rack_plugin("BOKONTEPByteBeatMachine", &init_plugin_BOKONTEPByteBeatMachine);
  145. vst2_load_static_rack_plugin("CastleRocktronics", &init_plugin_CastleRocktronics);
  146. vst2_load_static_rack_plugin("cf", &init_plugin_cf);
  147. vst2_load_static_rack_plugin("com_soundchasing_stochasm", &init_plugin_com_soundchasing_stochasm);
  148. vst2_load_static_rack_plugin("computerscare", &init_plugin_computerscare);
  149. // vst2_load_static_rack_plugin("dBiz", &init_plugin_dBiz); // now a DLL (13Jul2018)
  150. vst2_load_static_rack_plugin("DHE-Modules", &init_plugin_DHE_Modules);
  151. vst2_load_static_rack_plugin("DrumKit", &init_plugin_DrumKit);
  152. vst2_load_static_rack_plugin("ErraticInstruments", &init_plugin_ErraticInstruments);
  153. vst2_load_static_rack_plugin("ESeries", &init_plugin_ESeries);
  154. vst2_load_static_rack_plugin("FrankBussFormula", &init_plugin_FrankBussFormula);
  155. vst2_load_static_rack_plugin("FrozenWasteland", &init_plugin_FrozenWasteland);
  156. vst2_load_static_rack_plugin("Fundamental", &init_plugin_Fundamental);
  157. vst2_load_static_rack_plugin("Geodesics", &init_plugin_Geodesics);
  158. vst2_load_static_rack_plugin("Gratrix", &init_plugin_Gratrix);
  159. vst2_load_static_rack_plugin("HetrickCV", &init_plugin_HetrickCV);
  160. vst2_load_static_rack_plugin("huaba", &init_plugin_huaba);
  161. vst2_load_static_rack_plugin("ImpromptuModular", &init_plugin_ImpromptuModular);
  162. vst2_load_static_rack_plugin("JE", &init_plugin_JE);
  163. vst2_load_static_rack_plugin("JW_Modules", &init_plugin_JW_Modules);
  164. vst2_load_static_rack_plugin("Koralfx-Modules", &init_plugin_Koralfx);
  165. vst2_load_static_rack_plugin("LindenbergResearch", &init_plugin_LindenbergResearch);
  166. vst2_load_static_rack_plugin("LOGinstruments", &init_plugin_LOGinstruments);
  167. vst2_load_static_rack_plugin("mental", &init_plugin_mental);
  168. vst2_load_static_rack_plugin("ML_modules", &init_plugin_ML_modules);
  169. vst2_load_static_rack_plugin("moDllz", &init_plugin_moDllz);
  170. vst2_load_static_rack_plugin("modular80", &init_plugin_modular80);
  171. vst2_load_static_rack_plugin("mscHack", &init_plugin_mscHack);
  172. vst2_load_static_rack_plugin("mtsch_plugins", &init_plugin_mtsch_plugins);
  173. vst2_load_static_rack_plugin("NauModular", &init_plugin_NauModular);
  174. vst2_load_static_rack_plugin("Nohmad", &init_plugin_Nohmad);
  175. vst2_load_static_rack_plugin("Ohmer", &init_plugin_Ohmer);
  176. // vst2_load_static_rack_plugin("ParableInstruments", &init_plugin_ParableInstruments);
  177. vst2_load_static_rack_plugin("PG_Instruments", &init_plugin_PG_Instruments);
  178. vst2_load_static_rack_plugin("PvC", &init_plugin_PvC);
  179. vst2_load_static_rack_plugin("Qwelk", &init_plugin_Qwelk);
  180. vst2_load_static_rack_plugin("RJModules", &init_plugin_RJModules);
  181. vst2_load_static_rack_plugin("SerialRacker", &init_plugin_SerialRacker);
  182. vst2_load_static_rack_plugin("SonusModular", &init_plugin_SonusModular);
  183. vst2_load_static_rack_plugin("Southpole", &init_plugin_Southpole);
  184. vst2_load_static_rack_plugin("Southpole_parasites", &init_plugin_Southpole_parasites);
  185. vst2_load_static_rack_plugin("squinkylabs-plug1", &init_plugin_squinkylabs_plug1);
  186. vst2_load_static_rack_plugin("SubmarineFree", &init_plugin_SubmarineFree);
  187. vst2_load_static_rack_plugin("SynthKit", &init_plugin_SynthKit);
  188. vst2_load_static_rack_plugin("Template", &init_plugin_Template);
  189. vst2_load_static_rack_plugin("TheXOR", &init_plugin_TheXOR);
  190. vst2_load_static_rack_plugin("trowaSoft", &init_plugin_trowaSoft);
  191. vst2_load_static_rack_plugin("unless_modules", &init_plugin_unless_modules);
  192. vst2_load_static_rack_plugin("Valley", &init_plugin_Valley);
  193. // vst2_load_static_rack_plugin("VultModules", &init_plugin_VultModules);
  194. #else
  195. vst2_load_static_rack_plugin("Template", &init_plugin_Template);
  196. #endif
  197. printf("[dbg] vst2_load_static_rack_plugins: LEAVE\n");
  198. #endif // SKIP_STATIC_MODULES
  199. }
  200. #endif // RACK_PLUGIN
  201. #endif // USE_VST2
  202. }