From 46179f475d06bb65fc681659dbd58e5655f56df9 Mon Sep 17 00:00:00 2001 From: tresf Date: Sun, 19 Jun 2016 18:44:42 -0400 Subject: [PATCH] Fix compilation on older Apple versions Adds libc++ to CXX flags Fixes macdeployqt on Qt5 Also fixes zynaddsubfx linking on Mac --- cmake/apple/install_apple.sh.in | 38 +++++++++++++++++------------ plugins/GigPlayer/CMakeLists.txt | 4 +++ plugins/MidiExport/CMakeLists.txt | 4 +++ plugins/VstEffect/CMakeLists.txt | 4 +++ plugins/lb302/CMakeLists.txt | 4 +++ plugins/opl2/CMakeLists.txt | 4 +++ plugins/vestige/CMakeLists.txt | 4 +++ plugins/zynaddsubfx/CMakeLists.txt | 4 +++ plugins/zynaddsubfx/ZynAddSubFx.cpp | 3 --- src/core/RemotePlugin.cpp | 8 ++++++ 10 files changed, 59 insertions(+), 18 deletions(-) diff --git a/cmake/apple/install_apple.sh.in b/cmake/apple/install_apple.sh.in index 02e98fdd1..7fefa069d 100644 --- a/cmake/apple/install_apple.sh.in +++ b/cmake/apple/install_apple.sh.in @@ -23,6 +23,19 @@ LIBREADLINE="libreadline.6.2.dylib" MSG_COLOR='\x1B[1;36m' COLOR_RESET='\x1B[0m' echo -e "$MSG_COLOR\n\nCreating App Bundle \"$APP\"...$COLOR_RESET" + +# Locate macdeployqt, assume homebrew & Qt5 +which macdeployqt > /dev/null 2>&1 +if [ $? -ne 0 ]; then + brew --prefix qt55 > /dev/null 2>&1 + if [ $? -eq 0 ]; then + # Prefer Qt 5.5 (QTBUG-53533) + export PATH=$PATH:$(brew --prefix qt55)/bin + else + # Fallback Qt 5.6+ + export PATH=$PATH:$(brew --prefix qt5)/bin + fi +fi # MacPorts only - check for u+w permissions on libreadline if [ -f "@APPLE_PREFIX@/lib/$LIBREADLINE" ]; then @@ -49,7 +62,7 @@ cp -R * "$APP/Contents" # Manually copy STK rawwaves mkdir -p "$APP/Contents/share/stk/rawwaves" -cp $STK_RAWWAVE/*.raw "$APP/Contents/share/stk/rawwaves" +cp $STK_RAWWAVE/*.raw "$APP/Contents/share/stk/rawwaves" > /dev/null 2>&1 # Make all libraries writable for macdeployqt cd "$APP" @@ -62,20 +75,15 @@ rm -rf "$APP/Contents/bin" # Move libraries to proper locations mkdir -p "$APP/Contents/Frameworks" -mv "$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" \ - "$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" - mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" \ "$APP/Contents/MacOS/RemoteZynAddSubFx" - -# Fix more Zyn Linking issues + +rm "$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" > /dev/null 2>&1 + +# Fix zyn linking install_name_tool -change @rpath/libZynAddSubFxCore.dylib \ - @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - "$APP/Contents/lib/lmms/libzynaddsubfx.so" - -install_name_tool -change @CMAKE_BINARY_DIR@/plugins/zynaddsubfx/libZynAddSubFxCore.dylib \ - @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - "$APP/Contents/MacOS/RemoteZynAddSubFx" + @loader_path/../lib/lmms/libZynAddSubFxCore.dylib \ + "$APP/Contents/MacOS/RemoteZynAddSubFx" # Build a list of shared objects in target/lib/lmms for file in "$APP/Contents/lib/lmms/"*.so; do @@ -91,13 +99,13 @@ done # Additional binaries that require linking _executables="${_executables} -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" -_executables="${_executables} -executable=$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" +_executables="${_executables} -executable=$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" # Build our App Package using "macdeployqt" macdeployqt "$APP" $_executables - + # OS X Specific Artwork mkdir -p "$APP/Contents/Resources" cp "@CMAKE_SOURCE_DIR@/cmake/apple/"*.icns "$APP/Contents/Resources/" - + echo -e "\nFinished.\n\n" diff --git a/plugins/GigPlayer/CMakeLists.txt b/plugins/GigPlayer/CMakeLists.txt index 4e49988eb..996444fff 100644 --- a/plugins/GigPlayer/CMakeLists.txt +++ b/plugins/GigPlayer/CMakeLists.txt @@ -14,6 +14,10 @@ if(LMMS_HAVE_GIG) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) + + IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + ENDIF() LINK_DIRECTORIES(${GIG_LIBRARY_DIRS} ${SAMPLERATE_LIBRARY_DIRS}) LINK_LIBRARIES(${GIG_LIBRARIES} ${SAMPLERATE_LIBRARIES}) diff --git a/plugins/MidiExport/CMakeLists.txt b/plugins/MidiExport/CMakeLists.txt index d5b080169..96c8254bf 100644 --- a/plugins/MidiExport/CMakeLists.txt +++ b/plugins/MidiExport/CMakeLists.txt @@ -3,5 +3,9 @@ INCLUDE(BuildPlugin) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + BUILD_PLUGIN(midiexport MidiExport.cpp MidiExport.h MidiFile.hpp MOCFILES MidiExport.h) diff --git a/plugins/VstEffect/CMakeLists.txt b/plugins/VstEffect/CMakeLists.txt index dbe9377d8..223963fc3 100644 --- a/plugins/VstEffect/CMakeLists.txt +++ b/plugins/VstEffect/CMakeLists.txt @@ -13,6 +13,10 @@ ENDIF() # Enable C++11 ADD_DEFINITIONS(-std=c++0x) +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + BUILD_PLUGIN(vsteffect VstEffect.cpp VstEffectControls.cpp VstEffectControlDialog.cpp VstSubPluginFeatures.cpp VstEffect.h VstEffectControls.h VstEffectControlDialog.h VstSubPluginFeatures.h MOCFILES VstEffectControlDialog.h VstEffectControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") SET_TARGET_PROPERTIES(vsteffect PROPERTIES COMPILE_FLAGS "-Wno-attributes") TARGET_LINK_LIBRARIES(vsteffect -lvstbase) diff --git a/plugins/lb302/CMakeLists.txt b/plugins/lb302/CMakeLists.txt index ba2edbd4b..384f4ea30 100644 --- a/plugins/lb302/CMakeLists.txt +++ b/plugins/lb302/CMakeLists.txt @@ -3,4 +3,8 @@ INCLUDE(BuildPlugin) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + BUILD_PLUGIN(lb302 lb302.cpp lb302.h MOCFILES lb302.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/opl2/CMakeLists.txt b/plugins/opl2/CMakeLists.txt index 785c3676e..9e9bd91ca 100644 --- a/plugins/opl2/CMakeLists.txt +++ b/plugins/opl2/CMakeLists.txt @@ -3,4 +3,8 @@ INCLUDE(BuildPlugin) # Enable C++11 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + BUILD_PLUGIN(OPL2 opl2instrument.cpp opl2instrument.h opl.h fmopl.c fmopl.h temuopl.cpp temuopl.h MOCFILES opl2instrument.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/vestige/CMakeLists.txt b/plugins/vestige/CMakeLists.txt index d2e84e934..58008fe43 100644 --- a/plugins/vestige/CMakeLists.txt +++ b/plugins/vestige/CMakeLists.txt @@ -1,6 +1,10 @@ IF(LMMS_SUPPORT_VST) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) + + IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + ENDIF() INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../vst_base") diff --git a/plugins/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/CMakeLists.txt index 0a29ce342..2b126998c 100644 --- a/plugins/zynaddsubfx/CMakeLists.txt +++ b/plugins/zynaddsubfx/CMakeLists.txt @@ -23,6 +23,10 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-write-strings -Wno-deprecated-d # Enable C++11, but only for ZynAddSubFx.cpp set_property(SOURCE ZynAddSubFx.cpp APPEND_STRING PROPERTY COMPILE_FLAGS " -std=c++0x ") + +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() # link system-libraries when on win32 IF(LMMS_BUILD_WIN32) diff --git a/plugins/zynaddsubfx/ZynAddSubFx.cpp b/plugins/zynaddsubfx/ZynAddSubFx.cpp index 860aab129..fdc1e4d26 100644 --- a/plugins/zynaddsubfx/ZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/ZynAddSubFx.cpp @@ -533,9 +533,6 @@ ZynAddSubFxView::ZynAddSubFxView( Instrument * _instrument, QWidget * _parent ) m_toggleUIButton = new QPushButton( tr( "Show GUI" ), this ); m_toggleUIButton->setCheckable( true ); -#ifdef LMMS_BUILD_APPLE - m_toggleUIButton->setEnabled( false ); -#endif m_toggleUIButton->setChecked( false ); m_toggleUIButton->setIcon( embed::getIconPixmap( "zoom" ) ); m_toggleUIButton->setFont( pointSize<8>( m_toggleUIButton->font() ) ); diff --git a/src/core/RemotePlugin.cpp b/src/core/RemotePlugin.cpp index 7e7218fd7..8d7c89c2e 100644 --- a/src/core/RemotePlugin.cpp +++ b/src/core/RemotePlugin.cpp @@ -181,6 +181,14 @@ bool RemotePlugin::init( const QString &pluginExecutable, m_failed = false; } QString exec = QFileInfo(QDir("plugins:"), pluginExecutable).absoluteFilePath(); +#ifdef LMMS_BUILD_APPLE + // search current directory first + QString curDir = QCoreApplication::applicationDirPath() + "/" + pluginExecutable; + if( QFile( curDir ).exists() ) + { + exec = curDir; + } +#endif #ifdef LMMS_BUILD_WIN32 if( ! exec.endsWith( ".exe", Qt::CaseInsensitive ) ) {