aboutsummaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authoradridg <adridg@FreeBSD.org>2017-10-08 21:15:45 +0800
committeradridg <adridg@FreeBSD.org>2017-10-08 21:15:45 +0800
commitda40de079c172f8edd7def6370d07c9e34431f2d (patch)
treeedde9057dee73eb513aa7728fb6d65db0805748b /audio
parent3b41f8b055622d5fb22ef66a1b490a86548b1d06 (diff)
downloadfreebsd-ports-gnome-da40de079c172f8edd7def6370d07c9e34431f2d.tar.gz
freebsd-ports-gnome-da40de079c172f8edd7def6370d07c9e34431f2d.tar.zst
freebsd-ports-gnome-da40de079c172f8edd7def6370d07c9e34431f2d.zip
Update audio/sayonara to 0.9.3 and take maintainership.
Approved by: tcberner (mentor) Differential Revision: https://reviews.freebsd.org/D12601
Diffstat (limited to 'audio')
-rw-r--r--audio/sayonara/Makefile15
-rw-r--r--audio/sayonara/distinfo6
-rw-r--r--audio/sayonara/files/patch-CMakeLists.txt19
-rw-r--r--audio/sayonara/files/patch-src_3rdParty_SomaFM_ui_GUI__SomaFM.h11
-rw-r--r--audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudArtistSearch.h11
-rw-r--r--audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudLibrary.h11
-rw-r--r--audio/sayonara/files/patch-src_CMakeLists.txt11
-rw-r--r--audio/sayonara/files/patch-src_Helper_Logger_Logger.h14
-rw-r--r--audio/sayonara/files/patch-src_Main.cpp46
-rw-r--r--audio/sayonara/files/patch-uifiles.patch181
-rw-r--r--audio/sayonara/pkg-plist2
11 files changed, 46 insertions, 281 deletions
diff --git a/audio/sayonara/Makefile b/audio/sayonara/Makefile
index 406f811dfa72..ea2506977ec5 100644
--- a/audio/sayonara/Makefile
+++ b/audio/sayonara/Makefile
@@ -2,13 +2,13 @@
# $FreeBSD$
PORTNAME= sayonara
-PORTVERSION= 0.9.2
-PORTREVISION= 4
+DISTVERSIONPREFIX= player-
+DISTVERSION= 0.9.3
+DISTVERSIONSUFFIX= -git2-20170509
CATEGORIES= audio
MASTER_SITES= http://www.sayonara-player.com/sw/
-DISTNAME= ${PORTNAME}-player-${PORTVERSION}-git11-20161030
-MAINTAINER= ports@FreeBSD.org
+MAINTAINER= adridg@FreeBSD.org
COMMENT= Small, clear, and fast Qt-based audio player
LICENSE= GPLv3
@@ -17,11 +17,12 @@ LICENSE_FILE= ${WRKSRC}/license.txt
LIB_DEPENDS= libtag.so:audio/taglib \
libmtp.so:multimedia/libmtp
-USES= cmake compiler:c++11-lib pkgconfig
-USE_GSTREAMER1= flac mpg123 ogg opus vorbis # XXX: likely incomplete
+USES= cmake:outsource compiler:c++11-lib desktop-file-utils \
+ gettext-runtime pkgconfig
+USE_GNOME= glib20
+USE_GSTREAMER1= flac mpg123 ogg opus vorbis
USE_QT5= dbus core gui network sql sql-sqlite3_run widgets xml \
buildtools_build qmake_build linguisttools_build
-INSTALLS_ICONS= yes
WRKSRC= ${WRKDIR}/${PORTNAME}-player
diff --git a/audio/sayonara/distinfo b/audio/sayonara/distinfo
index 50c5800a1006..239daddb8b9f 100644
--- a/audio/sayonara/distinfo
+++ b/audio/sayonara/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1477828406
-SHA256 (sayonara-player-0.9.2-git11-20161030.tar.gz) = 815c2e0c64520edb99571b52c6384320c110e8a4ef5be5c13803a156f64be148
-SIZE (sayonara-player-0.9.2-git11-20161030.tar.gz) = 1706145
+TIMESTAMP = 1507272191
+SHA256 (sayonara-player-0.9.3-git2-20170509.tar.gz) = 0412c6cf7e3d9283aa37caba08b009a9df6aeddb036cfca35af7dab40f5c14f5
+SIZE (sayonara-player-0.9.3-git2-20170509.tar.gz) = 1732355
diff --git a/audio/sayonara/files/patch-CMakeLists.txt b/audio/sayonara/files/patch-CMakeLists.txt
index 19201cb7227d..79a2118286b4 100644
--- a/audio/sayonara/files/patch-CMakeLists.txt
+++ b/audio/sayonara/files/patch-CMakeLists.txt
@@ -1,21 +1,8 @@
-CMake 3.9 compatibility. Upstreamed in a different form for
-sayonara 0.9.4, which is fully patched for CMake 3.9 and FreeBSD
+Adjust for changed UI search and generation paths in CMake 3.9.
---- CMakeLists.txt.orig 2016-10-30 11:53:25 UTC
+--- CMakeLists.txt.orig 2017-05-09 18:52:59 UTC
+++ CMakeLists.txt
-@@ -1,6 +1,11 @@
- CMAKE_MINIMUM_REQUIRED(VERSION 2.7)
- PROJECT("Sayonara Player")
-
-+IF(POLICY CMP0071)
-+ CMAKE_POLICY(SET CMP0071 OLD)
-+ SET(CMAKE_POLICY_DEFAULT_CMP0071 OLD) # Don't reset in subdirs
-+ENDIF()
-+
- set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
- INCLUDE(cotire)
- SET(VAR_SAYONARA_VERSION "0.9.2")
-@@ -15,6 +20,10 @@ ADD_DEFINITIONS( -DSAYONARA_INSTALL_SHAR
+@@ -24,6 +24,10 @@ CONFIGURE_FILE(Macros.h.in "${CMAKE_CURR
MESSAGE("Build Sayonara ${VAR_SAYONARA_VERSION}")
MESSAGE("Will install to ${CMAKE_INSTALL_PREFIX}")
diff --git a/audio/sayonara/files/patch-src_3rdParty_SomaFM_ui_GUI__SomaFM.h b/audio/sayonara/files/patch-src_3rdParty_SomaFM_ui_GUI__SomaFM.h
deleted file mode 100644
index c077b2e25a76..000000000000
--- a/audio/sayonara/files/patch-src_3rdParty_SomaFM_ui_GUI__SomaFM.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/3rdParty/SomaFM/ui/GUI_SomaFM.h.orig 2017-09-01 21:11:21 UTC
-+++ src/3rdParty/SomaFM/ui/GUI_SomaFM.h
-@@ -29,7 +29,7 @@
- #include "SomaFMLibrary.h"
- #include "SomaFMStation.h"
-
--#include "3rdParty/SomaFM/ui_GUI_SomaFM.h"
-+#include "3rdParty/SomaFM/ui/ui_GUI_SomaFM.h"
- #include "Components/Covers/CoverLocation.h"
- #include "GUI/Helper/SayonaraWidget/SayonaraWidget.h"
-
diff --git a/audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudArtistSearch.h b/audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudArtistSearch.h
deleted file mode 100644
index a7018ed137c5..000000000000
--- a/audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudArtistSearch.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/3rdParty/Soundcloud/ui/GUI_SoundcloudArtistSearch.h.orig 2017-09-01 21:08:31 UTC
-+++ src/3rdParty/Soundcloud/ui/GUI_SoundcloudArtistSearch.h
-@@ -25,7 +25,7 @@
-
- #include <QDialog>
- #include "GUI/Helper/SayonaraWidget/SayonaraDialog.h"
--#include "3rdParty/Soundcloud/ui_GUI_SoundcloudArtistSearch.h"
-+#include "3rdParty/Soundcloud/ui/ui_GUI_SoundcloudArtistSearch.h"
- #include "3rdParty/Soundcloud/src/SoundcloudLibrary.h"
- #include "3rdParty/Soundcloud/src/SoundcloudDataFetcher.h"
-
diff --git a/audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudLibrary.h b/audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudLibrary.h
deleted file mode 100644
index 7ca8f81b1999..000000000000
--- a/audio/sayonara/files/patch-src_3rdParty_Soundcloud_ui_GUI__SoundcloudLibrary.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/3rdParty/Soundcloud/ui/GUI_SoundcloudLibrary.h.orig 2017-09-01 21:10:28 UTC
-+++ src/3rdParty/Soundcloud/ui/GUI_SoundcloudLibrary.h
-@@ -23,7 +23,7 @@
- #ifndef GUI_SOUNDCLOUDLIBRARY_H
- #define GUI_SOUNDCLOUDLIBRARY_H
-
--#include "3rdParty/Soundcloud/ui_GUI_SoundcloudLibrary.h"
-+#include "3rdParty/Soundcloud/ui/ui_GUI_SoundcloudLibrary.h"
-
- #include "GUI/Library/GUI_AbstractLibrary.h"
-
diff --git a/audio/sayonara/files/patch-src_CMakeLists.txt b/audio/sayonara/files/patch-src_CMakeLists.txt
deleted file mode 100644
index 2ad88e25256e..000000000000
--- a/audio/sayonara/files/patch-src_CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/CMakeLists.txt.orig 2016-10-30 11:53:25 UTC
-+++ src/CMakeLists.txt
-@@ -161,6 +161,8 @@ IF(WIN32)
- api-ms-win-core-winrt-string-l1-1-0
- ${GIO_LIBRARIES}
- )
-+ELSE()
-+ SET(OS_LIBRARIES execinfo)
- ENDIF()
-
-
diff --git a/audio/sayonara/files/patch-src_Helper_Logger_Logger.h b/audio/sayonara/files/patch-src_Helper_Logger_Logger.h
new file mode 100644
index 000000000000..fdf911df536f
--- /dev/null
+++ b/audio/sayonara/files/patch-src_Helper_Logger_Logger.h
@@ -0,0 +1,14 @@
+Avoid adding #include <iostream> in lots of .cpp files, at the cost
+of compilation time because iostream is no longer forward-declared.
+
+--- src/Helper/Logger/Logger.h.orig 2017-10-06 07:14:44 UTC
++++ src/Helper/Logger/Logger.h
+@@ -21,7 +21,7 @@
+ #ifndef LOGGER_H
+ #define LOGGER_H
+
+-#include <iosfwd>
++#include <iostream>
+ #include <typeinfo>
+ #include <type_traits>
+ #include <QList>
diff --git a/audio/sayonara/files/patch-src_Main.cpp b/audio/sayonara/files/patch-src_Main.cpp
index f90c621b6ccf..2d382f95cfd6 100644
--- a/audio/sayonara/files/patch-src_Main.cpp
+++ b/audio/sayonara/files/patch-src_Main.cpp
@@ -1,38 +1,24 @@
---- src/Main.cpp.orig 2016-10-30 11:53:25 UTC
+The #else part is ill-formed, and the multi-instance support can
+work on FreeBSD as well as Linux.
+
+--- src/Main.cpp.orig 2017-10-06 07:17:05 UTC
+++ src/Main.cpp
-@@ -38,7 +38,7 @@
- #include <QtGlobal>
- #include <algorithm>
-
--#ifdef Q_OS_LINUX
-+#ifdef Q_OS_UNIX
- #include <execinfo.h> // backtrace
- #include <csignal> // kill/signal
- #include <sys/types.h> // kill
-@@ -150,7 +150,7 @@ void segfault_handler(int sig){
-
- Q_UNUSED(sig)
-
--#ifdef Q_OS_LINUX
-+#ifdef Q_OS_UNIX
-
- void* array[10];
- size_t size;
-@@ -176,7 +176,7 @@ int main(int argc, char *argv[]) {
- #endif
-
-
--#ifdef Q_OS_LINUX
-+#ifdef Q_OS_UNIX
-
- signal(SIGSEGV, segfault_handler);
-
-@@ -187,7 +187,7 @@ int main(int argc, char *argv[]) {
+@@ -192,7 +192,7 @@ int main(int argc, char *argv[])
return 0;
}
-#ifdef Q_OS_LINUX
-+#ifdef Q_OS_UNIX
++#if defined( Q_OS_LINUX ) || defined( Q_OS_FREEBSD )
int pid=0;
if( !cmd_data.multiple_instances ){
+@@ -203,9 +203,6 @@ int main(int argc, char *argv[])
+ notify_old_instance(cmd_data.files_to_play, pid);
+ return 0;
+ }
+-
+-#else
+- Q_UNUSED(single_instance)
+ #endif
+
+
diff --git a/audio/sayonara/files/patch-uifiles.patch b/audio/sayonara/files/patch-uifiles.patch
deleted file mode 100644
index bb0ff8786048..000000000000
--- a/audio/sayonara/files/patch-uifiles.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-Many files #include generated UI-files with the path where they are
-generated by CMake 3.8; this breaks autouic in CMake 3.9, which looks
-at the actual source path and generates the files in a different
-location. All upstreamed in different forms for the forthcoming 0.9.4.
-
---- src/GUI/Library/ImportFolderDialog/GUI_ImportFolder.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Library/ImportFolderDialog/GUI_ImportFolder.h
-@@ -21,7 +21,7 @@
- #ifndef GUIIMPORTFOLDER_H_
- #define GUIIMPORTFOLDER_H_
-
--#include "GUI/Library/ui_GUI_ImportFolder.h"
-+#include "ui_GUI_ImportFolder.h"
- #include "GUI/Helper/SayonaraWidget/SayonaraDialog.h"
- #include "Components/Library/Importer/LibraryImporter.h"
-
---- src/GUI/Library/InfoBox/GUI_LibraryInfoBox.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Library/InfoBox/GUI_LibraryInfoBox.h
-@@ -25,7 +25,7 @@
- #ifndef GUILIBRARYINFOBOX_H_
- #define GUILIBRARYINFOBOX_H_
-
--#include "GUI/Library/ui_GUI_LibraryInfoBox.h"
-+#include "ui_GUI_LibraryInfoBox.h"
- #include "GUI/Helper/SayonaraWidget/SayonaraDialog.h"
-
-
---- src/GUI/Playlist/BottomBar/GUI_PlaylistBottomBar.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Playlist/BottomBar/GUI_PlaylistBottomBar.h
-@@ -24,7 +24,7 @@
- #define PLAYLISTBOTTOMBAR_H
-
- #include "GUI/Helper/SayonaraWidget/SayonaraWidget.h"
--#include "GUI/Playlist/ui_GUI_PlaylistBottomBar.h"
-+#include "ui_GUI_PlaylistBottomBar.h"
-
- #include "Helper/Shutdown/Shutdown.h"
- #include "Helper/Playlist/PlaylistMode.h"
---- src/GUI/Preferences/Broadcast/GUI_BroadcastSetup.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/Broadcast/GUI_BroadcastSetup.h
-@@ -23,7 +23,7 @@
- #ifndef GUI_BROADCASTSETUP_H
- #define GUI_BROADCASTSETUP_H
-
--#include "GUI/Preferences/ui_GUI_BroadcastSetup.h"
-+#include "ui_GUI_BroadcastSetup.h"
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
-
- class GUI_BroadcastSetup :
---- src/GUI/Preferences/Fonts/GUI_FontConfig.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/Fonts/GUI_FontConfig.h
-@@ -24,7 +24,7 @@
- #define GUI_FONTCONFIG_H
-
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
--#include "GUI/Preferences/ui_GUI_FontConfig.h"
-+#include "ui_GUI_FontConfig.h"
-
- #include <QFontDatabase>
- #include <QFont>
---- src/GUI/Preferences/Language/GUI_LanguageChooser.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/Language/GUI_LanguageChooser.h
-@@ -26,7 +26,7 @@
- #include <QMap>
- #include <QShowEvent>
-
--#include "GUI/Preferences/ui_GUI_LanguageChooser.h"
-+#include "ui_GUI_LanguageChooser.h"
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
-
-
---- src/GUI/Preferences/LastFM/GUI_LastFM.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/LastFM/GUI_LastFM.h
-@@ -29,7 +29,7 @@
- #ifndef GUI_LASTFM_H_
- #define GUI_LASTFM_H_
-
--#include "GUI/Preferences/ui_GUI_LastFM.h"
-+#include "ui_GUI_LastFM.h"
-
- #include "Components/StreamPlugins/LastFM/LastFM.h"
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
---- src/GUI/Preferences/LibraryPreferences/GUI_LibraryPreferences.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/LibraryPreferences/GUI_LibraryPreferences.h
-@@ -22,7 +22,7 @@
- #define GUI_LIBRARYPREFERENCES_H
-
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
--#include "GUI/Preferences/ui_GUI_LibraryPreferences.h"
-+#include "ui_GUI_LibraryPreferences.h"
-
-
- class GUI_LibraryPreferences :
---- src/GUI/Preferences/Notifications/GUI_Notifications.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/Notifications/GUI_Notifications.h
-@@ -25,7 +25,7 @@
-
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
- #include "Interfaces/Notification/NotificationHandler.h"
--#include "GUI/Preferences/ui_GUI_Notifications.h"
-+#include "ui_GUI_Notifications.h"
-
-
- class GUI_Notifications :
---- src/GUI/Preferences/PlayerPreferences/GUI_PlayerPreferences.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/PlayerPreferences/GUI_PlayerPreferences.h
-@@ -24,7 +24,7 @@
- #define GUI_PLAYERPREFERENCES_H
-
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
--#include "GUI/Preferences/ui_GUI_PlayerPreferences.h"
-+#include "ui_GUI_PlayerPreferences.h"
-
-
- class GUI_PlayerPreferences :
---- src/GUI/Preferences/PlaylistPreferences/GUI_PlaylistPreferences.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/PlaylistPreferences/GUI_PlaylistPreferences.h
-@@ -28,7 +28,7 @@
-
-
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
--#include "GUI/Preferences/ui_GUI_PlaylistPreferences.h"
-+#include "ui_GUI_PlaylistPreferences.h"
-
-
- class GUI_PlaylistPreferences :
---- src/GUI/Preferences/PreferenceDialog/GUI_PreferenceDialog.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/PreferenceDialog/GUI_PreferenceDialog.h
-@@ -25,7 +25,7 @@
-
- #include <QDialog>
- #include <QList>
--#include "GUI/Preferences/ui_GUI_PreferenceDialog.h"
-+#include "ui_GUI_PreferenceDialog.h"
- #include "GUI/Helper/SayonaraWidget/SayonaraWidget.h"
- #include "Interfaces/PreferenceDialog/PreferenceDialogInterface.h"
-
---- src/GUI/Preferences/RemoteControl/GUI_RemoteControl.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/RemoteControl/GUI_RemoteControl.h
-@@ -25,7 +25,7 @@
- #ifndef GUISOCKETSETUP_H_
- #define GUISOCKETSETUP_H_
-
--#include "GUI/Preferences/ui_GUI_RemoteControl.h"
-+#include "ui_GUI_RemoteControl.h"
-
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
-
---- src/GUI/Preferences/Shortcuts/GUI_ShortcutEntry.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/Shortcuts/GUI_ShortcutEntry.h
-@@ -24,7 +24,7 @@
-
- #include "GUI/Helper/SayonaraWidget/SayonaraWidget.h"
- #include "GUI/Helper/Shortcuts/ShortcutHandler.h"
--#include "GUI/Preferences/ui_GUI_ShortcutEntry.h"
-+#include "ui_GUI_ShortcutEntry.h"
-
-
- /**
---- src/GUI/Preferences/Shortcuts/GUI_Shortcuts.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/Shortcuts/GUI_Shortcuts.h
-@@ -24,7 +24,7 @@
- #define GUI_SHORTCUTS_H
-
-
--#include "GUI/Preferences/ui_GUI_Shortcuts.h"
-+#include "ui_GUI_Shortcuts.h"
- #include "GUI/Helper/Shortcuts/ShortcutHandler.h"
-
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
---- src/GUI/Preferences/StreamRecorder/GUI_StreamRecorder.h.orig 2016-10-30 11:53:25 UTC
-+++ src/GUI/Preferences/StreamRecorder/GUI_StreamRecorder.h
-@@ -25,7 +25,7 @@
- #ifndef GUI_STREAMRECORDER_H_
- #define GUI_STREAMRECORDER_H_
-
--#include "GUI/Preferences/ui_GUI_StreamRecorder.h"
-+#include "ui_GUI_StreamRecorder.h"
- #include "Interfaces/PreferenceDialog/PreferenceWidgetInterface.h"
-
- class GUI_StreamRecorder :
diff --git a/audio/sayonara/pkg-plist b/audio/sayonara/pkg-plist
index 63f87edbe962..ff5e409a55d9 100644
--- a/audio/sayonara/pkg-plist
+++ b/audio/sayonara/pkg-plist
@@ -35,6 +35,7 @@ share/pixmaps/sayonara.png
%%DATADIR%%/translations/icons/fr.png
%%DATADIR%%/translations/icons/hu.png
%%DATADIR%%/translations/icons/it.png
+%%DATADIR%%/translations/icons/nl.png
%%DATADIR%%/translations/icons/pl.png
%%DATADIR%%/translations/icons/pt.png
%%DATADIR%%/translations/icons/ro.png
@@ -49,6 +50,7 @@ share/pixmaps/sayonara.png
%%DATADIR%%/translations/sayonara_lang_fr.qm
%%DATADIR%%/translations/sayonara_lang_hu.qm
%%DATADIR%%/translations/sayonara_lang_it.qm
+%%DATADIR%%/translations/sayonara_lang_nl.qm
%%DATADIR%%/translations/sayonara_lang_pl.qm
%%DATADIR%%/translations/sayonara_lang_pt.qm
%%DATADIR%%/translations/sayonara_lang_ro.qm