guix_mirror_bot pushed a commit to branch master
in repository guix.

commit 594dcabee57818331cec337eada5c859dd5716bf
Author: Sughosha <[email protected]>
AuthorDate: Sun Aug 24 06:48:49 2025 +0530

    gnu: Add vst3sdk.
    
    * gnu/packages/audio.scm (vst3sdk): New variable.
    
    Change-Id: I7aef9a2a37a97fdc0e471962f09488126e94c503
---
 gnu/local.mk                                       |   1 +
 gnu/packages/audio.scm                             |  19 ++
 .../vst3sdk-3.7.7-allow-winelib-compilation.patch  | 191 +++++++++++++++++++++
 3 files changed, 211 insertions(+)

diff --git a/gnu/local.mk b/gnu/local.mk
index ec57f97208..8b956256fd 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2441,6 +2441,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/vinagre-newer-freerdp.patch             \
   %D%/packages/patches/vinagre-newer-rdp-parameters.patch      \
   %D%/packages/patches/vsearch-unbundle-cityhash.patch         \
+  %D%/packages/patches/vst3sdk-3.7.7-allow-winelib-compilation.patch   \
   %D%/packages/patches/vte-CVE-2012-2738-pt1.patch                     \
   %D%/packages/patches/vte-CVE-2012-2738-pt2.patch                     \
   %D%/packages/patches/vtk-7-gcc-10-compat.patch               \
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index b40d95c19c..b7b1684755 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -6722,6 +6722,25 @@ default and preferred audio driver but also supports 
native drivers like ALSA.")
          (sha256
           (base32 "0cnj2sgr60f5h6wdfmihc214wf3n74686sipl3iyzmylqrcyhbjn")))))))
 
