| @@ -0,0 +1,19 @@ | |||||
| #!/bin/bash | |||||
| set -e | |||||
| export MACOS_OLD=true | |||||
| export CROSS_COMPILING=true | |||||
| _FLAGS="-mmacosx-version-min=10.6 -Wno-attributes -Wno-deprecated-declarations -Werror" | |||||
| export CFLAGS="${_FLAGS} -m32" | |||||
| export CXXFLAGS="${_FLAGS} -m32" | |||||
| export LDFLAGS="-m32" | |||||
| apple-cross-setup make -j4 | |||||
| export CFLAGS="${_FLAGS} -m64" | |||||
| export CXXFLAGS="${_FLAGS} -m64" | |||||
| export LDFLAGS="-m64" | |||||
| # FIXME | |||||
| apple-cross-setup make posix64 -j4 | |||||
| @@ -1087,7 +1087,7 @@ typedef enum { | |||||
| */ | */ | ||||
| ENGINE_OPTION_FRONTEND_WIN_ID = 17, | ENGINE_OPTION_FRONTEND_WIN_ID = 17, | ||||
| #ifndef CARLA_OS_WIN | |||||
| #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | |||||
| /*! | /*! | ||||
| * Set path to wine executable. | * Set path to wine executable. | ||||
| */ | */ | ||||
| @@ -1525,7 +1525,7 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch | |||||
| pData->options.frontendWinId = static_cast<uintptr_t>(winId); | pData->options.frontendWinId = static_cast<uintptr_t>(winId); | ||||
| } break; | } break; | ||||
| #ifndef CARLA_OS_WIN | |||||
| #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | |||||
| case ENGINE_OPTION_WINE_EXECUTABLE: | case ENGINE_OPTION_WINE_EXECUTABLE: | ||||
| CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); | CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); | ||||
| @@ -15,11 +15,15 @@ OBJS = \ | |||||
| $(OBJDIR)/CarlaEngineData.cpp.o \ | $(OBJDIR)/CarlaEngineData.cpp.o \ | ||||
| $(OBJDIR)/CarlaEngineGraph.cpp.o \ | $(OBJDIR)/CarlaEngineGraph.cpp.o \ | ||||
| $(OBJDIR)/CarlaEngineInternal.cpp.o \ | $(OBJDIR)/CarlaEngineInternal.cpp.o \ | ||||
| $(OBJDIR)/CarlaEngineOsc.cpp.o \ | |||||
| $(OBJDIR)/CarlaEngineOscSend.cpp.o \ | |||||
| $(OBJDIR)/CarlaEnginePorts.cpp.o \ | $(OBJDIR)/CarlaEnginePorts.cpp.o \ | ||||
| $(OBJDIR)/CarlaEngineThread.cpp.o | $(OBJDIR)/CarlaEngineThread.cpp.o | ||||
| ifeq ($(HAVE_LIBLO),true) | |||||
| OBJS += \ | |||||
| $(OBJDIR)/CarlaEngineOsc.cpp.o \ | |||||
| $(OBJDIR)/CarlaEngineOscSend.cpp.o | |||||
| endif | |||||
| OBJSa = $(OBJS) \ | OBJSa = $(OBJS) \ | ||||
| $(OBJDIR)/CarlaEngineJack.cpp.o \ | $(OBJDIR)/CarlaEngineJack.cpp.o \ | ||||
| $(OBJDIR)/CarlaEngineNative.cpp.o \ | $(OBJDIR)/CarlaEngineNative.cpp.o \ | ||||
| @@ -589,7 +589,7 @@ public: | |||||
| { | { | ||||
| const bool doVolume = carla_isNotEqual(pData->postProc.volume, 1.0f); | const bool doVolume = carla_isNotEqual(pData->postProc.volume, 1.0f); | ||||
| const bool doBalance = carla_isNotEqual(pData->postProc.balanceLeft, -1.0f) || carla_isNotEqual(pData->postProc.balanceRight, 1.0f); | |||||
| //const bool doBalance = carla_isNotEqual(pData->postProc.balanceLeft, -1.0f) || carla_isNotEqual(pData->postProc.balanceRight, 1.0f); | |||||
| float* outBufferL = audioOutBuffer.getWritePointer(0, timeOffset); | float* outBufferL = audioOutBuffer.getWritePointer(0, timeOffset); | ||||
| float* outBufferR = audioOutBuffer.getWritePointer(1, timeOffset); | float* outBufferR = audioOutBuffer.getWritePointer(1, timeOffset); | ||||
| @@ -489,6 +489,8 @@ public: | |||||
| fUI.window = CarlaPluginUI::newX11(this, frontendWinId, false); | fUI.window = CarlaPluginUI::newX11(this, frontendWinId, false); | ||||
| #else | #else | ||||
| msg = "Unknown UI type"; | msg = "Unknown UI type"; | ||||
| // unused | |||||
| (void)frontendWinId; | |||||
| #endif | #endif | ||||
| if (fUI.window == nullptr) | if (fUI.window == nullptr) | ||||
| @@ -40,7 +40,7 @@ public: | |||||
| CarlaEngineSingleLV2(const double sampleRate, | CarlaEngineSingleLV2(const double sampleRate, | ||||
| const char* const bundlePath, | const char* const bundlePath, | ||||
| const LV2_Feature* const* const features) | const LV2_Feature* const* const features) | ||||
| : Lv2PluginBaseClass(sampleRate, features), | |||||
| : Lv2PluginBaseClass<EngineTimeInfo>(sampleRate, features), | |||||
| fPlugin(nullptr), | fPlugin(nullptr), | ||||
| fUiName() | fUiName() | ||||
| { | { | ||||
| @@ -1040,7 +1040,7 @@ static void do_vst_check(lib_t& libHandle, const char* const filename, const boo | |||||
| #ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
| CFBundleRef bundleRef = nullptr; | CFBundleRef bundleRef = nullptr; | ||||
| CFBundleRefNum resFileId; | |||||
| CFBundleRefNum resFileId = 0; | |||||
| if (libHandle == nullptr) | if (libHandle == nullptr) | ||||
| { | { | ||||
| @@ -1226,7 +1226,7 @@ float fonsDrawText(FONScontext* stash, | |||||
| const char* str, const char* end) | const char* str, const char* end) | ||||
| { | { | ||||
| FONSstate* state = fons__getState(stash); | FONSstate* state = fons__getState(stash); | ||||
| unsigned int codepoint; | |||||
| unsigned int codepoint = 0; | |||||
| unsigned int utf8state = 0; | unsigned int utf8state = 0; | ||||
| FONSglyph* glyph = NULL; | FONSglyph* glyph = NULL; | ||||
| FONSquad q; | FONSquad q; | ||||
| @@ -1411,7 +1411,7 @@ float fonsTextBounds(FONScontext* stash, | |||||
| float* bounds) | float* bounds) | ||||
| { | { | ||||
| FONSstate* state = fons__getState(stash); | FONSstate* state = fons__getState(stash); | ||||
| unsigned int codepoint; | |||||
| unsigned int codepoint = 0; | |||||
| unsigned int utf8state = 0; | unsigned int utf8state = 0; | ||||
| FONSquad q; | FONSquad q; | ||||
| FONSglyph* glyph = NULL; | FONSglyph* glyph = NULL; | ||||
| @@ -516,7 +516,7 @@ const char *Reader::readPathInto(water::String *pathOut, const char *pIn, const | |||||
| int Reader::keyValue(const water::String &str) | int Reader::keyValue(const water::String &str) | ||||
| { | { | ||||
| auto chars = str.toRawUTF8(); | |||||
| const char* const chars = str.toRawUTF8(); | |||||
| char c = chars[0]; | char c = chars[0]; | ||||
| @@ -123,7 +123,7 @@ Region *Sound::regionAt(int index) { return regions_[index]; } | |||||
| water::String Sound::dump() | water::String Sound::dump() | ||||
| { | { | ||||
| water::String info; | water::String info; | ||||
| auto &errors = getErrors(); | |||||
| const water::StringArray& errors = getErrors(); | |||||
| if (errors.size() > 0) | if (errors.size() > 0) | ||||
| { | { | ||||
| info << errors.size() << " errors: \n"; | info << errors.size() << " errors: \n"; | ||||
| @@ -135,7 +135,7 @@ water::String Sound::dump() | |||||
| info << "no errors.\n\n"; | info << "no errors.\n\n"; | ||||
| } | } | ||||
| auto &warnings = getWarnings(); | |||||
| const water::StringArray& warnings = getWarnings(); | |||||
| if (warnings.size() > 0) | if (warnings.size() > 0) | ||||
| { | { | ||||
| info << warnings.size() << " warnings: \n"; | info << warnings.size() << " warnings: \n"; | ||||
| @@ -21,6 +21,7 @@ | |||||
| #ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
| # include "text/String.h" | # include "text/String.h" | ||||
| # import <Foundation/NSAutoreleasePool.h> | |||||
| # import <Foundation/NSString.h> | # import <Foundation/NSString.h> | ||||
| #endif | #endif | ||||
| @@ -90,6 +91,15 @@ NSString* waterStringToNS (const String& s) | |||||
| { | { | ||||
| return [NSString stringWithUTF8String: s.toUTF8()]; | return [NSString stringWithUTF8String: s.toUTF8()]; | ||||
| } | } | ||||
| class AutoNSAutoreleasePool { | |||||
| public: | |||||
| AutoNSAutoreleasePool() : pool([NSAutoreleasePool new]) {} | |||||
| ~AutoNSAutoreleasePool() { [pool drain]; } | |||||
| private: | |||||
| NSAutoreleasePool* const pool; | |||||
| }; | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -69,6 +69,7 @@ public: | |||||
| @param other the array to copy | @param other the array to copy | ||||
| */ | */ | ||||
| Array (const Array<ElementType>& other) noexcept | Array (const Array<ElementType>& other) noexcept | ||||
| : numUsed (0) | |||||
| { | { | ||||
| CARLA_SAFE_ASSERT_RETURN(data.setAllocatedSize (other.numUsed),); | CARLA_SAFE_ASSERT_RETURN(data.setAllocatedSize (other.numUsed),); | ||||
| numUsed = other.numUsed; | numUsed = other.numUsed; | ||||
| @@ -1407,21 +1407,20 @@ File File::getLinkedTarget() const | |||||
| bool File::copyInternal (const File& dest) const | bool File::copyInternal (const File& dest) const | ||||
| { | { | ||||
| //@autoreleasepool | |||||
| { | |||||
| NSFileManager* fm = [NSFileManager defaultManager]; | |||||
| return [fm fileExistsAtPath: waterStringToNS (fullPath)] | |||||
| #if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 | |||||
| && [fm copyItemAtPath: waterStringToNS (fullPath) | |||||
| toPath: waterStringToNS (dest.getFullPathName()) | |||||
| error: nil]; | |||||
| #else | |||||
| && [fm copyPath: waterStringToNS (fullPath) | |||||
| toPath: waterStringToNS (dest.getFullPathName()) | |||||
| handler: nil]; | |||||
| #endif | |||||
| } | |||||
| const AutoNSAutoreleasePool arpool; | |||||
| NSFileManager* fm = [NSFileManager defaultManager]; | |||||
| return [fm fileExistsAtPath: waterStringToNS (fullPath)] | |||||
| #if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 | |||||
| && [fm copyItemAtPath: waterStringToNS (fullPath) | |||||
| toPath: waterStringToNS (dest.getFullPathName()) | |||||
| error: nil]; | |||||
| #else | |||||
| && [fm copyPath: waterStringToNS (fullPath) | |||||
| toPath: waterStringToNS (dest.getFullPathName()) | |||||
| handler: nil]; | |||||
| #endif | |||||
| } | } | ||||
| File File::getSpecialLocation (const SpecialLocationType type) | File File::getSpecialLocation (const SpecialLocationType type) | ||||
| @@ -54,7 +54,6 @@ extern void carla_register_native_plugin_notes(void); | |||||
| void carla_register_all_native_plugins(void) | void carla_register_all_native_plugins(void) | ||||
| { | { | ||||
| puts("carla register all plugins\n"); | |||||
| // Simple plugins | // Simple plugins | ||||
| carla_register_native_plugin_bypass(); | carla_register_native_plugin_bypass(); | ||||
| carla_register_native_plugin_lfo(); | carla_register_native_plugin_lfo(); | ||||
| @@ -41,8 +41,8 @@ struct AudioFilePool { | |||||
| size(0) {} | size(0) {} | ||||
| #else | #else | ||||
| AudioFilePool() | AudioFilePool() | ||||
| : startFrame(0), | |||||
| sampleRate(0), | |||||
| : sampleRate(0), | |||||
| startFrame(0), | |||||
| size(0) | size(0) | ||||
| { | { | ||||
| buffer[0] = buffer[1] = nullptr; | buffer[0] = buffer[1] = nullptr; | ||||
| @@ -91,8 +91,12 @@ endif | |||||
| # ---------------------------------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------------------------------- | ||||
| TARGETS = \ | TARGETS = \ | ||||
| $(BINDIR)/carla.lv2/carla$(LIB_EXT) \ | |||||
| $(BINDIR)/carla.lv2/carla$(LIB_EXT) | |||||
| ifneq ($(CROSS_COMPILING),true) | |||||
| TARGETS += \ | |||||
| $(BINDIR)/carla.lv2/manifest.ttl | $(BINDIR)/carla.lv2/manifest.ttl | ||||
| endif | |||||
| ifeq ($(LINUX),true) | ifeq ($(LINUX),true) | ||||
| ifeq ($(HAVE_X11),true) | ifeq ($(HAVE_X11),true) | ||||
| @@ -34,7 +34,7 @@ public: | |||||
| const double sampleRate, | const double sampleRate, | ||||
| const char* const bundlePath, | const char* const bundlePath, | ||||
| const LV2_Feature* const* const features) | const LV2_Feature* const* const features) | ||||
| : Lv2PluginBaseClass(sampleRate, features), | |||||
| : Lv2PluginBaseClass<NativeTimeInfo>(sampleRate, features), | |||||
| fHandle(nullptr), | fHandle(nullptr), | ||||
| fHost(), | fHost(), | ||||
| fDescriptor(desc), | fDescriptor(desc), | ||||
| @@ -325,7 +325,7 @@ const char* EngineOption2Str(const EngineOption option) noexcept | |||||
| return "ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR"; | return "ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR"; | ||||
| case ENGINE_OPTION_FRONTEND_WIN_ID: | case ENGINE_OPTION_FRONTEND_WIN_ID: | ||||
| return "ENGINE_OPTION_FRONTEND_WIN_ID"; | return "ENGINE_OPTION_FRONTEND_WIN_ID"; | ||||
| #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||||
| #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | |||||
| case ENGINE_OPTION_WINE_EXECUTABLE: | case ENGINE_OPTION_WINE_EXECUTABLE: | ||||
| return "ENGINE_OPTION_WINE_EXECUTABLE"; | return "ENGINE_OPTION_WINE_EXECUTABLE"; | ||||
| case ENGINE_OPTION_WINE_AUTO_PREFIX: | case ENGINE_OPTION_WINE_AUTO_PREFIX: | ||||
| @@ -166,7 +166,9 @@ struct ConnectionToId { | |||||
| void clear() noexcept | void clear() noexcept | ||||
| { | { | ||||
| id = 0; | |||||
| // needed for apple GCC4.2 | |||||
| this->id = 0; | |||||
| groupA = 0; | groupA = 0; | ||||
| portA = 0; | portA = 0; | ||||
| groupB = 0; | groupB = 0; | ||||
| @@ -175,7 +177,9 @@ struct ConnectionToId { | |||||
| void setData(const uint i, const uint gA, const uint pA, const uint gB, const uint pB) noexcept | void setData(const uint i, const uint gA, const uint pA, const uint gB, const uint pB) noexcept | ||||
| { | { | ||||
| id = i; | |||||
| // needed for apple GCC4.2 | |||||
| this->id = i; | |||||
| groupA = gA; | groupA = gA; | ||||
| portA = pA; | portA = pA; | ||||
| groupB = gB; | groupB = gB; | ||||
| @@ -549,6 +549,11 @@ public: | |||||
| [fWindow setContentMaxSize:size]; | [fWindow setContentMaxSize:size]; | ||||
| [[fWindow standardWindowButton:NSWindowZoomButton] setHidden:YES]; | [[fWindow standardWindowButton:NSWindowZoomButton] setHidden:YES]; | ||||
| } | } | ||||
| if (forceUpdate) | |||||
| { | |||||
| // TODO | |||||
| } | |||||
| } | } | ||||
| void setTitle(const char* const title) override | void setTitle(const char* const title) override | ||||
| @@ -1070,14 +1075,25 @@ bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* cons | |||||
| int windowToMap, windowWithPID = 0, windowWithNameAndPID = 0; | int windowToMap, windowWithPID = 0, windowWithNameAndPID = 0; | ||||
| for (NSDictionary* const entry in windowList) | |||||
| const NSDictionary* entry; | |||||
| for (entry in windowList) | |||||
| { | { | ||||
| // FIXME: is this needed? is old version safe? | |||||
| #if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 | |||||
| if ([entry[(id)kCGWindowSharingState] intValue] == kCGWindowSharingNone) | if ([entry[(id)kCGWindowSharingState] intValue] == kCGWindowSharingNone) | ||||
| continue; | continue; | ||||
| NSString* const windowName = entry[(id)kCGWindowName]; | NSString* const windowName = entry[(id)kCGWindowName]; | ||||
| int const windowNumber = [entry[(id)kCGWindowNumber] intValue]; | int const windowNumber = [entry[(id)kCGWindowNumber] intValue]; | ||||
| uintptr_t const windowPID = [entry[(id)kCGWindowOwnerPID] intValue]; | uintptr_t const windowPID = [entry[(id)kCGWindowOwnerPID] intValue]; | ||||
| #else | |||||
| if ([[entry objectForKey:(id)kCGWindowSharingState] intValue] == kCGWindowSharingNone) | |||||
| continue; | |||||
| NSString* const windowName = [entry objectForKey:(id)kCGWindowName]; | |||||
| int const windowNumber = [[entry objectForKey:(id)kCGWindowNumber] intValue]; | |||||
| uintptr_t const windowPID = [[entry objectForKey:(id)kCGWindowOwnerPID] intValue]; | |||||
| #endif | |||||
| if (windowPID != pid) | if (windowPID != pid) | ||||
| continue; | continue; | ||||