diff --git a/dist/macdeploy.py b/dist/macdeploy.py index 5d83c2e4b..b83a8c381 100755 --- a/dist/macdeploy.py +++ b/dist/macdeploy.py @@ -15,6 +15,7 @@ # You should have received a copy of the GNU General Public License # along with Clementine. If not, see . +from distutils import spawn import logging import os import re @@ -31,7 +32,7 @@ FRAMEWORK_SEARCH_PATH=[ os.path.join(os.environ['HOME'], 'Library/Frameworks') ] -LIBRARY_SEARCH_PATH=['/target/lib', '/usr/local/lib', '/sw/lib'] +LIBRARY_SEARCH_PATH=['/target', '/target/lib', '/usr/local/lib', '/sw/lib'] GSTREAMER_PLUGINS=[ @@ -107,15 +108,18 @@ QT_PLUGINS = [ 'imageformats/libqmng.dylib', 'imageformats/libqsvg.dylib', ] -QT_PLUGINS_SEARCH_PATH=[ +QT_PLUGINS_SEARCH_PATH = [ '/target/plugins', '/usr/local/Trolltech/Qt-4.7.0/plugins', '/Developer/Applications/Qt/plugins', ] -GIO_MODULES_SEARCH_PATH=[ - '/target/lib/gio/modules', -] +GIO_MODULES_SEARCH_PATH = ['/target/lib/gio/modules',] + +INSTALL_NAME_TOOL_APPLE = 'install_name_tool' +INSTALL_NAME_TOOL_CROSS = 'x86_64-apple-darwin-%s' % INSTALL_NAME_TOOL_APPLE +INSTALL_NAME_TOOL = INSTALL_NAME_TOOL_CROSS if spawn.find_executable( + INSTALL_NAME_TOOL_CROSS) else INSTALL_NAME_TOOL_APPLE class Error(Exception): @@ -277,7 +281,7 @@ def FixBinary(path): def CopyLibrary(path): new_path = os.path.join(frameworks_dir, os.path.basename(path)) - args = ['ditto', '--arch=x86_64', path, new_path] + args = ['cp', path, new_path] commands.append(args) LOGGER.info("Copying library '%s'", path) return new_path @@ -286,7 +290,7 @@ def CopyPlugin(path, subdir): new_path = os.path.join(plugins_dir, subdir, os.path.basename(path)) args = ['mkdir', '-p', os.path.dirname(new_path)] commands.append(args) - args = ['ditto', '--arch=x86_64', path, new_path] + args = ['cp', path, new_path] commands.append(args) LOGGER.info("Copying plugin '%s'", path) return new_path @@ -310,7 +314,7 @@ def CopyFramework(src_binary): dest_binary = os.path.join(dest_dir, name) commands.append(['mkdir', '-p', dest_dir]) - commands.append(['ditto', '--arch=x86_64', src_binary, dest_binary]) + commands.append(['cp', src_binary, dest_binary]) # Copy special files from various places: # QtCore has Resources/qt_menu.nib (copy to app's Resources) @@ -334,34 +338,39 @@ def CopyFramework(src_binary): # Create symlinks in the Framework to make it look like # https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html - commands.append(['ln', '-sfh', - 'Versions/Current/%s' % name, - os.path.join(dest_base, name)]) - commands.append(['ln', '-sfh', - 'Versions/Current/Resources', - os.path.join(dest_base, 'Resources')]) - commands.append(['ln', '-sfh', - version, - os.path.join(dest_base, 'Versions/Current')]) + commands.append([ + 'ln', '-sf', 'Versions/Current/%s' % name, os.path.join(dest_base, name) + ]) + commands.append([ + 'ln', '-sf', 'Versions/Current/Resources', + os.path.join(dest_base, 'Resources') + ]) + commands.append( + ['ln', '-sf', version, os.path.join(dest_base, 'Versions/Current')]) return dest_binary + def FixId(path, library_name): id = '@executable_path/../Frameworks/%s' % library_name - args = ['install_name_tool', '-id', id, path] + args = [INSTALL_NAME_TOOL, '-id', id, path] commands.append(args) + def FixLibraryId(path): library_name = os.path.basename(path) FixId(path, library_name) + def FixFrameworkId(path, id): FixId(path, id) + def FixInstallPath(library_path, library, new_path): - args = ['install_name_tool', '-change', library_path, new_path, library] + args = [INSTALL_NAME_TOOL, '-change', library_path, new_path, library] commands.append(args) + def FindSystemLibrary(library_name): for path in ['/lib', '/usr/lib']: full_path = os.path.join(path, library_name) diff --git a/ext/clementine-spotifyblob/CMakeLists.txt b/ext/clementine-spotifyblob/CMakeLists.txt index 1771c34ae..ca332dca1 100644 --- a/ext/clementine-spotifyblob/CMakeLists.txt +++ b/ext/clementine-spotifyblob/CMakeLists.txt @@ -53,7 +53,7 @@ target_link_libraries(clementine-spotifyblob if(APPLE) target_link_libraries(clementine-spotifyblob - /System/Library/Frameworks/Foundation.framework + "-framework Foundation" ) endif(APPLE) diff --git a/ext/clementine-tagreader/CMakeLists.txt b/ext/clementine-tagreader/CMakeLists.txt index 816e7edbc..d846efecd 100644 --- a/ext/clementine-tagreader/CMakeLists.txt +++ b/ext/clementine-tagreader/CMakeLists.txt @@ -31,6 +31,7 @@ target_link_libraries(clementine-tagreader libclementine-tagreader ${QT_QTCORE_LIBRARY} ${QT_QTNETWORK_LIBRARY} + z ) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") @@ -41,7 +42,7 @@ endif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") if(APPLE) target_link_libraries(clementine-tagreader - /System/Library/Frameworks/Foundation.framework + "-framework Foundation" ) endif(APPLE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 713a19a7f..27ff5d1b6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -853,7 +853,6 @@ optional_source(APPLE core/macfslistener.mm core/macglobalshortcutbackend.mm core/mac_startup.mm - devices/macdevicelister.mm engines/osxdevicefinder.cpp networkremote/bonjour.mm ui/globalshortcutgrabber.mm @@ -863,10 +862,18 @@ optional_source(APPLE HEADERS core/macfslistener.h core/macglobalshortcutbackend.h - devices/macdevicelister.h ui/macsystemtrayicon.h ) +if(APPLE) + optional_source(HAVE_LIBMTP + SOURCES + devices/macdevicelister.mm + HEADERS + devices/macdevicelister.h + ) +endif() + # Platform specific - Windows optional_source(WIN32 SOURCES @@ -1313,13 +1320,13 @@ endif() if (APPLE) target_link_libraries(clementine_lib - /System/Library/Frameworks/AppKit.framework - /System/Library/Frameworks/Carbon.framework - /System/Library/Frameworks/CoreAudio.framework - /System/Library/Frameworks/DiskArbitration.framework - /System/Library/Frameworks/Foundation.framework - /System/Library/Frameworks/IOKit.framework - /System/Library/Frameworks/ScriptingBridge.framework + "-framework AppKit" + "-framework Carbon" + "-framework CoreAudio" + "-framework DiskArbitration" + "-framework Foundation" + "-framework IOKit" + "-framework ScriptingBridge" ) target_link_libraries(clementine_lib ${SPMEDIAKEYTAP_LIBRARIES}) if (HAVE_SPARKLE) diff --git a/src/devices/devicemanager.cpp b/src/devices/devicemanager.cpp index 32ba33657..4ad840a09 100644 --- a/src/devices/devicemanager.cpp +++ b/src/devices/devicemanager.cpp @@ -29,10 +29,6 @@ #include #include "config.h" -#include "devicedatabasebackend.h" -#include "devicekitlister.h" -#include "devicestatefiltermodel.h" -#include "filesystemdevice.h" #include "core/application.h" #include "core/concurrentrun.h" #include "core/database.h" @@ -40,14 +36,18 @@ #include "core/musicstorage.h" #include "core/taskmanager.h" #include "core/utilities.h" +#include "devicedatabasebackend.h" +#include "devicekitlister.h" +#include "devicestatefiltermodel.h" +#include "filesystemdevice.h" #include "ui/iconloader.h" #ifdef HAVE_AUDIOCD -#include "cddalister.h" #include "cddadevice.h" +#include "cddalister.h" #endif -#ifdef Q_OS_DARWIN +#if defined(Q_OS_DARWIN) and defined(HAVE_LIBMTP) #include "macdevicelister.h" #endif #ifdef HAVE_LIBGPOD @@ -169,7 +169,8 @@ DeviceManager::DeviceInfo::BestBackend() const { DeviceManager::DeviceManager(Application* app, QObject* parent) : QAbstractListModel(parent), app_(app), - not_connected_overlay_(IconLoader::Load("edit-delete", IconLoader::Base)) { + not_connected_overlay_( + IconLoader::Load("edit-delete", IconLoader::Base)) { thread_pool_.setMaxThreadCount(1); connect(app_->task_manager(), SIGNAL(TasksChanged()), SLOT(TasksChanged())); @@ -200,7 +201,7 @@ DeviceManager::DeviceManager(Application* app, QObject* parent) #ifdef HAVE_GIO AddLister(new GioLister); #endif -#ifdef Q_OS_DARWIN +#if defined(Q_OS_DARWIN) and defined(HAVE_LIBMTP) AddLister(new MacDeviceLister); #endif @@ -322,8 +323,7 @@ QVariant DeviceManager::data(const QModelIndex& index, int role) const { if (!info.device_) { if (info.database_id_ == -1 && !info.BestBackend()->lister_->DeviceNeedsMount( - info.BestBackend()->unique_id_)) { - + info.BestBackend()->unique_id_)) { if (info.BestBackend()->lister_->AskForScan( info.BestBackend()->unique_id_)) { std::unique_ptr dialog(new QMessageBox( @@ -629,8 +629,8 @@ std::shared_ptr DeviceManager::Connect(int row) { return ret; } -std::shared_ptr DeviceManager::GetConnectedDevice(int row) - const { +std::shared_ptr DeviceManager::GetConnectedDevice( + int row) const { return devices_[row].device_; } diff --git a/src/internet/podcasts/podcastbackend.cpp b/src/internet/podcasts/podcastbackend.cpp index c37bb701c..e43c603d4 100644 --- a/src/internet/podcasts/podcastbackend.cpp +++ b/src/internet/podcasts/podcastbackend.cpp @@ -229,7 +229,7 @@ PodcastEpisodeList PodcastBackend::GetEpisodes(int podcast_id) { " FROM podcast_episodes" " WHERE podcast_id = :id" " ORDER BY publication_date DESC"); - q.bindValue(":db", podcast_id); + q.bindValue(":id", podcast_id); q.exec(); if (db_->CheckErrors(q)) return ret; @@ -252,7 +252,7 @@ PodcastEpisode PodcastBackend::GetEpisodeById(int id) { q.prepare("SELECT ROWID, " + PodcastEpisode::kColumnSpec + " FROM podcast_episodes" " WHERE ROWID = :id"); - q.bindValue(":db", id); + q.bindValue(":id", id); q.exec(); if (!db_->CheckErrors(q) && q.next()) { ret.InitFromQuery(q);