+;; This source is a fork of vst3sdk with the documentation and VSTGUI
+;; submodules removed and a dummy `meson.build` file that just lists all
+;; source files.
+(define vst3sdk
+  (let ((version "3.7.7_build_19-patched"))
+    (origin
+      (method git-fetch)
+      (uri
+       (git-reference
+         (url "https://github.com/robbert-vdh/vst3sdk";)
+         (commit (string-append "v" version))
+         ;; Required for vst3_base, vst3_pluginterfaces, and vst3_public_sdk.
+         (recursive? #t)))
+    (file-name (git-file-name "vst3sdk" version))
+    (sha256
+     (base32 "09axvpshwbf5061kcbl26v74dcmwxmgmlxb15b75bnqbh0zcghrf"))
+    (patches
+     (search-patches "vst3sdk-3.7.7-allow-winelib-compilation.patch")))))
+
 (define-public ecasound
   (package
     (name "ecasound")
diff --git a/gnu/packages/patches/vst3sdk-3.7.7-allow-winelib-compilation.patch 
b/gnu/packages/patches/vst3sdk-3.7.7-allow-winelib-compilation.patch
new file mode 100644
index 0000000000..5e120ef630
--- /dev/null
+++ b/gnu/packages/patches/vst3sdk-3.7.7-allow-winelib-compilation.patch
@@ -0,0 +1,191 @@
+This patch is taken from yabridge project:
+https://github.com/robbert-vdh/yabridge/tree/master/tools/vst3-sdk-patches.
+
+Submodule base contains modified content
+diff --git a/base/source/fdebug.cpp b/base/source/fdebug.cpp
+index b1d1dcc..9093022 100644
+--- a/base/source/fdebug.cpp
++++ b/base/source/fdebug.cpp
+@@ -117,8 +117,6 @@ bool AmIBeingDebugged ()
+ #if _MSC_VER
+ #include <intrin.h>
+ #endif
+-#define vsnprintf _vsnprintf
+-#define snprintf _snprintf
+ 
+ #elif SMTG_OS_MACOS
+ #include <errno.h>
+Submodule pluginterfaces contains modified content
+diff --git a/pluginterfaces/base/fstrdefs.h b/pluginterfaces/base/fstrdefs.h
+index 848e8ee..8846d31 100644
+--- a/pluginterfaces/base/fstrdefs.h
++++ b/pluginterfaces/base/fstrdefs.h
+@@ -22,6 +22,16 @@
+ /** string methods defines unicode / ASCII */
+ //----------------------------------------------------------------------------
+ 
++// We can use most of the VST3 SDK's Windows UTF-16 functionality by just
++// creating aliases for equivalent Linux functions
++#if __WINE__
++#define wcsicmp wcscasecmp
++#define wcsnicmp wcsncasecmp
++#define _vsnwprintf vswprintf
++#define stricmp strcasecmp
++#define strnicmp strncasecmp
++#endif
++
+ // 16 bit string operations
+ #if SMTG_CPP11        // if c++11 unicode string literals
+       #define SMTG_CPP11_CAT_PRIVATE_DONT_USE(a,b)                    a ## b
+diff --git a/pluginterfaces/base/ftypes.h b/pluginterfaces/base/ftypes.h
+index 133dbba..33ecae3 100644
+--- a/pluginterfaces/base/ftypes.h
++++ b/pluginterfaces/base/ftypes.h
+@@ -154,7 +154,7 @@ namespace Steinberg
+ // always inline macros (only when RELEASE is 1)
+ //----------------------------------------------------------------------------
+ #if RELEASE
+-    #if SMTG_OS_MACOS || SMTG_OS_LINUX || defined(__MINGW32__)
++    #if SMTG_OS_MACOS || SMTG_OS_LINUX || defined(__WINE__)
+               #define SMTG_ALWAYS_INLINE      __inline__ 
__attribute__((__always_inline__))
+               #define SMTG_NEVER_INLINE __attribute__((noinline))
+       #elif SMTG_OS_WINDOWS
+diff --git a/pluginterfaces/base/ustring.cpp b/pluginterfaces/base/ustring.cpp
+index 24a412f..8e631c9 100644
+--- a/pluginterfaces/base/ustring.cpp
++++ b/pluginterfaces/base/ustring.cpp
+@@ -38,6 +38,10 @@
+ 
+ #endif
+ 
++#ifdef __WINE__
++#include <wchar.h>
++#endif
++
+ //------------------------------------------------------------------------
+ namespace Steinberg {
+ 
+@@ -173,7 +177,7 @@ bool UString::scanFloat (double& value) const
+ bool UString::printFloat (double value, int32 precision)
+ {
+ #if SMTG_OS_WINDOWS
+-      return swprintf ((wchar_t*)thisBuffer, L"%.*lf", precision, value) != 
-1;
++      return swprintf ((wchar_t*)thisBuffer, thisSize, L"%.*lf", precision, 
value) != -1;
+ #elif SMTG_OS_MACOS
+       bool result = false;
+       CFStringRef cfStr = CFStringCreateWithFormat (0, 0, CFSTR("%.*lf"), 
precision, value);
+@@ -238,7 +242,7 @@ bool UString::scanInt (int64& value) const
+ bool UString::printInt (int64 value)
+ {
+ #if SMTG_OS_WINDOWS
+-      return swprintf ((wchar_t*)thisBuffer, L"%I64d", value) != -1;
++      return swprintf ((wchar_t*)thisBuffer, thisSize, L"%I64d", value) != -1;
+ 
+ #elif SMTG_OS_MACOS
+       CFStringRef cfStr = CFStringCreateWithFormat (0, 0, CFSTR("%lld"), 
value);
+Submodule public.sdk contains modified content
+diff --git a/public.sdk/source/common/systemclipboard_win32.cpp 
b/public.sdk/source/common/systemclipboard_win32.cpp
+index c5cb2b8..2ee3d65 100644
+--- a/public.sdk/source/common/systemclipboard_win32.cpp
++++ b/public.sdk/source/common/systemclipboard_win32.cpp
+@@ -111,7 +111,7 @@ bool copyTextToClipboard (const std::string& text)
+       {
+               if (auto* data = static_cast<WCHAR*> (GlobalLock (memory)))
+               {
+-#if defined(__MINGW32__)
++#if defined(__WINE__)
+                       memcpy (data, wideStr.data (), byteSize);
+ #else
+                       memcpy_s (data, byteSize, wideStr.data (), byteSize);
+diff --git a/public.sdk/source/vst/hosting/module_win32.cpp 
b/public.sdk/source/vst/hosting/module_win32.cpp
+index 2ba9319..ab6d72a 100644
+--- a/public.sdk/source/vst/hosting/module_win32.cpp
++++ b/public.sdk/source/vst/hosting/module_win32.cpp
+@@ -44,35 +44,10 @@
+ #include <algorithm>
+ #include <iostream>
+ 
+-#if SMTG_CPP17
+-
+-#if __has_include(<filesystem>)
+-#define USE_FILESYSTEM 1
+-#elif __has_include(<experimental/filesystem>)
+-#define USE_FILESYSTEM 0
+-#endif
+-
+-#else // !SMTG_CPP17
+-
+-#define USE_FILESYSTEM 0
+-
+-#endif // SMTG_CPP17
+-
+-#if USE_FILESYSTEM == 1
+-
+-#include <filesystem>
+-namespace filesystem = std::filesystem;
+-
+-#else // USE_FILESYSTEM == 0
+-
+-// The <experimental/filesystem> header is deprecated. It is superseded by 
the C++17 <filesystem>
+-// header. You can define 
_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING to silence the
+-// warning, otherwise the build will fail in VS2019 16.3.0
+-#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
+-#include <experimental/filesystem>
+-namespace filesystem = std::experimental::filesystem;
+-
+-#endif // USE_FILESYSTEM
++// `std::filesystem` doesn't work correctly with wineg++, resulting in weird
++// memory errors. This library is a drop-in replacement.
++#include <ghc/filesystem.hpp>
++namespace filesystem = ghc::filesystem;
+ 
+ #pragma comment(lib, "Shell32")
+ 
+@@ -320,7 +295,7 @@ VST3::Optional<filesystem::path> resolveShellLink (const 
filesystem::path& p)
+ #elif USE_OLE
+       Ole::instance ();
+ 
+-      IShellLink* shellLink = nullptr;
++      IShellLinkW* shellLink = nullptr;
+       if (!SUCCEEDED (CoCreateInstance (CLSID_ShellLink, nullptr, 
CLSCTX_INPROC_SERVER,
+                                         IID_IShellLink, 
reinterpret_cast<LPVOID*> (&shellLink))))
+               return {};
+@@ -405,13 +380,13 @@ void findFilesWithExt (const filesystem::path& path, 
const std::string& ext,
+                               filesystem::path result;
+                               if (checkVST3Package (p, &result))
+                               {
+-                                      pathList.push_back 
(result.generic_u8string ());
++                                      pathList.push_back 
(result.generic_string ());
+                                       continue;
+                               }
+                               findFilesWithExt (cp, ext, pathList, recursive);
+                       }
+                       else
+-                              pathList.push_back (cp.generic_u8string ());
++                              pathList.push_back (cp.generic_string ());
+               }
+               else if (recursive)
+               {
+@@ -431,18 +406,18 @@ void findFilesWithExt (const filesystem::path& path, 
const std::string& ext,
+                                                       filesystem::path result;
+                                                       if (checkVST3Package 
(*resolvedLink, &result))
+                                                       {
+-                                                              
pathList.push_back (result.generic_u8string ());
++                                                              
pathList.push_back (result.generic_string ());
+                                                               continue;
+                                                       }
+                                                       findFilesWithExt 
(*resolvedLink, ext, pathList, recursive);
+                                               }
+                                               else
+-                                                      pathList.push_back 
(resolvedLink->generic_u8string ());
++                                                      pathList.push_back 
(resolvedLink->generic_string ());
+                                       }
+                                       else if (filesystem::is_directory 
(*resolvedLink))
+                                       {
+-                                              const auto& str = 
resolvedLink->generic_u8string ();
+-                                              if (cp.generic_u8string 
().compare (0, str.size (), str.data (),
++                                              const auto& str = 
resolvedLink->generic_string ();
++                                              if (cp.generic_string 
().compare (0, str.size (), str.data (),
+                                                                               
    str.size ()) != 0)
+                                                       findFilesWithExt 
(*resolvedLink, ext, pathList, recursive);
+                                       }

Reply via email to