From d711b8b55eeffe39588fb3dab63f571c0ac460a8 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Fri, 1 Dec 2017 13:19:44 -0500 Subject: [PATCH] Add Carla Support to AppImage (#4026) Build AppImage with Carla support * Disables HiDPI support in the AppImages * Ignores deprecated jack usage * Fix Carla compilation warnings * Detects carla prefix in AppRun --- .travis/linux..install.sh | 6 ++++++ cmake/linux/package_linux.sh.in | 13 ++++++++++++- include/AudioWeakJack.def | 3 +++ plugins/carlabase/carla.cpp | 31 ++++++++++++++++--------------- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/.travis/linux..install.sh b/.travis/linux..install.sh index b7087ee51..41639980e 100644 --- a/.travis/linux..install.sh +++ b/.travis/linux..install.sh @@ -15,3 +15,9 @@ else fi sudo apt-get install -y $PACKAGES + +# kxstudio repo offers Carla; avoid package conflicts (wine, etc) by running last +sudo add-apt-repository -y ppa:kxstudio-debian/libs +sudo add-apt-repository -y ppa:kxstudio-debian/apps +sudo apt-get update +sudo apt-get install -y carla-git diff --git a/cmake/linux/package_linux.sh.in b/cmake/linux/package_linux.sh.in index 16a6297eb..8553be65f 100644 --- a/cmake/linux/package_linux.sh.in +++ b/cmake/linux/package_linux.sh.in @@ -103,6 +103,14 @@ mv "${APPDIR}usr/bin/lmms" "${APPDIR}usr/bin/lmms.real" cat >"${APPDIR}usr/bin/lmms" < /dev/null 2>&1; then + CARLAPATH="$(which carla)" + CARLAPREFIX="\${CARLAPATH%/bin*}" + echo "Carla appears to be installed on this system at \$CARLAPREFIX/lib[64]/carla so we'll use it." + export LD_LIBRARY_PATH=\$CARLAPREFIX/lib/carla:\$CARLAPREFIX/lib64/carla:\$LD_LIBRARY_PATH +else + echo "Carla does not appear to be installed. That's OK, please ignore any related library errors." +fi export LD_LIBRARY_PATH=\$DIR/usr/lib/:\$DIR/usr/lib/lmms:\$LD_LIBRARY_PATH # Prevent segfault on VirualBox if lsmod |grep vboxguest > /dev/null 2>&1; then @@ -115,7 +123,7 @@ else echo "Jack does not appear to be installed. That's OK, we'll use a dummy version instead." export LD_LIBRARY_PATH=\$DIR/usr/lib/lmms/optional:\$LD_LIBRARY_PATH fi -QT_X11_NO_NATIVE_MENUBAR=1 QT_AUTO_SCREEN_SCALE_FACTOR=1 \$DIR/usr/bin/lmms.real "\$@" +QT_X11_NO_NATIVE_MENUBAR=1 \$DIR/usr/bin/lmms.real "\$@" EOL chmod +x "${APPDIR}usr/bin/lmms" @@ -170,6 +178,9 @@ ln -sr "$VSTBIN" "$VSTLIB" # Remove wine library conflict rm -f "${APPDIR}/usr/lib/libwine.so.1" +# Use system-provided carla +rm -f "${APPDIR}usr/lib/"libcarla*.so + # Remove problematic jack library, replace with weakjack if [ -e "${APPDIR}/usr/lib/libjack.so.0" ]; then rm -f "${APPDIR}/usr/lib/libjack.so.0" diff --git a/include/AudioWeakJack.def b/include/AudioWeakJack.def index 1684a56b0..faa8fd10f 100644 --- a/include/AudioWeakJack.def +++ b/include/AudioWeakJack.def @@ -71,7 +71,10 @@ JPFUN(1, const char *, port_type, (const jack_port_t *p), (p), 0) JPFUN(1, const char **, port_get_connections, (const jack_port_t *p), (p), 0) JPFUN(1, const char **, port_get_all_connections, (const jack_client_t *c, const jack_port_t *p), (c,p), 0) JPFUN(1, int, port_set_name, (jack_port_t *p, const char *n), (p,n), -1) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" JXFUN(0, int, port_rename, (jack_client_t *c, jack_port_t *p, const char *n), (c,p,n), return jack_port_set_name (p,n);) +#pragma GCC diagnostic pop JPFUN(1, int, port_get_aliases, (const jack_port_t *port, char* const aliases[2]), (port,aliases), 0) JPFUN(1, int, port_disconnect, (jack_client_t *c, jack_port_t *p), (c,p), 0) JPFUN(1, int, connect, (jack_client_t *c, const char *s, const char *d), (c,s,d), -1) diff --git a/plugins/carlabase/carla.cpp b/plugins/carlabase/carla.cpp index 0d550aae5..9221ad4f2 100644 --- a/plugins/carlabase/carla.cpp +++ b/plugins/carlabase/carla.cpp @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -150,15 +151,22 @@ CarlaInstrument::CarlaInstrument(InstrumentTrack* const instrumentTrack, const D fHost.uiName = NULL; fHost.uiParentId = 0; - // figure out prefix from dll filename + // carla/resources contains PyQt scripts required for launch QString dllName(carla_get_library_filename()); - + QString resourcesPath; #if defined(CARLA_OS_LINUX) - fHost.resourceDir = strdup(QString(dllName.split("/lib/carla")[0] + "/share/carla/resources/").toUtf8().constData()); -#else - fHost.resourceDir = NULL; + // parse prefix from dll filename + QDir path = QFileInfo(dllName).dir(); + path.cdUp(); + path.cdUp(); + resourcesPath = path.absolutePath() + "/share/carla/resources"; +#elif defined(CARLA_OS_MAC) + // assume standard install location + resourcesPath = "/Applications/Carla.app/Contents/MacOS/resources"; +#elif defined(CARLA_OS_WIN32) || defined(CARLA_OS_WIN64) + // not yet supported #endif - + fHost.resourceDir = strdup(resourcesPath.toUtf8().constData()); fHost.get_buffer_size = host_get_buffer_size; fHost.get_sample_rate = host_get_sample_rate; fHost.is_offline = host_is_offline; @@ -252,21 +260,14 @@ intptr_t CarlaInstrument::handleDispatcher(const NativeHostDispatcherOpcode opco switch (opcode) { - case NATIVE_HOST_OPCODE_NULL: - break; - case NATIVE_HOST_OPCODE_UPDATE_PARAMETER: - case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM: - case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS: - case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS: - case NATIVE_HOST_OPCODE_RELOAD_ALL: - // nothing - break; case NATIVE_HOST_OPCODE_UI_UNAVAILABLE: handleUiClosed(); break; case NATIVE_HOST_OPCODE_HOST_IDLE: qApp->processEvents(); break; + default: + break; } return ret;