1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
| | This patch is taken from yabridge project:
https://github.com/robbert-vdh/yabridge.
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);
}
|