Collection of DPF-based plugins for packaging
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.

169 lines
4.6KB

  1. /*
  2. * DISTRHO Plugin Framework (DPF)
  3. * Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any purpose with
  6. * or without fee is hereby granted, provided that the above copyright notice and this
  7. * permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
  10. * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
  11. * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  13. * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #ifndef DISTRHO_IS_STANDALONE
  17. # error Wrong build configuration
  18. #endif
  19. #include "../extra/String.hpp"
  20. #include "../DistrhoStandaloneUtils.hpp"
  21. #ifdef DISTRHO_OS_WINDOWS
  22. # include <windows.h>
  23. #else
  24. # ifndef STATIC_BUILD
  25. # include <dlfcn.h>
  26. # endif
  27. # include <limits.h>
  28. # include <stdlib.h>
  29. #endif
  30. #ifdef DISTRHO_OS_WINDOWS
  31. # if DISTRHO_IS_STANDALONE || defined(STATIC_BUILD)
  32. static constexpr const HINSTANCE hInstance = nullptr;
  33. # else
  34. static HINSTANCE hInstance = nullptr;
  35. DISTRHO_PLUGIN_EXPORT
  36. BOOL WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID)
  37. {
  38. if (reason == DLL_PROCESS_ATTACH)
  39. hInstance = hInst;
  40. return 1;
  41. }
  42. # endif
  43. #endif
  44. START_NAMESPACE_DISTRHO
  45. // -----------------------------------------------------------------------
  46. const char* getBinaryFilename()
  47. {
  48. static String filename;
  49. #ifndef STATIC_BUILD
  50. if (filename.isNotEmpty())
  51. return filename;
  52. #ifdef DISTRHO_OS_WINDOWS
  53. CHAR filenameBuf[MAX_PATH];
  54. filenameBuf[0] = '\0';
  55. GetModuleFileNameA(hInstance, filenameBuf, sizeof(filenameBuf));
  56. filename = filenameBuf;
  57. #else
  58. Dl_info info;
  59. dladdr((void*)getBinaryFilename, &info);
  60. char filenameBuf[PATH_MAX];
  61. filename = realpath(info.dli_fname, filenameBuf);
  62. #endif
  63. #endif
  64. return filename;
  65. }
  66. const char* getPluginFormatName() noexcept
  67. {
  68. #if defined(DISTRHO_PLUGIN_TARGET_CARLA)
  69. return "Carla";
  70. #elif defined(DISTRHO_PLUGIN_TARGET_JACK)
  71. #if defined(DISTRHO_OS_WASM)
  72. return "Wasm/Standalone";
  73. #elif defined(HAVE_JACK)
  74. return "JACK/Standalone";
  75. #else
  76. return "Standalone";
  77. #endif
  78. #elif defined(DISTRHO_PLUGIN_TARGET_LADSPA)
  79. return "LADSPA";
  80. #elif defined(DISTRHO_PLUGIN_TARGET_DSSI)
  81. return "DSSI";
  82. #elif defined(DISTRHO_PLUGIN_TARGET_LV2)
  83. return "LV2";
  84. #elif defined(DISTRHO_PLUGIN_TARGET_VST2)
  85. return "VST2";
  86. #elif defined(DISTRHO_PLUGIN_TARGET_VST3)
  87. return "VST3";
  88. #elif defined(DISTRHO_PLUGIN_TARGET_CLAP)
  89. return "CLAP";
  90. #elif defined(DISTRHO_PLUGIN_TARGET_STATIC) && defined(DISTRHO_PLUGIN_TARGET_STATIC_NAME)
  91. return DISTRHO_PLUGIN_TARGET_STATIC_NAME;
  92. #else
  93. return "Unknown";
  94. #endif
  95. }
  96. const char* getResourcePath(const char* const bundlePath) noexcept
  97. {
  98. DISTRHO_SAFE_ASSERT_RETURN(bundlePath != nullptr, nullptr);
  99. #if defined(DISTRHO_PLUGIN_TARGET_JACK) || defined(DISTRHO_PLUGIN_TARGET_VST2) || defined(DISTRHO_PLUGIN_TARGET_CLAP)
  100. static String resourcePath;
  101. if (resourcePath.isEmpty())
  102. {
  103. resourcePath = bundlePath;
  104. #ifdef DISTRHO_OS_MAC
  105. resourcePath += "/Contents/Resources";
  106. #else
  107. resourcePath += DISTRHO_OS_SEP_STR "resources";
  108. #endif
  109. }
  110. return resourcePath.buffer();
  111. #elif defined(DISTRHO_PLUGIN_TARGET_LV2)
  112. static String resourcePath;
  113. if (resourcePath.isEmpty())
  114. {
  115. resourcePath = bundlePath;
  116. resourcePath += DISTRHO_OS_SEP_STR "resources";
  117. }
  118. return resourcePath.buffer();
  119. #elif defined(DISTRHO_PLUGIN_TARGET_VST3)
  120. static String resourcePath;
  121. if (resourcePath.isEmpty())
  122. {
  123. resourcePath = bundlePath;
  124. resourcePath += "/Contents/Resources";
  125. }
  126. return resourcePath.buffer();
  127. #endif
  128. return nullptr;
  129. }
  130. #ifndef DISTRHO_PLUGIN_TARGET_JACK
  131. // all these are null for non-standalone targets
  132. bool isUsingNativeAudio() noexcept { return false; }
  133. bool supportsAudioInput() { return false; }
  134. bool supportsBufferSizeChanges() { return false; }
  135. bool supportsMIDI() { return false; }
  136. bool isAudioInputEnabled() { return false; }
  137. bool isMIDIEnabled() { return false; }
  138. uint getBufferSize() { return 0; }
  139. bool requestAudioInput() { return false; }
  140. bool requestBufferSizeChange(uint) { return false; }
  141. bool requestMIDI() { return false; }
  142. #endif
  143. // -----------------------------------------------------------------------
  144. END_NAMESPACE_DISTRHO