diff --git a/CMakeLists.txt b/CMakeLists.txt index eeb15d33..43dd2ec2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,6 +347,15 @@ if (HAVE_STREAM_DEEZER AND NOT HAVE_DZMEDIA AND NOT HAVE_DEEZER) message(STATUS "Deezer is enabled, but not DZMedia or Deezer engine, only preview streams will be available.") endif() +if(APPLE) + option(USE_BUNDLE "Bundle macOS dependencies" OFF) +elseif(WIN32) + option(USE_BUNDLE "Bundle Windows dependencies" ON) +endif() +if (APPLE AND USE_BUNDLE AND NOT USE_BUNDLE_DIR) + set(USE_BUNDLE_DIR "../PlugIns") +endif() + #if(IMOBILEDEVICE_FOUND AND PLIST_FOUND) #add_subdirectory(ext/gstafc) #endif(IMOBILEDEVICE_FOUND AND PLIST_FOUND) diff --git a/ext/libstrawberry-common/core/workerpool.h b/ext/libstrawberry-common/core/workerpool.h index 5d8154c3..e4285548 100644 --- a/ext/libstrawberry-common/core/workerpool.h +++ b/ext/libstrawberry-common/core/workerpool.h @@ -228,8 +228,8 @@ void WorkerPool::DoStart() { QStringList search_path; search_path << qApp->applicationDirPath(); -#ifdef Q_OS_MACOS - search_path << qApp->applicationDirPath() + "/../PlugIns"; +#if defined(Q_OS_MACOS) && defined(USE_BUNDLE) + search_path << qApp->applicationDirPath() + "/" + USE_BUNDLE_DIR; #endif for (const QString &path_prefix : search_path) { diff --git a/src/config.h.in b/src/config.h.in index 1dbc532e..5e12cf9b 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -56,5 +56,9 @@ #cmakedefine HAVE_KEYSYMDEF_H #cmakedefine HAVE_XF86KEYSYM_H +#cmakedefine USE_BUNDLE + +#define USE_BUNDLE_DIR "${USE_BUNDLE_DIR}" + #endif // CONFIG_H_IN diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index 605c95fb..6fd72b32 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -423,10 +423,15 @@ void GstEngine::SetEnvironment() { QString plugin_path; QString registry_filename; - // On windows we bundle the gstreamer plugins with strawberry -#if defined(Q_OS_WIN32) +// On Windows and macOS we bundle the gstreamer plugins with strawberry +#ifdef USE_BUNDLE +#if defined(Q_OS_DARWIN) + scanner_path = QCoreApplication::applicationDirPath() + "/" + USE_BUNDLE_DIR + "/gst-plugin-scanner"; + plugin_path = QCoreApplication::applicationDirPath() + "/" + USE_BUNDLE_DIR + "/gstreamer"; +#elif defined(Q_OS_WIN32) plugin_path = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + "/gstreamer-plugins"); #endif +#endif #if defined(Q_OS_WIN32) || defined(Q_OS_MACOS) registry_filename = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + QString("/gst-registry-%1-bin").arg(QCoreApplication::applicationVersion()); @@ -444,6 +449,10 @@ void GstEngine::SetEnvironment() { Utilities::SetEnv("GST_REGISTRY", registry_filename); } +#if defined(Q_OS_DARWIN) && defined(USE_BUNDLE) + SetEnv("GIO_EXTRA_MODULES", QCoreApplication::applicationDirPath() + "/" + USE_BUNDLE_DIR + "/gio-modules"); +#endif + Utilities::SetEnv("PULSE_PROP_media.role", "music"); } diff --git a/src/main.cpp b/src/main.cpp index 637dc85d..92906183 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -162,8 +162,9 @@ int main(int argc, char* argv[]) { QtSingleApplication a(argc, argv); -#ifdef Q_OS_MACOS - //QCoreApplication::setLibraryPaths(QStringList() << QCoreApplication::applicationDirPath() + "/../PlugIns"); +#if defined(Q_OS_DARWIN) && defined(USE_BUNDLE) + qLog(Debug) << "Looking for resources in" + QCoreApplication::applicationDirPath() + "/" + USE_BUNDLE_DIR; + QCoreApplication::setLibraryPaths(QStringList() << QCoreApplication::applicationDirPath() + "/" + USE_BUNDLE_DIR); #endif a.setQuitOnLastWindowClosed(false);