commit 85beab57e1616f1b5bc923319d7abbbcc86ceea2 Author: falkTX Date: Wed Feb 28 22:16:15 2024 +0100 wine related fixes Signed-off-by: falkTX diff --git a/source/bridges-plugin/CarlaBridgePlugin.cpp b/source/bridges-plugin/CarlaBridgePlugin.cpp index cbf79ebf1..991cf4257 100644 --- a/source/bridges-plugin/CarlaBridgePlugin.cpp +++ b/source/bridges-plugin/CarlaBridgePlugin.cpp @@ -86,6 +86,11 @@ static void saveSignalHandler(int) noexcept gSaveNow = true; } #elif defined(CARLA_OS_WIN) +static LONG WINAPI winExceptionFilter(_EXCEPTION_POINTERS*) +{ + return EXCEPTION_EXECUTE_HANDLER; +} + static BOOL WINAPI winSignalHandler(DWORD dwCtrlType) noexcept { if (dwCtrlType == CTRL_C_EVENT) @@ -115,6 +120,8 @@ static void initSignalHandler() sigaction(SIGUSR1, &sig, nullptr); #elif defined(CARLA_OS_WIN) SetConsoleCtrlHandler(winSignalHandler, TRUE); + SetErrorMode(SEM_NOGPFAULTERRORBOX); + SetUnhandledExceptionFilter(winExceptionFilter); #endif } diff --git a/source/discovery/carla-discovery.cpp b/source/discovery/carla-discovery.cpp index 43a3af0d7..996c33247 100644 --- a/source/discovery/carla-discovery.cpp +++ b/source/discovery/carla-discovery.cpp @@ -132,7 +132,6 @@ protected: CarlaScopedPointer gPipe; - // -------------------------------------------------------------------------------------------------------------------- // Don't print ELF/EXE related errors since discovery can find multi-architecture binaries @@ -151,6 +150,16 @@ static void print_lib_error(const char* const filename) } } +#ifdef CARLA_OS_WIN +// -------------------------------------------------------------------------------------------------------------------- +// Do not show error message box on Windows + +static LONG WINAPI winExceptionFilter(_EXCEPTION_POINTERS*) +{ + return EXCEPTION_EXECUTE_HANDLER; +} +#endif + // -------------------------------------------------------------------------------------------------------------------- // Plugin Checks @@ -2305,13 +2314,19 @@ int main(int argc, const char* argv[]) #endif #ifdef CARLA_OS_WIN + // init win32 stuff that plugins might use OleInitialize(nullptr); CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + # ifndef __WINPTHREADS_VERSION // (non-portable) initialization of statically linked pthread library pthread_win32_process_attach_np(); pthread_win32_thread_attach_np(); # endif + + // do not show error message box on Windows + SetErrorMode(SEM_NOGPFAULTERRORBOX); + SetUnhandledExceptionFilter(winExceptionFilter); #endif // --------------------------------------------------------------------------------------------------------------- diff --git a/source/jackbridge/Makefile b/source/jackbridge/Makefile index a7bd0a4cf..a95776ef8 100644 --- a/source/jackbridge/Makefile +++ b/source/jackbridge/Makefile @@ -22,6 +22,7 @@ WINE_32BIT_FLAGS = $(32BIT_FLAGS) -fpermissive WINE_64BIT_FLAGS = $(64BIT_FLAGS) -fpermissive WINE_BUILD_FLAGS = $(filter-out -flto,$(BUILD_CXX_FLAGS)) WINE_LINK_FLAGS = $(filter-out -flto -static-libgcc -static-libstdc++,$(LINK_FLAGS)) +WINE_LINK_FLAGS += -nostartfiles WINE_LINK_FLAGS += $(LIBDL_LIBS) WINE_LINK_FLAGS += -pthread WINE_LINK_FLAGS += -lstdc++