Import quassel_0.13.1-4.debian.tar.xz
authorFelix Geyer <fgeyer@debian.org>
Mon, 13 Jul 2020 21:13:31 +0000 (22:13 +0100)
committerFelix Geyer <fgeyer@debian.org>
Mon, 13 Jul 2020 21:13:31 +0000 (22:13 +0100)
[dgit import tarball quassel 1:0.13.1-4 quassel_0.13.1-4.debian.tar.xz]

35 files changed:
NEWS [new file with mode: 0644]
changelog [new file with mode: 0644]
control [new file with mode: 0644]
copyright [new file with mode: 0644]
manpages/quassel.1 [new file with mode: 0644]
manpages/quasselclient.1 [new file with mode: 0644]
manpages/quasselcore.1 [new file with mode: 0644]
patches/01_default_network_channel.patch [new file with mode: 0644]
patches/02_script_interpreter_path.patch [new file with mode: 0644]
patches/qt514/0001-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch [new file with mode: 0644]
patches/qt514/0002-common-Always-let-QVariant-fromValue-deduce-the-type.patch [new file with mode: 0644]
patches/qt514/0003-qa-Replace-deprecated-qVariantFromValue-by-QVariant-.patch [new file with mode: 0644]
patches/qt514/0004-qa-Avoid-deprecation-warnings-for-QList-QSet-convers.patch [new file with mode: 0644]
patches/qt514/0005-qa-Replace-deprecated-QString-sprintf-by-QString-asp.patch [new file with mode: 0644]
patches/series [new file with mode: 0644]
quassel-client.install [new file with mode: 0644]
quassel-client.manpages [new file with mode: 0644]
quassel-core.install [new file with mode: 0644]
quassel-core.logrotate [new file with mode: 0644]
quassel-core.manpages [new file with mode: 0644]
quassel-core.postinst [new file with mode: 0644]
quassel-core.postrm [new file with mode: 0644]
quassel-core.quasselcore.default [new file with mode: 0644]
quassel-core.quasselcore.init [new file with mode: 0644]
quassel-core.quasselcore.service [new file with mode: 0644]
quassel-core.ufw.profile [new file with mode: 0644]
quassel-data.install [new file with mode: 0644]
quassel-data.links [new file with mode: 0644]
quassel.NEWS [new file with mode: 0644]
quassel.install [new file with mode: 0644]
quassel.manpages [new file with mode: 0644]
rules [new file with mode: 0755]
source/format [new file with mode: 0644]
usr.bin.quasselcore [new file with mode: 0644]
watch [new file with mode: 0644]

diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..5227430
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,11 @@
+quassel (1:0.13.1-2) unstable; urgency=medium
+
+  * This revision of quassel contains an updated apparmor profile for quassel-
+    core.  To load the new profile, use the following command on the server
+    running the core:
+
+        apparmor_parser -r /etc/apparmor.d/usr.bin.quasselcore
+
+    This only applies to quaseelcore, no action is required for clients.
+
+ -- Scott Kitterman <scott@kitterman.com>  Sat, 11 Jan 2020 14:55:50 -0500
diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..b39531e
--- /dev/null
+++ b/changelog
@@ -0,0 +1,590 @@
+quassel (1:0.13.1-4) unstable; urgency=medium
+
+  [ Scott Kitterman ]
+  * Add explicit build-depeds on debhelper (>= 10.3~) since we use dh_missing
+  * Bump standards-version to 4.5.0 without further change
+  * Add Recommends: ca-certificates to quassel and quassel-client so network
+    certificates can be verified
+
+  [ Felix Geyer ]
+  * Add patches to fix building against Qt 5.14 from Ubuntu.
+    Thanks Dan Streetman! (Closes: #964687)
+
+ -- Felix Geyer <fgeyer@debian.org>  Mon, 13 Jul 2020 23:13:31 +0200
+
+quassel (1:0.13.1-3) unstable; urgency=medium
+
+  * Delete quassel-core.NEWS, not needed
+  * Bump standards version to 4.4.1 without further change
+  * Switch from deboan/compat + debhelper to debhelper-compat
+
+ -- Scott Kitterman <scott@kitterman.com>  Sat, 18 Jan 2020 15:55:00 -0500
+
+quassel (1:0.13.1-2) unstable; urgency=medium
+
+  [ Felix Geyer ]
+  * Fix quasselcore AppArmor denials when the config is saved. (Closes:
+    #940482)
+
+  [ Scott Kitterman ]
+  * Correct default channel for Debian
+  * Add NEWS entry about reloading the quaseelcore AppArmor profile
+
+ -- Scott Kitterman <scott@kitterman.com>  Sat, 11 Jan 2020 15:00:28 -0500
+
+quassel (1:0.13.1-1) unstable; urgency=medium
+
+  [ Scott Kitterman ]
+  * New upstream bugfix release
+  * Do not explicitly set DEMBED_DATA=OFF, it is the default when KDE (Kf5)
+    integration is enabled
+  * Update debian/copyright
+  * Add hurd-i386 to libqt5webkit5-dev build-depends arch list, since it is
+    available there
+
+  [ Shane Synan ]
+  * Clean up and update manpages with new options for Quassel 0.13.1
+
+ -- Scott Kitterman <scott@kitterman.com>  Fri, 15 Feb 2019 13:00:08 -0500
+
+quassel (1:0.13.0-4) unstable; urgency=medium
+
+  * Fix install of ufw profile so install is only attempted for quassel-core
+    (fixes arch all FTBFS)
+  * Replace obsolete dh_install --fail-missing with dh_missing --fail-missing
+
+ -- Scott Kitterman <scott@kitterman.com>  Sun, 06 Jan 2019 04:33:59 -0500
+
+quassel (1:0.13.0-3) unstable; urgency=medium
+
+  [ Scott Kitterman ]
+  * Make quassel-data Multi-Arch: foreign
+  * Add apparmor profile (adopted from Ubuntu)
+  * Bump standards-version to 4.3.0 without further change
+
+  [ Michael Marley ]
+  * Add reload support to quasselcore service to re-read SSL certificates
+  * Add ufw profile (adopted from Ubuntu)
+
+  [ Shane Synan ]
+  * Clean up and update manpages with new options for Quassel 0.13.0
+  * Update manpages to mention file paths for quassel, quasselclient, and
+    quasselcore (Closes: #724617)
+
+ -- Scott Kitterman <scott@kitterman.com>  Sat, 05 Jan 2019 23:45:11 -0500
+
+quassel (1:0.13.0-2) unstable; urgency=medium
+
+  * Upload to unstable
+  * Set -DWITH_OXYGEN_ICONS for compatibility for Oxygen users
+  * Add oxygen-icon-theme as an alternative Recommends to breeze-icon-theme
+  * Make debian/NEWS specific to quassel-core and quassel binaries
+
+ -- Scott Kitterman <scott@kitterman.com>  Wed, 05 Dec 2018 00:34:55 -0500
+
+quassel (1:0.13.0-1) experimental; urgency=medium
+
+  * New upstream release (Closes: #915244)
+    - Delete debian/patches/03_force_icon_theme.patch, fixed upstream
+    - Refresh remaining patch
+  * Add libqt5webkit5-dev to build depends for archs where qtwebengine5-dev is
+    not available and update the qtwebengine5-dev arch list
+  * Set web backend during configure in debian/rules (Thanks to Michael
+    Marley)
+  * Update debian/copyright
+  * Add debian/NEWS item suggesting a backup of the database
+  * Add debian/patches/02_script_interpreter_path.patch to use correct path in
+    scripts
+  * Bump standards-version to 4.2.1 without further change
+  * Add qtmultimedia5-dev to build-depends
+  * Update debian/patches/01_default_network_channel.patch to connect via SSL
+    (TLS) when possible
+  * Add symlink to usr/bin/mpris-quassel from usr/share/quassel/scripts/mpris
+    so the script is available on the system path
+  * Change recommended icon theme to breeze-icon-theme to match Plasma default
+  * Include quassel unique icons for breeze and breeze-dark icon themes
+
+ -- Scott Kitterman <scott@kitterman.com>  Mon, 03 Dec 2018 17:27:44 -0500
+
+quassel (1:0.12.5-3) unstable; urgency=medium
+
+  * Change postinst script to call runuser instead of su. (Closes: #906794)
+
+ -- Felix Geyer <fgeyer@debian.org>  Sun, 07 Oct 2018 16:43:33 +0200
+
+quassel (1:0.12.5-2) unstable; urgency=high
+
+  * Build-depend on qtwebengine5-dev only for archs where it's available.
+
+ -- Felix Geyer <fgeyer@debian.org>  Wed, 25 Apr 2018 22:58:59 +0200
+
+quassel (1:0.12.5-1) unstable; urgency=high
+
+  * New upstream release.
+    - Fixes a deserialization security vulnerability.
+    - Fixes a DoS while quassel is starting up.
+  * Drop Fix_the_ssl_check_with_Qt_5.6_and_gcc_5.patch, applied upstream.
+  * Build against Qt WebEngine instead of QtWebKit, following upstream.
+  * Move git repo to salsa.debian.org
+
+ -- Felix Geyer <fgeyer@debian.org>  Wed, 25 Apr 2018 19:58:02 +0200
+
+quassel (1:0.12.4-3) unstable; urgency=medium
+
+  * Depend on default-dbus-session-bus | dbus-session-bus instead of dbus-x11.
+    (Closes: #836142)
+  * Provide support for --listen option in the init script and systemd service.
+    (Closes: #590645)
+  * Fix the OpenSSL detection.
+    - Add Fix_the_ssl_check_with_Qt_5.6_and_gcc_5.patch,
+      cherry picked from upstream.
+  * Switch to debhelper compat level 10.
+  * quassel-core postinst: chmod/chown only after creating the files/dirs.
+  * Remove transitional packages quassel-kde4 and quassel-client-kde4.
+
+ -- Felix Geyer <fgeyer@debian.org>  Thu, 08 Feb 2018 18:31:06 +0100
+
+quassel (1:0.12.4-2) unstable; urgency=medium
+
+  * Fix FTBFS when building only architecture dependent packages.
+
+ -- Felix Geyer <fgeyer@debian.org>  Tue, 26 Apr 2016 19:10:51 +0200
+
+quassel (1:0.12.4-1) unstable; urgency=medium
+
+  * New upstream release.
+  * quassel-core: Add libqt5sql5-psql to Suggests since PostgreSQL is supported
+    as an alternative backend. (Closes: #552374)
+  * Pass service name to dh_systemd_*. (Closes: #811149)
+  * Replace bundled inxi script with a symlink to the one provided by pkg:inxi.
+    (Closes: #814278)
+
+ -- Felix Geyer <fgeyer@debian.org>  Tue, 26 Apr 2016 18:16:53 +0200
+
+quassel (1:0.12.3-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Drop patches that have been applied upstream:
+    - 02_set-required-libs-and-flags.patch
+    - 04_fix_ftbfs_qt55.patch
+    - CVE-2015-8547.patch
+
+ -- Felix Geyer <fgeyer@debian.org>  Thu, 11 Feb 2016 21:38:13 +0100
+
+quassel (1:0.12.2-3) unstable; urgency=high
+
+  * Fix CVE-2015-8547: op command denial of service issue (Closes: #807801)
+    - Add CVE-2015-8547.patch
+
+ -- Felix Geyer <fgeyer@debian.org>  Mon, 14 Dec 2015 21:25:33 +0100
+
+quassel (1:0.12.2-2) unstable; urgency=medium
+
+  * Fix FTBFS with Qt 5.5. (Closes: #802868)
+    - Add 04_fix_ftbfs_qt55.patch
+
+ -- Felix Geyer <fgeyer@debian.org>  Thu, 29 Oct 2015 17:05:50 +0100
+
+quassel (1:0.12.2-1) unstable; urgency=medium
+
+  [ Felix Geyer ]
+  * New upstream release. (Closes: #779726)
+  * Remove patches that have been applied upstream:
+    - CVE-2014-8483.patch
+    - CVE-2015-2778.patch
+    - CVE-2015-3427.patch
+  * Set maintainer to Debian KDE Extras Team.
+  * Add Vcs control fields pointing to the new git packaging repo.
+    (Closes: #732605)
+  * Drop explicit phonon depenencies, they are automatically added.
+  * Build quassel against Qt5 + KF5 libs instead of a Qt4 and a KDE4 variant.
+    (Closes: #784519)
+    - Remove quassel-data-kde4.
+    - Turn quassel-kde4 and quassel-client-kde4 into transitional packages.
+  * Enable parallel building.
+  * Pass --fail-missing to dh_install.
+  * Create the SSL certificate as user quasselcore to avoid a symlink race
+    condition. (Closes: #753737)
+  * Stop hardcoding the path to deluser / delgroup in postrm.
+  * Enable all hardening build flags.
+  * Build with -Wl,--as-needed.
+  * Fix detection of OpenSSL when building against Qt5.
+    - Add 02_set-required-libs-and-flags.patch from openSUSE.
+  * Work around missing icon theme fallback in KF5.
+    - Add 03_force_icon_theme.patch
+    - Add oxygen-icon-theme to quassel-data/Recommends.
+
+  [ Scott Kitterman ]
+  * Add systemd service file and associated changes for quasselcore.
+
+ -- Felix Geyer <fgeyer@debian.org>  Thu, 10 Sep 2015 22:44:32 +0200
+
+quassel (1:0.10.0-2.4) unstable; urgency=high
+
+  * Non-maintainer upload.
+  * Fix CVE-2015-3427: SQL injection vulnerability in PostgreSQL backend.
+    (Closes: #783926)
+    - Add debian/patches/CVE-2015-3427.patch, cherry-picked from upstream.
+    - The original issue was CVE-2013-4422 which had an incomplete fix.
+
+ -- Felix Geyer <fgeyer@debian.org>  Tue, 05 May 2015 16:48:57 +0200
+
+quassel (1:0.10.0-2.3) unstable; urgency=high
+
+  * Non-maintainer upload with maintainer's permission.
+  * Improve the message-splitting algorithm for PRIVMSG and CTCP.  Original
+    patch from Michael Marley, backported by Steinar H. Gunderson.  Fixes
+    CVE-2015-2778 and CVE-2015-2779.  (Closes: #781024)
+
+ -- Olly Betts <olly@survex.com>  Wed, 01 Apr 2015 11:41:28 +1300
+
+quassel (1:0.10.0-2.2) unstable; urgency=high
+
+  * Non-maintainer upload.
+  * Increment Debian revision and epoch to re-upload 0.10.0-2.1 to
+    unstable containing the fix for #766962 / CVE-2014-8483:
+    out-of-bounds read in ECB Blowfish decryption.
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Sat, 08 Nov 2014 14:14:56 +0100
+
+quassel (0.10.0-2.1) unstable; urgency=high
+
+  * Non-maintainer upload.
+  * Add CVE-2014-8483.patch patch.
+    CVE-2014-8483: out-of-bounds read in ECB Blowfish decryption.
+    (Closes: #766962)
+
+ -- Salvatore Bonaccorso <carnil@debian.org>  Sun, 02 Nov 2014 19:10:58 +0100
+
+quassel (0.10.0-2) unstable; urgency=low
+
+  * Fixing security issue where quassel core certificate is
+    readable by all local users
+    - Change permissions of /var/lib/quassel/quasselCert.pem
+    - Add debian/NEWS to notify the admin to change the certificate
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Fri, 04 Jul 2014 17:15:10 +0200
+
+quassel (0.10.0-1) unstable; urgency=low
+
+  * New upstream release
+  * Debian policy to 3.9.5
+  * Don't create 1024 bit key (Closes: #732728)
+  * Start quaselcore after databases (Closes: #701943)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Fri, 09 May 2014 17:42:19 +0200
+
+quassel (0.9.2-1) unstable; urgency=low
+
+  * New upstream release
+  * Increase debhelper compat to 9 - supporting hardening now
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Tue, 26 Nov 2013 22:53:55 +0100
+
+quassel (0.9.1-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Tue, 05 Nov 2013 17:39:26 +0100
+
+quassel (0.8.0-1) unstable; urgency=low
+
+  * New upstream release
+  * Debian Policy to 3.9.3
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Wed, 25 Apr 2012 00:02:51 +0200
+
+quassel (0.7.3-2.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix "fails to upgrade from squeeze": test for existence of to-be-moved
+    file in quassel-core.preinst; and use -p for mkdir to avoid errors when
+    the directory exists, like after failed upgrades.
+    (Closes: #655844)
+
+ -- gregor herrmann <gregoa@debian.org>  Tue, 10 Apr 2012 19:02:42 +0200
+
+quassel (0.7.3-2) unstable; urgency=medium
+
+  * Change Build-Depends of the package from libpng12-dev to libpng-dev.
+    (Closes: #662486)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Mon, 05 Mar 2012 09:27:50 +0100
+
+quassel (0.7.3-1) unstable; urgency=medium
+
+  * New upstream release
+  * Translation update
+  * Fixing security issue: ctcp DoS (Closes: #640960)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Fri, 09 Sep 2011 19:00:55 +0000
+
+quassel (0.7.2-2) unstable; urgency=low
+
+  * DATADIR set to new location /var/lib/ (Closes: #629507)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Tue, 07 Jun 2011 19:01:51 +0000
+
+quassel (0.7.2-1) unstable; urgency=low
+
+  * New upstream release (Closes: #629393)
+  * Clients no longer recommend quassel-core (Closes: #622904)
+  * Debian Policy to 3.9.2
+  * quassel-core.preinst added - taken from Ubuntu (Closes: #612042)
+    Thanks to Scott Kitterman <scott@kitterman.com>
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Mon, 06 Jun 2011 20:40:24 +0200
+
+quassel (0.7.1-4) unstable; urgency=low
+
+  * 0.7.1-3 lost the kfreebsd patch of 0.7.1-2
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Thu, 14 Apr 2011 20:08:27 +0200
+
+quassel (0.7.1-3) unstable; urgency=low
+
+  * Build-dependency qt4-dev-tools added (Closes: #613599)
+  * Build-dependency libqtwebkit-dev added (Closes: #622273)
+  * Build-dependency libdbusmenu-qt-dev added
+  * Build-dependency libindicate-qt-dev added
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Tue, 12 Apr 2011 22:40:46 +0200
+
+quassel (0.7.1-2) unstable; urgency=low
+
+  * Patch added to fix kfreebsd builds (Closes: #620542)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Mon, 11 Apr 2011 21:44:34 +0200
+
+quassel (0.7.1-1.1) unstable; urgency=low
+
+  * Non-maintainer upload with maintainer permission.
+  * Do not hardcode kdelibs5 and kdebase-runtime in quassel-client-kde4 and
+    quassel-kde4 Depends (Closes: #616026). kdelibs5 has been deprecated and
+    will be removed soon while kdebase-runtime is added via shlibs as needed.
+
+ -- Modestas Vainius <modax@debian.org>  Wed, 30 Mar 2011 18:59:12 +0300
+
+quassel (0.7.1-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Tue, 21 Sep 2010 19:59:07 +0200
+
+quassel (0.7.0-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Sat, 18 Sep 2010 19:19:40 +0200
+quassel (0.6.1-2) unstable; urgency=low
+
+  * add dependency to gawk (closes: #592455)
+  * remove manageusers.py (closes: #590644)
+  * man pages updated (closes: #590643)
+  * dump Debian Policy to 3.9.1
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Sun, 15 Aug 2010 23:11:16 +0200
+
+quassel (0.6.1-1) unstable; urgency=low
+
+  * New upstream release
+  * Switch to dpkg-source 3.0 (quilt) format
+  * desktop notification have been reimplemented (closes: #562974)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Wed, 21 Apr 2010 20:11:17 +0200
+
+quassel (0.5.2-3) unstable; urgency=low
+
+  * missing name changes quassel-core - in init and default
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Thu, 18 Feb 2010 17:12:06 +0100
+
+quassel (0.5.2-2) unstable; urgency=low
+
+  * Re-include init script into (closes: #569942)
+  * Fixing lintian error init.d-script-missing-dependency-on-remote_fs
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Thu, 18 Feb 2010 17:11:18 +0100
+
+quassel (0.5.2-1) unstable; urgency=low
+
+  * New upstream release (closes: #556309)
+  * Fixing minor lintian warnings:
+    - copyright-with-old-dh-make-debian-copyright
+    - duplicate-long-description
+    - quilt-patch-missing-description
+  * package descriptions have been reviewed by debian-i10n-english
+  * fixing dependencies - thanks to puiparts:
+    - quassel-client: phonon
+    - quassel: phonon
+    - quassel-kde4: kdebase-runtime, kdelibs5
+    - quassel-client-kde4: kdebase-runtime, kdelibs5
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Mon, 01 Feb 2010 23:41:05 +0100
+
+quassel (0.5.1-3) unstable; urgency=low
+
+  * Conflict dependency added between quassel-data and quassel-data-
+    kde4(closes: #566097)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Thu, 21 Jan 2010 20:36:09 +0100
+
+quassel (0.5.1-2) unstable; urgency=low
+
+  * KDE4 support enabled (closes: #561795)
+    - package quassel-kde4 (monolithic client with KDE) has been added
+    - package quassel-client-kde4 (client with KDE) has been added
+    - package quassel-data-kde4 (data files) has been added
+
+  * switch from cdbs to debhelper - basic idea taken from the ubuntu package
+    thanks guys
+  * quilt is used as patch system now
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Thu, 11 Jan 2010 12:52:45 +0100
+
+quassel (0.5.1-1) unstable; urgency=low
+
+  * New upstream release
+  * dbus-x11 dependency moved to quasselclient & quassel (closes: #552061)
+  * remove deprecated usage of argument -datadir (closes: #552373)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Sun, 22 Nov 2009 23:44:04 +0100
+
+quassel (0.5.0-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Thu, 22 Oct 2009 22:19:05 +0200
+
+quassel (0.5.0~rc2-1) experimental; urgency=low
+
+  * New upstream release (rc2)
+  * Make puiparts happy (closes: #538182)
+  * manageusers.py added (closes: #549296)
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Mon, 05 Oct 2009 23:13:06 +0200
+
+quassel (0.4.2-1) unstable; urgency=low
+
+  * New upstream release
+  * watch file looks to the *.tar.bz2 directly
+    no longer scanning the html page
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Thu, 28 May 2009 21:42:24 +0200
+
+quassel (0.4.1-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Thomas Mueller <thomas.mueller@tmit.eu>  Sun, 29 Mar 2009 12:51:42 +0200
+
+quassel (0.4.0-1) unstable; urgency=low
+
+  * New upstream release
+  * repackaging no longer necessary, because svgz of oxygen icons have been
+    added to the source tarball:
+    - debian/repack.sh removed
+    - debian/README.source removed
+    - debian/watch adjusted
+    - debian/rules: get-orig-source removed
+  * debian/copyright updated: license for oxygen icons added
+  * debian/quassel-core.logrotate added
+  * debian/patcher/01_default_network_channel.patch added
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Wed, 18 Feb 2009 22:14:23 +0100
+
+quassel (0.3.1+dfsg-3) unstable; urgency=low
+
+  * fixing bug on upgrade (closes: #513677)
+  * 'set -e' removed from ini script
+  * cleanup in quassel-core.postrm
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Wed, 11 Feb 2009 21:14:33 +0100
+
+quassel (0.3.1+dfsg-2) unstable; urgency=low
+
+  * init script added (closes: #513677)
+  * user and group for the daemon added (closes: #513677)
+  * ssl certificate has been added (closes: #511169)
+    All scripts are based on the ubuntu package
+    thanks to Harald Sitter <apachelogger@ubuntu.com>
+  * Version in manpages have been adjusted.
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Mon, 10 Feb 2009 23:13:25 +0100
+
+quassel (0.3.1+dfsg-1) unstable; urgency=low
+
+  * New upstream release
+  * upstream update to 0.3.0.3 (closes: #498283)
+  * upstream update to 0.3.0.1 (closes: #498283)
+  * watch file added - thx to Per Hausen
+  * Downgrade quasselclient's dependency on quasselcore (closes: #503126)
+    The packages quassel-client and quassel-core can be installed separately
+    now.
+    The package quassel is a dummy package, which installs client and core.
+  * Additional package for the monolithic client.
+  * Repackaging orig.tar.gz to remove the oxygen icons. They are no longer
+    needed because we go for the locally installed oxygen icons of the package
+    kde-icons-oxygen.
+  * License for oxygen removed, because it is no longer part of the package.
+  * debian/repack.sh added + bz2 handling
+  * debian/README.source
+  * debian/watch changed to handle repackaging
+  * debian/patches removed - no need to patch anything at the moment
+  * debian/control: dependeny libqt4-sql-sqlite added
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Tue, 08 Jan 2009 01:44:23 +0100
+
+quassel (0.2~rc1-1) unstable; urgency=low
+
+  * download link in copyright changed
+  * manpage warnings removed
+  * update to debian policy 3.8
+  * upstream update to 0.2.0-rc1
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Mon, 07 Jul 2008 20:56:53 +0100
+
+quassel (0.2~beta1-1) unstable; urgency=low
+
+  * svg files for oxygen icons added src/icons/oxygen/scalable
+  * upstream update to 0.2.0-beta1
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Mon, 02 Jun 2008 20:27:28 +0100
+
+quassel (0.2~alpha5-1) unstable; urgency=low
+
+  * svgz files for oxygen icons added src/icons/oxygen/scalable
+  * upstream update to 0.2.0-alpha5
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Mon, 21 Apr 2008 22:20:18 +0100
+
+quassel (0.2~alpha2-3) unstable; urgency=low
+
+  * debian/copyright updated: license for oxygen icons added
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Mon, 24 Mar 2008 20:01:18 +0100
+
+quassel (0.2~alpha2-2) unstable; urgency=low
+
+  * debian/copyright updated
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Wed, 12 Mar 2008 21:48:12 +0100
+
+quassel (0.2~alpha2-1) unstable; urgency=low
+
+  * Debianized
+
+ -- Thomas Mueller <thomas_mueller_ffb@online.de>  Sun, 02 Mar 2008 11:40:43 +0100
+
+quassel (0.2~alpha2-0ubuntu1~hardy1~ppa1) hardy; urgency=low
+
+  * Hardy PPA Build
+
+ -- Harald Sitter <apachelogger@ubuntu.com>  Sat, 01 Mar 2008 21:05:03 +0100
+
+quassel (0.2~alpha2-0ubuntu1) ibex; urgency=low
+
+  * Initial release (LP: #195861)
+
+ -- Harald Sitter <apachelogger@ubuntu.com>  Sat, 23 Feb 2008 14:22:06 +0100
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..3ac542a
--- /dev/null
+++ b/control
@@ -0,0 +1,91 @@
+Source: quassel
+Section: net
+Priority: optional
+Maintainer: Debian KDE Extras Team <pkg-kde-extras@lists.alioth.debian.org>
+Uploaders: Thomas Mueller <thomas.mueller@tmit.eu>,
+           Felix Geyer <fgeyer@debian.org>,
+           Scott Kitterman <scott@kitterman.com>
+Build-Depends: debhelper-compat (= 10),
+               debhelper (>= 10.3~),
+               dh-apparmor,
+               cmake,
+               libqca-qt5-2-dev,
+               zlib1g-dev,
+               qttools5-dev-tools,
+               qttools5-dev,
+               qtscript5-dev,
+               qtmultimedia5-dev,
+               libphonon4qt5-dev,
+               libphonon4qt5experimental-dev,
+               libdbusmenu-qt5-dev,
+               qtwebengine5-dev [amd64 arm64 armhf i386 mipsel],
+               libqt5webkit5-dev [armel hurd-i386 mips mips64el ppc64el s390x],
+               extra-cmake-modules,
+               libkf5textwidgets-dev,
+               libkf5coreaddons-dev,
+               libkf5xmlgui-dev,
+               libkf5notifications-dev,
+               libkf5notifyconfig-dev,
+               libkf5widgetsaddons-dev,
+               libssl-dev
+Homepage: https://www.quassel-irc.org/
+Standards-Version: 4.5.0
+Vcs-Git: https://salsa.debian.org/qt-kde-team/extras/quassel.git
+Vcs-Browser: https://salsa.debian.org/qt-kde-team/extras/quassel
+
+Package: quassel-core
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, libqt5sql5-sqlite, lsb-base (>= 3.2-14), openssl
+Recommends: ca-certificates
+Suggests: libqt5sql5-psql
+Description: distributed IRC client - core component
+ Quassel is a modern, cross-platform, distributed IRC client, meaning that
+ one or more clients can attach to and detach from the central core. It's
+ much like the popular combination of screen and a text-based IRC client
+ such as WeeChat or irssi, but graphical.
+ .
+ This package provides only the core component.
+
+Package: quassel-client
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, quassel-data (= ${source:Version}), default-dbus-session-bus | dbus-session-bus
+Breaks: quassel-client-kde4 (<< 0.12.2)
+Replaces: quassel-client-kde4 (<< 0.12.2)
+Description: distributed IRC client - client component
+ Quassel is a modern, cross-platform, distributed IRC client, meaning that
+ one or more clients can attach to and detach from the central core. It's
+ much like the popular combination of screen and a text-based IRC client
+ such as WeeChat or irssi, but graphical.
+ .
+ This package provides only the client component.
+
+Package: quassel
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5sql5-sqlite, quassel-data (= ${source:Version}), default-dbus-session-bus | dbus-session-bus
+Recommends: ca-certificates
+Breaks: quassel-kde4 (<< 0.12.2)
+Replaces: quassel-kde4 (<< 0.12.2)
+Description: distributed IRC client - monolithic core+client
+ Quassel is a modern, cross-platform, distributed IRC client, meaning that
+ one or more clients can attach to and detach from the central core. It's
+ much like the popular combination of screen and a text-based IRC client
+ such as WeeChat or irssi, but graphical.
+ .
+ This package provides the monolithic client. It contains both core and
+ client and can be used like a traditional IRC client, without requiring an
+ external core.
+
+Package: quassel-data
+Architecture: all
+Depends: ${misc:Depends}
+Recommends: breeze-icon-theme | oxygen-icon-theme
+Suggests: inxi
+Conflicts: quassel-data-kde4
+Multi-Arch: foreign
+Description: distributed IRC client - shared data
+ Quassel is a modern, cross-platform, distributed IRC client, meaning that
+ one or more clients can attach to and detach from the central core. It's
+ much like the popular combination of screen and a text-based IRC client
+ such as WeeChat or irssi, but graphical.
+ .
+ This package provides files used by the Quassel client packages.
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..f96cd2c
--- /dev/null
+++ b/copyright
@@ -0,0 +1,592 @@
+This package was debianized by Harald Sitter <apachelogger@ubuntu.com> on
+Sat, 23 Feb 2008 14:22:06 +0100.
+
+The current Debian maintainer is Thomas Mueller <thomas.mueller@tmit.eu>
+
+It was downloaded from
+http://www.quassel-irc.org/downloads
+
+Upstream Author:
+
+    Manuel Nickschas <sput@quassel-irc.org>
+    Marcus Eggenberger <EgS@quassel-irc.org>
+    Alexander von Renteln <phon@quassel-irc.org>
+
+Files/*
+Copyright:
+
+    Copyright (C) 2005-2019 by the Quassel Project devel@quassel-irc.org
+
+    This package is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) version 3.
+
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this package; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+Files src/qtui/snorenotificationbackend.*
+
+    Copyright (C) 2011-2019 by Hannah von Reth
+
+    This package is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) version 3.
+
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this package; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+
+On Debian systems, the complete text of the GNU General Public License
+can be found in `/usr/share/common-licenses/GPL-2' and
+`/usr/share/common-licenses/GPL-3'.
+
+The Debian packaging is Â© 2008, Harald Sitter <apachelogger@ubuntu.com> and
+is licensed under the GPL version 2, or (at your option)
+any later version, see `/usr/share/common-licenses/GPL-2'.
+
+
+For 3rdparty/sha512/*
+
+    Copyright (C) 2006-2014, ARM Limited, All Rights Reserved
+
+For data/scripts/mpris:
+    Copyright (C) 2009 by Sebastian Goth
+
+For the 3rdparty/icons/* components:
+
+For 3rdparty/icons/breeze*
+    Copyright (C) 2014 Uri Herrera <uri_herrera@nitrux.in> and others
+
+    You may copy it under the GNU Library General Public License
+    (with following clarification)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU Library General Public License
+can be found in `/usr/share/common-licenses/LGPL'.
+
+For 3rdparty/icons/oxygen/*
+
+The Oxygen Icon Theme
+    Copyright Â© 2007 David Vignoni <david@icon-king.com>
+    Copyright Â© 2007 Johann Ollivier Lapeyre <johann@oxygen-icons.org>
+    Copyright Â© 2007 Kenneth Wimer <kwwii@bootsplash.org>
+    Copyright Â© 2007 Nuno Fernades Pinheiro <nf.pinheiro@gmail.com>
+    Copyright Â© 2007 Riccardo Iaconelli <riccardo@oxygen-icons.org>
+    Copyright Â© 2007 David Miller <miller@oxygen-icons.org>
+
+    and others
+
+You may copy it under the Creative Common Attribution-ShareAlike 3.0
+license, as found here:
+
+    http://creativecommons.org/licenses/by-sa/3.0/
+
+or the GNU Library General Public License (with following clarification).
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
+
+Clarification:
+
+  The GNU Lesser General Public License or LGPL is written for
+  software libraries in the first place. We expressly want the LGPL to
+  be valid for this artwork library too.
+
+  KDE Oxygen theme icons is a special kind of software library, it is an
+  artwork library, it's elements can be used in a Graphical User Interface, or
+  GUI.
+
+  Source code, for this library means:
+   - where they exist, SVG;
+   - otherwise, if applicable, the multi-layered formats xcf or psd, or
+  otherwise png.
+
+  The LGPL in some sections obliges you to make the files carry
+  notices. With images this is in some cases impossible or hardly useful.
+
+  With this library a notice is placed at a prominent place in the directory
+  containing the elements. You may follow this practice.
+
+  The exception in section 6 of the GNU Lesser General Public License covers
+  the use of elements of this art library in a GUI.
+
+  kde-artists [at] kde.org
+
+
+Attribution-ShareAlike 3.0 Unported
+
+    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES.
+DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE
+COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS
+USE.
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC
+LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE
+LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
+PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE
+TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE
+LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH
+TERMS AND CONDITIONS.
+
+1. Definitions
+
+   1. "Adaptation" means a work based upon the Work, or upon the Work and other
+pre-existing works, such as a translation, adaptation, derivative work, arrangement of
+music or other alterations of a literary or artistic work, or phonogram or performance and
+includes cinematographic adaptations or any other form in which the Work may be recast,
+transformed, or adapted including in any form recognizably derived from the original,
+except that a work that constitutes a Collection will not be considered an Adaptation for
+the purpose of this License. For the avoidance of doubt, where the Work is a musical work,
+performance or phonogram, the synchronization of the Work in timed-relation with a moving
+image ("synching") will be considered an Adaptation for the purpose of this License.
+   2. "Collection" means a collection of literary or artistic works, such as encyclopedias
+and anthologies, or performances, phonograms or broadcasts, or other works or subject
+matter other than works listed in Section 1(f) below, which, by reason of the selection and
+arrangement of their contents, constitute intellectual creations, in which the Work is
+included in its entirety in unmodified form along with one or more other contributions,
+each constituting separate and independent works in themselves, which together are
+assembled into a collective whole. A work that constitutes a Collection will not be
+considered an Adaptation (as defined below) for the purposes of this License.
+   3. "Creative Commons Compatible License" means a license that is listed at
+http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as
+being essentially equivalent to this License, including, at a minimum, because that
+license: (i) contains terms that have the same purpose, meaning and effect as the License
+Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of
+works made available under that license under this License or a Creative Commons
+jurisdiction license with the same License Elements as this License.
+   4. "Distribute" means to make available to the public the original and copies of the
+Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+   5. "License Elements" means the following high-level license attributes as selected by
+Licensor and indicated in the title of this License: Attribution, ShareAlike.
+   6. "Licensor" means the individual, individuals, entity or entities that offer(s) the
+Work under the terms of this License.
+   7. "Original Author" means, in the case of a literary or artistic work, the individual,
+individuals, entity or entities who created the Work or if no individual or entity can be
+identified, the publisher; and in addition (i) in the case of a performance the actors,
+singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in,
+interpret or otherwise perform literary or artistic works or expressions of folklore; (ii)
+in the case of a phonogram the producer being the person or legal entity who first fixes
+the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the
+organization that transmits the broadcast.
+   8. "Work" means the literary and/or artistic work offered under the terms of this
+License including without limitation any production in the literary, scientific and
+artistic domain, whatever may be the mode or form of its expression including digital form,
+such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the
+same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in
+dumb show; a musical composition with or without words; a cinematographic work to which are
+assimilated works expressed by a process analogous to cinematography; a work of drawing,
+painting, architecture, sculpture, engraving or lithography; a photographic work to which
+are assimilated works expressed by a process analogous to photography; a work of applied
+art; an illustration, map, plan, sketch or three-dimensional work relative to geography,
+topography, architecture or science; a performance; a broadcast; a phonogram; a compilation
+of data to the extent it is protected as a copyrightable work; or a work performed by a
+variety or circus performer to the extent it is not otherwise considered a literary or
+artistic work.
+   9. "You" means an individual or entity exercising rights under this License who has not
+previously violated the terms of this License with respect to the Work, or who has received
+express permission from the Licensor to exercise rights under this License despite a
+previous violation.
+  10. "Publicly Perform" means to perform public recitations of the Work and to communicate
+to the public those public recitations, by any means or process, including by wire or
+wireless means or public digital performances; to make available to the public Works in
+such a way that members of the public may access these Works from a place and at a place
+individually chosen by them; to perform the Work to the public by any means or process and
+the communication to the public of the performances of the Work, including by public
+digital performance; to broadcast and rebroadcast the Work by any means including signs,
+sounds or images.
+  11. "Reproduce" means to make copies of the Work by any means including without
+limitation by sound or visual recordings and the right of fixation and reproducing
+fixations of the Work, including storage of a protected performance or phonogram in digital
+form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict
+any uses free from copyright or rights arising from limitations or exceptions that are
+provided for in connection with the copyright protection under copyright law or other
+applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby
+grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the
+applicable copyright) license to exercise the rights in the Work as stated below:
+
+   1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to
+Reproduce the Work as incorporated in the Collections;
+   2. to create and Reproduce Adaptations provided that any such Adaptation, including any
+translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise
+identify that changes were made to the original Work. For example, a translation could be
+marked "The original work was translated from English to Spanish," or a modification could
+indicate "The original work has been modified.";
+   3. to Distribute and Publicly Perform the Work including as incorporated in Collections;
+and,
+   4. to Distribute and Publicly Perform Adaptations.
+   5.
+
+      For the avoidance of doubt:
+         1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the
+right to collect royalties through any statutory or compulsory licensing scheme cannot be
+waived, the Licensor reserves the exclusive right to collect such royalties for any
+exercise by You of the rights granted under this License;
+         2. Waivable Compulsory License Schemes. In those jurisdictions in which the right
+to collect royalties through any statutory or compulsory licensing scheme can be waived,
+the Licensor waives the exclusive right to collect such royalties for any exercise by You
+of the rights granted under this License; and,
+         3. Voluntary License Schemes. The Licensor waives the right to collect royalties,
+whether individually or, in the event that the Licensor is a member of a collecting society
+that administers voluntary licensing schemes, via that society, from any exercise by You of
+the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now known or hereafter
+devised. The above rights include the right to make such modifications as are technically
+necessary to exercise the rights in other media and formats. Subject to Section 8(f), all
+rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and
+limited by the following restrictions:
+
+   1. You may Distribute or Publicly Perform the Work only under the terms of this License.
+You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with
+every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any
+terms on the Work that restrict the terms of this License or the ability of the recipient
+of the Work to exercise the rights granted to that recipient under the terms of the
+License. You may not sublicense the Work. You must keep intact all notices that refer to
+this License and to the disclaimer of warranties with every copy of the Work You Distribute
+or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose
+any effective technological measures on the Work that restrict the ability of a recipient
+of the Work from You to exercise the rights granted to that recipient under the terms of
+the License. This Section 4(a) applies to the Work as incorporated in a Collection, but
+this does not require the Collection apart from the Work itself to be made subject to the
+terms of this License. If You create a Collection, upon notice from any Licensor You must,
+to the extent practicable, remove from the Collection any credit as required by Section
+4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to
+the extent practicable, remove from the Adaptation any credit as required by Section 4(c),
+as requested.
+   2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i)
+this License; (ii) a later version of this License with the same License Elements as this
+License; (iii) a Creative Commons jurisdiction license (either this or a later license
+version) that contains the same License Elements as this License (e.g.,
+Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license
+the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms
+of that license. If you license the Adaptation under the terms of any of the licenses
+mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms
+of the Applicable License generally and the following provisions: (I) You must include a
+copy of, or the URI for, the Applicable License with every copy of each Adaptation You
+Distribute or Publicly Perform; (II) You may not offer or impose any terms on the
+Adaptation that restrict the terms of the Applicable License or the ability of the
+recipient of the Adaptation to exercise the rights granted to that recipient under the
+terms of the Applicable License; (III) You must keep intact all notices that refer to the
+Applicable License and to the disclaimer of warranties with every copy of the Work as
+included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or
+Publicly Perform the Adaptation, You may not impose any effective technological measures on
+the Adaptation that restrict the ability of a recipient of the Adaptation from You to
+exercise the rights granted to that recipient under the terms of the Applicable License.
+This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does
+not require the Collection apart from the Adaptation itself to be made subject to the terms
+of the Applicable License.
+   3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections,
+You must, unless a request has been made pursuant to Section 4(a), keep intact all
+copyright notices for the Work and provide, reasonable to the medium or means You are
+utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied,
+and/or if the Original Author and/or Licensor designate another party or parties (e.g., a
+sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in
+Licensor's copyright notice, terms of service or by other reasonable means, the name of
+such party or parties; (ii) the title of the Work if supplied; (iii) to the extent
+reasonably practicable, the URI, if any, that Licensor specifies to be associated with the
+Work, unless such URI does not refer to the copyright notice or licensing information for
+the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit
+identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by
+Original Author," or "Screenplay based on original Work by Original Author"). The credit
+required by this Section 4(c) may be implemented in any reasonable manner; provided,
+however, that in the case of a Adaptation or Collection, at a minimum such credit will
+appear, if a credit for all contributing authors of the Adaptation or Collection appears,
+then as part of these credits and in a manner at least as prominent as the credits for the
+other contributing authors. For the avoidance of doubt, You may only use the credit
+required by this Section for the purpose of attribution in the manner set out above and, by
+exercising Your rights under this License, You may not implicitly or explicitly assert or
+imply any connection with, sponsorship or endorsement by the Original Author, Licensor
+and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the
+separate, express prior written permission of the Original Author, Licensor and/or
+Attribution Parties.
+   4. Except as otherwise agreed in writing by the Licensor or as may be otherwise
+permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work
+either by itself or as part of any Adaptations or Collections, You must not distort,
+mutilate, modify or take other derogatory action in relation to the Work which would be
+prejudicial to the Original Author's honor or reputation. Licensor agrees that in those
+jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of
+this License (the right to make Adaptations) would be deemed to be a distortion,
+mutilation, modification or other derogatory action prejudicial to the Original Author's
+honor and reputation, the Licensor will waive or not assert, as appropriate, this Section,
+to the fullest extent permitted by the applicable national law, to enable You to reasonably
+exercise Your right under Section 3(b) of this License (right to make Adaptations) but not
+otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK
+AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS,
+IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE,
+MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
+LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
+DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH
+EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT
+WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL,
+CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE
+WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+   1. This License and the rights granted hereunder will terminate automatically upon any
+breach by You of the terms of this License. Individuals or entities who have received
+Adaptations or Collections from You under this License, however, will not have their
+licenses terminated provided such individuals or entities remain in full compliance with
+those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+   2. Subject to the above terms and conditions, the license granted here is perpetual (for
+the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor
+reserves the right to release the Work under different license terms or to stop
+distributing the Work at any time; provided, however that any such election will not serve
+to withdraw this License (or any other license that has been, or is required to be, granted
+under the terms of this License), and this License will continue in full force and effect
+unless terminated as stated above.
+
+8. Miscellaneous
+
+   1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor
+offers to the recipient a license to the Work on the same terms and conditions as the
+license granted to You under this License.
+   2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the
+recipient a license to the original Work on the same terms and conditions as the license
+granted to You under this License.
+   3. If any provision of this License is invalid or unenforceable under applicable law, it
+shall not affect the validity or enforceability of the remainder of the terms of this
+License, and without further action by the parties to this agreement, such provision shall
+be reformed to the minimum extent necessary to make such provision valid and enforceable.
+   4. No term or provision of this License shall be deemed waived and no breach consented
+to unless such waiver or consent shall be in writing and signed by the party to be charged
+with such waiver or consent.
+   5. This License constitutes the entire agreement between the parties with respect to the
+Work licensed here. There are no understandings, agreements or representations with respect
+to the Work not specified here. Licensor shall not be bound by any additional provisions
+that may appear in any communication from You. This License may not be modified without the
+mutual written agreement of the Licensor and You.
+   6. The rights granted under, and the subject matter referenced, in this License were
+drafted utilizing the terminology of the Berne Convention for the Protection of Literary
+and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the
+WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the
+Universal Copyright Convention (as revised on July 24, 1971). These rights and subject
+matter take effect in the relevant jurisdiction in which the License terms are sought to be
+enforced according to the corresponding provisions of the implementation of those treaty
+provisions in the applicable national law. If the standard suite of rights granted under
+applicable copyright law includes additional rights not granted under this License, such
+additional rights are deemed to be included in the License; this License is not intended to
+restrict the license of any rights under applicable law.
+
+    Creative Commons Notice
+
+    Creative Commons is not a party to this License, and makes no warranty whatsoever in
+connection with the Work. Creative Commons will not be liable to You or any party on any
+legal theory for any damages whatsoever, including without limitation any general, special,
+incidental or consequential damages arising in connection to this license. Notwithstanding
+the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the
+Licensor hereunder, it shall have all rights and obligations of Licensor.
+
+    Except for the limited purpose of indicating to the public that the Work is licensed
+under the CCPL, Creative Commons does not authorize the use by either party of the
+trademark "Creative Commons" or any related trademark or logo of Creative Commons without
+the prior written consent of Creative Commons. Any permitted use will be in compliance with
+Creative Commons' then-current trademark usage guidelines, as may be published on its
+website or otherwise made available upon request from time to time. For the avoidance of
+doubt, this trademark restriction does not form part of the License.
+
+    Creative Commons may be contacted at http://creativecommons.org/.
+
+For files 3rdparty/miniz/*
+
+/*
+  This is free and unencumbered software released into the public domain.
+
+  Anyone is free to copy, modify, publish, use, compile, sell, or
+  distribute this software, either in source code form or as a compiled
+  binary, for any purpose, commercial or non-commercial, and by any
+  means.
+
+  In jurisdictions that recognize copyright laws, the author or authors
+  of this software dedicate any and all copyright interest in the
+  software to the public domain. We make this dedication for the benefit
+  of the public at large and to the detriment of our heirs and
+  successors. We intend this dedication to be an overt act of
+  relinquishment in perpetuity of all present and future rights to this
+  software under copyright law.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+  OTHER DEALINGS IN THE SOFTWARE.
+
+  For more information, please refer to <http://unlicense.org/>
+*/
+
+
+For files cmake/*
+
+cmake/FindQCA2-QT5.cmake:
+cmake/FindQCA2.cmake:
+    Copyright (c) 2006, Michael Larouche, <michael.larouche@kdemail.net>
+
+cmake/FindPhonon.cmake:
+    Copyright (c) 2008, Matthias Kretz <kretz@kde.org>
+
+cmake/FindLibraryWithDebug.cmake:
+    Copyright (c) 2007, Christian Ehrlicher, <ch.ehrlicher@gmx.de>
+
+cmake/GetGitRevisionDescription.cmake:
+    Copyright Iowa State University 2009-2010.
+
+This is the standard license for CMake scripts. Please note that some
+of the CMake scripts we bundle come with their own license as indicated
+in the file, in which case that one applies.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+For cmake/GetGitRevisionDescription.cmake.in:
+    Copyright Iowa State University 2009-2010.
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+For data/stylesheets/LinuxDolt-bluestheme.qss:
+    Copyright (C) Drew Patridge 2009-2010 <slicersv@gmail.com>
+For data/stylesheets/jussi01-darktheme.qss:
+    Copyright (C) Jussi Schultink 2009
+
+    This package is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; version 2 of the License.
+
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this package; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General Public License
+can be found in `/usr/share/common-licenses/GPL-2'.
+
+For data/scripts/inxi:
+## infobash: Copyright (C) 2005-2007  Michiel de Boer aka locsmif
+## inxi: Copyright (C) 2008-2018 Harald Hope
+##       Additional features (C) Scott Rogers - kde, cpu info
+## Further fixes (listed as known): Horst Tritremmel <hjt at sidux.com>
+## Steven Barrett (aka: damentz) - usb audio patch; swap percent used patch
+## Jarett.Stevens - dmidecode -M patch for older systems with the /sys
+##
+## License: GNU GPL v3 or greater
+
+    This package is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; version 3 of the License.
+
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this package; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General Public License
+can be found in `/usr/share/common-licenses/GPL-3'.
+
diff --git a/manpages/quassel.1 b/manpages/quassel.1
new file mode 100644 (file)
index 0000000..766b4f5
--- /dev/null
@@ -0,0 +1,207 @@
+.TH "QUASSEL" "1" "0.13.1" "Quassel IRC Team, Internet." ""
+.SH "NAME" 
+quassel \(em a modern, cross-platform and distributed IRC client
+.SH "SYNPOSIS"
+\fBquassel\fR [\fIOPTION\fR]...
+.
+.SH "DESCRIPTION"
+.B Quassel IRC
+is a modern, cross-platform, distributed IRC client, meaning that one
+(or multiple) client(s) can attach to and detach from a central core -- much
+like the popular combination of screen and a text-based IRC client such as
+WeeChat, but graphical.
+.PP
+\fBquassel\fR provides a standalone IRC client experience, integrating the core
+and client into a single program. To connect to and manage a running
+\fBquasselcore\fR, use the \fBquasselclient\fR client program.
+.
+.SH "COMMON OPTIONS"
+.TP
+\fB\-c\fR, \fB\-\-configdir\fR=\fICONFIGDIR\fR
+Specify the directory holding the configuration files, the SQLite database with
+chat logs, and the SSL/TLS certificate.
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+Enable extra debugging output.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Show help message.
+.TP
+\fB\-L\fR, \fB\-\-loglevel\fR=\fILOGLEVEL\fR
+Set the logging level to LOGLEVEL: Debug, Info, Warning, Error. Default is:
+Info
+.TP
+\fB\-l\fR, \fB\-\-logfile\fR=\fILOGFILE\fR
+Log to a file.
+.TP
+\fB\-\-syslog\fR
+Log to syslog.
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+Display version information.
+.
+.SH "CLIENT OPTIONS"
+.TP
+\fB\-\-debugbufferswitches\fR
+Enables debugging for bufferswitches.
+.TP
+\fB\-\-debugmodel\fR
+Enables debugging for models.
+.TP
+\fB\-\-hidewindow\fR
+Start the client minimized to the system tray.
+.TP
+\fB\-\-icontheme\fR=\fITHEME\fR
+Override the system icon theme. 'breeze' is recommended. This may also be
+configured in the client settings.
+.TP
+\fB\-\-qss\fR=\fIQSS\fR
+Load a custom application stylesheet.
+.
+.SH "INTERNAL CORE OPTIONS"
+.B NOTE:
+These options should not need modified in most cases. Running a separate
+\fBquasselcore\fR is the recommended way to allow multiple clients to connect
+to a core.
+.
+.TP
+\fB\-\-add\-user\fR
+Starts an interactive session to add a new core user
+.TP
+\fB\-\-change\-userpass\fR=\fIUSERNAME\fR
+Starts an interactive session to change the password of the user identified by
+USERNAME.
+.TP
+\fB\-\-config\-from\-environment\fR
+Load configuration from environment variables, ignoring the configuration file.
+See the section on \fBENVIRONMENT VARIABLES\fR.
+.TP
+\fB\-\-debug-irc\fR
+Enable logging of all raw IRC messages to debug log, \fBincluding passwords!\fR
+In most cases you should also set \fB--loglevel Debug\fR.
+.TP
+\fB\-\-debug\-irc\-id\fR=\fIDATABASENETWORKID\fR
+Limit raw IRC logging to this network ID. Implies \fB\-\-debug-irc\fR.
+.TP
+\fB\-\-ident\-daemon\fR
+Enable internal ident daemon.
+.TP
+\fB\-\-ident\-listen\fR=\fIIDENTLISTEN\fR
+The address(es) quasselcore will listen on for ident requests. Same format as
+\fB\-\-listen\fR. Only meaningful with \fB\-\-ident\-daemon\fR. Default is:
+::1,127.0.0.1 (only localhost)
+.TP
+\fB\-\-ident\-port\fR=\fIIDENTPORT\fR
+The port the quasselcore will listen at for ident requests. Only meaningful
+with \fB\-\-ident\-daemon\fR. Default is: 10113
+.TP
+\fB\-\-listen\fR=\fILISTEN\fR
+The address(es) quasselcore will listen on when \fB\-\-port\fR is specified.
+Default is: ::,0.0.0.0 (all addresses)
+.TP
+\fB\-n\fR, \fB\-\-norestore\fR
+Don't restore last core's state, such as previously connected networks.
+.TP
+\fB\-\-oidentd\fR
+Enable oidentd integration. In most cases you should also enable
+\fB\-\-strict-ident\fR.
+.TP
+\fB\-\-oidentd\-conffile\fR=\fIOIDENTCONF\fR
+Set path to oidentd configuration file.
+.TP
+\fB\-p\fR, \fB\-\-port\fR=\fIPORT\fR
+The port the internal quasselcore will listen at. If not specified, the
+internal core will not accept connections from other clients.
+.TP
+\fB\-\-require\-ssl\fR
+Require SSL for remote (non-loopback) client connections.
+.TP
+\fB\-\-select\-authenticator\fR=\fIAUTHENTICATOR\fR
+Starts an interactive session to switch your current user authentication
+backend to the new one.
+.TP
+\fB\-\-select\-backend\fR=\fIBACKEND\fR
+Starts an interactive session to switch your current storage backend to the new
+one. Attempts a merge if the new backend is uninitialized and the old backend
+supports migration, otherwise prompts for new user credentials.
+.TP
+\fB\-\-ssl\-cert\fR=\fISSLCERTFILE\fR
+Specify the path to the SSL certificate. Reloaded when quasselcore is sent a
+SIGHUP. Default is: CONFIGDIR/quasselCert.pem
+.TP
+\fB\-\-ssl\-key\fR=\fISSLKEYFILE\fR
+Specify the path to the SSL key. Reloaded when quasselcore is sent a SIGHUP.
+Only needed if not combined with the SSL certificate.
+.TP
+\fB\-\-strict\-ident\fR
+Use users' quasselcore username as ident reply. Ignores each user's configured
+ident setting.  Useful for multi-user quasselcores connecting to IRC networks
+that require a fixed identifier for each user.
+.
+.SH "ENVIRONMENT"
+When \fB\-\-config\-from\-environment\fR is specified, the quasselcore will use
+the following environment variables instead of the configuration file. This may
+be useful for container setups or automated deployment.
+.
+.TP
+\fBAUTH_AUTHENTICATOR\fR
+Specifies the selected user authentication backend. See
+\fB\-\-select\-authenticator\fR.
+.TP
+\fBAUTH_LDAP_BASE_DN\fR
+Specifies the LDAP authenticator base DN.
+.TP
+\fBAUTH_LDAP_BIND_DN\fR
+Specifies the LDAP authenticator bind DN.
+.TP
+\fBAUTH_LDAP_BIND_PASSWORD\fR
+Specifies the LDAP authenticator bind password.
+.TP
+\fBAUTH_LDAP_FILTER\fR
+Specifies the LDAP authenticator filter.
+.TP
+\fBAUTH_LDAP_HOSTNAME\fR
+Specifies the LDAP authenticator connection hostname.
+.TP
+\fBAUTH_LDAP_PORT\fR
+Specifies the LDAP authenticator connection port.
+.TP
+\fBAUTH_LDAP_UID_ATTRIBUTE\fR
+Specifies the LDAP authenticator UID attribute.
+.TP
+\fBDB_BACKEND\fR
+Specifies the selected database backend. See \fB\-\-select\-backend\fR.
+.TP
+\fBDB_PGSQL_DATABASE\fR
+Specifies the Postgres connection database name.
+.TP
+\fBDB_PGSQL_HOSTNAME\fR
+Specifies the Postgres connection hostname.
+.TP
+\fBDB_PGSQL_USERNAME\fR
+Specifies the Postgres connection username.
+.TP
+\fBDB_PGSQL_PASSWORD\fR
+Specifies the Postgres connection user password.
+.TP
+\fBDB_PGSQL_PORT\fR
+Specifies the Postgres connection port.
+.
+.SH FILES
+.
+.TP
+\fI$HOME/.config/quassel-irc.org\fR
+Configuration files, SQLite database with chat logs, and the SSL/TLS
+certificate. To override, see \fB\-\-configdir\fR.
+.
+.SH AUTHORS
+The full list of Quassel IRC authors and contributors may be seen in the
+client's About window.
+.PP
+This manual page was written by Thomas Mueller
+<thomas.mueller@tmit.eu> and updated by Shane Synan
+<digitalcircuit36939+deb@gmail.com>, for the Debian GNU/Linux
+system (but may be used by others).  Permission is 
+granted to copy, distribute and/or modify this document under 
+the terms of the GNU General Public License 
+version 2 or any later version published by the Free Software Foundation.
diff --git a/manpages/quasselclient.1 b/manpages/quasselclient.1
new file mode 100644 (file)
index 0000000..6cdbcad
--- /dev/null
@@ -0,0 +1,78 @@
+.TH "QUASSELCLIENT" "1" "0.13.1" "Quassel IRC Team, Internet." ""
+.SH "NAME" 
+quasselclient \(em GUI of the Quassel IRC client, client only
+.SH "SYNPOSIS"
+\fBquasselclient\fR [\fIOPTION\fR]...
+.
+.SH "DESCRIPTION"
+.B Quassel IRC
+is a modern, cross-platform, distributed IRC client, meaning that one
+(or multiple) client(s) can attach to and detach from a central core -- much
+like the popular combination of screen and a text-based IRC client such as
+WeeChat, but graphical.
+.PP
+\fBquasselclient\fR connects to and manages a running \fBquasselcore\fR and
+will not work on its own. For a standalone IRC client experience, use the
+\fBquassel\fR monolithic program.
+.
+.SH "OPTIONS"
+.TP
+\fB\-c\fR, \fB\-\-configdir\fR=\fICONFIGDIR\fR
+Specify the directory holding the client configuration.
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+Enable extra debugging output.
+.TP
+\fB\-\-debugbufferswitches\fR
+Enables debugging for bufferswitches.
+.TP
+\fB\-\-debugmodel\fR
+Enables debugging for models.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Show help message.
+.TP
+\fB\-\-hidewindow\fR
+Start the client minimized to the system tray.
+.TP
+\fB\-\-icontheme\fR=\fITHEME\fR
+Override the system icon theme. 'breeze' is recommended. This may also be
+configured in the client settings.
+.TP
+\fB\-L\fR, \fB\-\-loglevel\fR=\fILOGLEVEL\fR
+Set the logging level to LOGLEVEL: Debug, Info, Warning, Error. Default is:
+Info
+.TP
+\fB\-l\fR, \fB\-\-logfile\fR=\fILOGFILE\fR
+Log to a file.
+.TP
+\fB\-\-qss\fR=\fIQSS\fR
+Load a custom application stylesheet.
+.TP
+\fB\-\-syslog\fR
+Log to syslog.
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+Display version information.
+.
+.SH FILES
+.
+.TP
+\fI$HOME/.config/quassel-irc.org\fR
+Configuration files. To override, see \fB\-\-configdir\fR.
+.
+.B NOTE:
+Chat logs are maintained by the remote Quassel core and requested as needed.
+They are not saved locally.
+.
+.SH AUTHORS
+The full list of Quassel IRC authors and contributors may be seen in the
+client's About window.
+.PP
+This manual page was written by Thomas Mueller
+<thomas.mueller@tmit.eu> and updated by Shane Synan
+<digitalcircuit36939+deb@gmail.com>, for the Debian GNU/Linux
+system (but may be used by others).  Permission is 
+granted to copy, distribute and/or modify this document under 
+the terms of the GNU General Public License 
+version 2 or any later version published by the Free Software Foundation.
diff --git a/manpages/quasselcore.1 b/manpages/quasselcore.1
new file mode 100644 (file)
index 0000000..efa0860
--- /dev/null
@@ -0,0 +1,199 @@
+.TH "QUASSELCORE" "1" "0.13.1" "Quassel IRC Team, Internet." ""
+.SH "NAME" 
+quasselcore \(em the daemon process for the Quassel IRC client
+.SH "SYNPOSIS" 
+\fBquasselcore\fR [\fIOPTION\fR]...
+.
+.SH "DESCRIPTION"
+.B Quassel IRC
+is a modern, cross-platform, distributed IRC client, meaning that one
+(or multiple) client(s) can attach to and detach from a central core -- much
+like the popular combination of screen and a text-based IRC client such as
+WeeChat, but graphical.
+.PP
+\fBquasselcore\fR provides the daemon which connects to IRC networks, allowing
+any number of Quassel clients to connect, including the official desktop
+client, the \fBquasselclient\fR program.
+.
+.SH "OPTIONS"
+.TP
+\fB\-\-add\-user\fR
+Starts an interactive session to add a new core user
+.TP
+\fB\-\-change\-userpass\fR=\fIUSERNAME\fR
+Starts an interactive session to change the password of the user identified by
+USERNAME.
+.TP
+\fB\-c\fR, \fB\-\-configdir\fR=\fICONFIGDIR\fR
+Specify the directory holding the configuration files, the SQLite database with
+chat logs (unless another database backend is selected), and the SSL/TLS
+certificate.
+.TP
+\fB\-\-config\-from\-environment\fR
+Load configuration from environment variables, ignoring the configuration file.
+See the section on \fBENVIRONMENT VARIABLES\fR.
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+Enable extra debugging output. Requires setting \fB\-\-loglevel=Debug\fR.
+.TP
+\fB\-\-debug-irc\fR
+Enable logging of all raw IRC messages to debug log, \fBincluding passwords!\fR
+In most cases you should also set \fB--loglevel Debug\fR.
+.TP
+\fB\-\-debug\-irc\-id\fR=\fIDATABASENETWORKID\fR
+Limit raw IRC logging to this network ID. Implies \fB\-\-debug-irc\fR.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Show help message.
+.TP
+\fB\-\-ident\-daemon\fR
+Enable internal ident daemon.
+.TP
+\fB\-\-ident\-listen\fR=\fIIDENTLISTEN\fR
+The address(es) quasselcore will listen on for ident requests. Same format as
+\fB\-\-listen\fR. Only meaningful with \fB\-\-ident\-daemon\fR. Default is:
+::1,127.0.0.1 (only localhost)
+.TP
+\fB\-\-ident\-port\fR=\fIIDENTPORT\fR
+The port the quasselcore will listen at for ident requests. Only meaningful
+with \fB\-\-ident\-daemon\fR. Default is: 10113
+.TP
+\fB\-\-listen\fR=\fILISTEN\fR
+The address(es) quasselcore will listen on. Default is: ::,0.0.0.0 (all
+addresses)
+.TP
+\fB\-L\fR, \fB\-\-loglevel\fR=\fILOGLEVEL\fR
+Set the logging level to LOGLEVEL: Debug, Info, Warning, Error. Default is:
+Info
+.TP
+\fB\-l\fR, \fB\-\-logfile\fR=\fILOGFILE\fR
+Log to a file.
+.TP
+\fB\-n\fR, \fB\-\-norestore\fR
+Don't restore last core's state, such as previously connected networks.
+.TP
+\fB\-\-oidentd\fR
+Enable oidentd integration. In most cases you should also enable
+\fB\-\-strict-ident\fR.
+.TP
+\fB\-\-oidentd\-conffile\fR=\fIOIDENTCONF\fR
+Set path to oidentd configuration file.
+.TP
+\fB\-p\fR, \fB\-\-port\fR=\fIPORT\fR
+The port quasselcore will listen at. Default is: 4242
+.TP
+\fB\-\-require\-ssl\fR
+Require SSL for remote (non-loopback) client connections.
+.TP
+\fB\-\-select\-authenticator\fR=\fIAUTHENTICATOR\fR
+Starts an interactive session to switch your current user authentication
+backend to the new one.
+.TP
+\fB\-\-select\-backend\fR=\fIBACKEND\fR
+Starts an interactive session to switch your current storage backend to the new
+one. Attempts a merge if the new backend is uninitialized and the old backend
+supports migration, otherwise prompts for new user credentials.
+.TP
+\fB\-\-ssl\-cert\fR=\fISSLCERTFILE\fR
+Specify the path to the SSL certificate. Reloaded when quasselcore is sent a
+SIGHUP. Default is: CONFIGDIR/quasselCert.pem
+.TP
+\fB\-\-ssl\-key\fR=\fISSLKEYFILE\fR
+Specify the path to the SSL key. Reloaded when quasselcore is sent a SIGHUP.
+Only needed if not combined with the SSL certificate.
+.TP
+\fB\-\-strict\-ident\fR
+Use users' quasselcore username as ident reply. Ignores each user's configured
+ident setting.  Useful for multi-user quasselcores connecting to IRC networks
+that require a fixed identifier for each user.
+.TP
+\fB\-\-syslog\fR
+Log to syslog.
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+Display version information.
+.
+.SH "ENVIRONMENT"
+When \fB\-\-config\-from\-environment\fR is specified, the quasselcore will use
+the following environment variables instead of the configuration file. This may
+be useful for container setups or automated deployment.
+.
+.TP
+\fBAUTH_AUTHENTICATOR\fR
+Specifies the selected user authentication backend. See
+\fB\-\-select\-authenticator\fR.
+.TP
+\fBAUTH_LDAP_BASE_DN\fR
+Specifies the LDAP authenticator base DN.
+.TP
+\fBAUTH_LDAP_BIND_DN\fR
+Specifies the LDAP authenticator bind DN.
+.TP
+\fBAUTH_LDAP_BIND_PASSWORD\fR
+Specifies the LDAP authenticator bind password.
+.TP
+\fBAUTH_LDAP_FILTER\fR
+Specifies the LDAP authenticator filter.
+.TP
+\fBAUTH_LDAP_HOSTNAME\fR
+Specifies the LDAP authenticator connection hostname.
+.TP
+\fBAUTH_LDAP_PORT\fR
+Specifies the LDAP authenticator connection port.
+.TP
+\fBAUTH_LDAP_UID_ATTRIBUTE\fR
+Specifies the LDAP authenticator UID attribute.
+.TP
+\fBDB_BACKEND\fR
+Specifies the selected database backend. See \fB\-\-select\-backend\fR.
+.TP
+\fBDB_PGSQL_DATABASE\fR
+Specifies the Postgres connection database name.
+.TP
+\fBDB_PGSQL_HOSTNAME\fR
+Specifies the Postgres connection hostname.
+.TP
+\fBDB_PGSQL_USERNAME\fR
+Specifies the Postgres connection username.
+.TP
+\fBDB_PGSQL_PASSWORD\fR
+Specifies the Postgres connection user password.
+.TP
+\fBDB_PGSQL_PORT\fR
+Specifies the Postgres connection port.
+.
+.SH FILES
+.
+.TP
+\fI/var/lib/quassel\fR
+Configuration files, the SQLite database with chat logs (unless another
+database backend is selected), and the SSL/TLS certificate. To override, see
+\fB\-\-configdir\fR.
+.TP
+\fI/etc/default/quasselcore\fR
+Additional configuration parameters, including default port and logging level.
+.
+.SH "NOTES"
+In a typical installation, \fBquasselcore\fR runs as the \fIquasselcore\fR
+user, with configuration data stored in \fI/var/lib/quassel\fR.  When manually
+running quasselcore, you should specify the proper user and \fB\-\-configdir\fR
+as follows.
+.PP
+.nf
+.RS 4
+$\ sudo\ \-\-user=quasselcore\ \\
+quasselcore\ \-\-configdir=/var/lib/quassel [\fIOPTIONS\fR]
+.RE
+.fi
+.
+.SH AUTHORS
+The full list of Quassel IRC authors and contributors may be seen in
+quasselclient's About window.
+.PP
+This manual page was written by Thomas Mueller
+<thomas.mueller@tmit.eu> and updated by Shane Synan
+<digitalcircuit36939+deb@gmail.com>, for the Debian GNU/Linux
+system (but may be used by others).  Permission is 
+granted to copy, distribute and/or modify this document under 
+the terms of the GNU General Public License 
+version 2 or any later version published by the Free Software Foundation.
diff --git a/patches/01_default_network_channel.patch b/patches/01_default_network_channel.patch
new file mode 100644 (file)
index 0000000..1acd431
--- /dev/null
@@ -0,0 +1,24 @@
+From: Debian KDE Extras Team <pkg-kde-extras@lists.alioth.debian.org>
+Date: Sun, 2 Dec 2018 15:29:07 -0500
+Subject: 01_default_network_channel
+
+---
+ data/networks.ini | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/data/networks.ini b/data/networks.ini
+index 5f8fa02..873ac4e 100644
+--- a/data/networks.ini
++++ b/data/networks.ini
+@@ -49,3 +49,11 @@ Servers=eu.undernet.org:6667,us.undernet.org:6667,elsene.be.eu.undernet.org:6667
+ [euIRCnet]
+ Servers=irc.euirc.net:+6697,irc.euirc.net:6665
++
++[DebianIRC]
++Default=Yes
++DefaultChannels=#debian
++Servers=irc.debian.org:+6697
++
++Default=Yes
++DefaultChannels=#debian
diff --git a/patches/02_script_interpreter_path.patch b/patches/02_script_interpreter_path.patch
new file mode 100644 (file)
index 0000000..5cbb01b
--- /dev/null
@@ -0,0 +1,20 @@
+Index: quassel/data/scripts/inxi
+===================================================================
+--- quassel.orig/data/scripts/inxi     2018-12-02 15:30:30.586561181 -0500
++++ quassel/data/scripts/inxi  2018-12-03 00:24:30.599106749 -0500
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env perl
++#!/usr/bin/perl
+ ## infobash: Copyright (C) 2005-2007  Michiel de Boer aka locsmif
+ ## inxi: Copyright (C) 2008-2018 Harald Hope
+ ##       Additional features (C) Scott Rogers - kde, cpu info
+Index: quassel/data/scripts/mpris
+===================================================================
+--- quassel.orig/data/scripts/mpris    2018-12-02 15:26:46.362556679 -0500
++++ quassel/data/scripts/mpris 2018-12-03 00:24:18.139106499 -0500
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env perl
++#!/usr/bin/perl
+ ##########################################################################
+ #  Copyright (C) 2009 by Sebastian Goth                                  #
diff --git a/patches/qt514/0001-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch b/patches/qt514/0001-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch
new file mode 100644 (file)
index 0000000..a66ccfb
--- /dev/null
@@ -0,0 +1,40 @@
+From 579e559a6322209df7cd51c34801fecff5fe734b Mon Sep 17 00:00:00 2001
+From: Manuel Nickschas <sputnick@quassel-irc.org>
+Date: Tue, 7 Jan 2020 18:34:54 +0100
+Subject: [PATCH 1/6] common: Disable enum type stream operators for Qt >= 5.14
+Bug: https://bugs.quassel-irc.org/issues/1544
+Bug-Ubuntu: https://bugs.launchpad.net/quassel/+bug/1885436
+Origin: upstream, https://github.com/quassel/quassel/pull/518
+Origin: upstream, https://github.com/quassel/quassel/commit/579e559a6322209df7cd51c34801fecff5fe734b
+
+Starting from version 5.14, Qt provides stream operators for enum
+types, which collide with the ones we ship in types.h. Disable
+Quassel's stream operators when compiling against Qt 5.14 or later.
+
+Add a unit test that ensures that enum serialization honors the width
+of the underlying type.
+---
+ src/common/types.h          |  2 +
+ tests/common/CMakeLists.txt |  2 +
+ tests/common/typestest.cpp  | 79 +++++++++++++++++++++++++++++++++++++
+ 3 files changed, 83 insertions(+)
+ create mode 100644 tests/common/typestest.cpp
+
+--- a/src/common/types.h
++++ b/src/common/types.h
+@@ -140,6 +140,7 @@ Q_DECLARE_METATYPE(QHostAddress)
+ typedef QList<MsgId> MsgIdList;
+ typedef QList<BufferId> BufferIdList;
++#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
+ /**
+  * Catch-all stream serialization operator for enum types.
+  *
+@@ -169,6 +170,7 @@ QDataStream &operator>>(QDataStream &in,
+     value = static_cast<T>(v);
+     return in;
+ }
++#endif
+ // Exceptions
diff --git a/patches/qt514/0002-common-Always-let-QVariant-fromValue-deduce-the-type.patch b/patches/qt514/0002-common-Always-let-QVariant-fromValue-deduce-the-type.patch
new file mode 100644 (file)
index 0000000..f9eafdb
--- /dev/null
@@ -0,0 +1,424 @@
+From 41bf70c263ee0af80ad1850fabe77ffffee188f4 Mon Sep 17 00:00:00 2001
+From: Manuel Nickschas <sputnick@quassel-irc.org>
+Date: Tue, 7 Jan 2020 18:39:48 +0100
+Subject: [PATCH 2/6] common: Always let QVariant::fromValue() deduce the type
+Bug: https://bugs.quassel-irc.org/issues/1544
+Bug-Ubuntu: https://bugs.launchpad.net/quassel/+bug/1885436
+Origin: upstream, https://github.com/quassel/quassel/pull/518
+Origin: upstream, https://github.com/quassel/quassel/commit/41bf70c263ee0af80ad1850fabe77ffffee188f4
+
+In some places, we would explicitly give the type to
+QVariant::fromValue(), forgoing automatic type deduction. This is
+almost always redundant, and in the cases where it is not, the
+input type should be explicitly cast.
+
+Additionally, the implementation of QVariant::fromValue() subtly changed
+in Qt 5.14, leading to compile errors when giving a non-decayed type
+(as we did in SignalProxy::attachSignal()).
+---
+ src/client/coreaccountmodel.cpp                |  2 +-
+ src/client/messagefilter.cpp                   |  2 +-
+ src/client/messagemodel.cpp                    | 10 +++++-----
+ src/client/networkmodel.cpp                    | 18 +++++++++---------
+ src/common/buffersyncer.cpp                    |  8 ++++----
+ src/common/network.cpp                         |  4 ++--
+ src/common/serializers/serializers.cpp         |  2 +-
+ src/common/signalproxy.h                       |  2 +-
+ src/common/types.h                             | 10 +++++-----
+ src/common/util.h                              |  2 +-
+ src/core/core.cpp                              |  2 +-
+ src/qtui/chatitem.cpp                          |  2 +-
+ src/qtui/chatlinemodelitem.cpp                 | 16 ++++++++--------
+ src/qtui/chatviewsettings.cpp                  |  2 +-
+ src/qtui/mainwin.cpp                           |  2 +-
+ src/qtui/settingsdlg.cpp                       |  2 +-
+ .../settingspages/chatmonitorsettingspage.cpp  |  2 +-
+ .../settingspages/networkssettingspage.cpp     |  2 +-
+ src/qtui/settingspages/shortcutsmodel.cpp      |  2 +-
+ src/uisupport/networkmodelcontroller.cpp       |  2 +-
+ src/uisupport/toolbaractionprovider.cpp        |  2 +-
+ 21 files changed, 48 insertions(+), 48 deletions(-)
+
+--- a/src/client/coreaccountmodel.cpp
++++ b/src/client/coreaccountmodel.cpp
+@@ -107,7 +107,7 @@ QVariant CoreAccountModel::data(const QM
+     case Qt::DisplayRole:
+         return acc.accountName();
+     case AccountIdRole:
+-        return QVariant::fromValue<AccountId>(acc.accountId());
++        return QVariant::fromValue(acc.accountId());
+     case UuidRole:
+         return acc.uuid().toString();
+--- a/src/client/messagefilter.cpp
++++ b/src/client/messagefilter.cpp
+@@ -191,7 +191,7 @@ bool MessageFilter::filterAcceptsRow(int
+             if (!redirectedTo.isValid()) {
+                 BufferId redirectedTo = Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>();
+                 if (redirectedTo.isValid())
+-                    sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(redirectedTo), MessageModel::RedirectedToRole);
++                    sourceModel()->setData(sourceIdx, QVariant::fromValue(redirectedTo), MessageModel::RedirectedToRole);
+             }
+             if (_validBuffers.contains(redirectedTo))
+--- a/src/client/messagemodel.cpp
++++ b/src/client/messagemodel.cpp
+@@ -448,11 +448,11 @@ QVariant MessageModelItem::data(int colu
+     switch (role) {
+     case MessageModel::MessageRole:
+-        return QVariant::fromValue<Message>(message());
++        return QVariant::fromValue(message());
+     case MessageModel::MsgIdRole:
+-        return QVariant::fromValue<MsgId>(msgId());
++        return QVariant::fromValue(msgId());
+     case MessageModel::BufferIdRole:
+-        return QVariant::fromValue<BufferId>(bufferId());
++        return QVariant::fromValue(bufferId());
+     case MessageModel::TypeRole:
+         return msgType();
+     case MessageModel::FlagsRole:
+@@ -460,9 +460,9 @@ QVariant MessageModelItem::data(int colu
+     case MessageModel::TimestampRole:
+         return timestamp();
+     case MessageModel::RedirectedToRole:
+-        return qVariantFromValue<BufferId>(_redirectedTo);
++        return QVariant::fromValue(_redirectedTo);
+     default:
+-        return QVariant();
++        return {};
+     }
+ }
+--- a/src/client/networkmodel.cpp
++++ b/src/client/networkmodel.cpp
+@@ -72,7 +72,7 @@ QVariant NetworkItem::data(int column, i
+         else
+             return QVariant();
+     case NetworkModel::NetworkIdRole:
+-        return qVariantFromValue(_networkId);
++        return QVariant::fromValue(_networkId);
+     case NetworkModel::ItemTypeRole:
+         return NetworkModel::NetworkItemType;
+     case NetworkModel::ItemActiveRole:
+@@ -406,11 +406,11 @@ QVariant BufferItem::data(int column, in
+     case NetworkModel::ItemTypeRole:
+         return NetworkModel::BufferItemType;
+     case NetworkModel::BufferIdRole:
+-        return qVariantFromValue(bufferInfo().bufferId());
++        return QVariant::fromValue(bufferInfo().bufferId());
+     case NetworkModel::NetworkIdRole:
+-        return qVariantFromValue(bufferInfo().networkId());
++        return QVariant::fromValue(bufferInfo().networkId());
+     case NetworkModel::BufferInfoRole:
+-        return qVariantFromValue(bufferInfo());
++        return QVariant::fromValue(bufferInfo());
+     case NetworkModel::BufferTypeRole:
+         return int(bufferType());
+     case NetworkModel::ItemActiveRole:
+@@ -418,9 +418,9 @@ QVariant BufferItem::data(int column, in
+     case NetworkModel::BufferActivityRole:
+         return (int)activityLevel();
+     case NetworkModel::BufferFirstUnreadMsgIdRole:
+-        return qVariantFromValue(firstUnreadMsgId());
++        return QVariant::fromValue(firstUnreadMsgId());
+     case NetworkModel::MarkerLineMsgIdRole:
+-        return qVariantFromValue(markerLineMsgId());
++        return QVariant::fromValue(markerLineMsgId());
+     default:
+         return PropertyMapItem::data(column, role);
+     }
+@@ -523,7 +523,7 @@ QVariant QueryBufferItem::data(int colum
+     case Qt::EditRole:
+         return BufferItem::data(column, Qt::DisplayRole);
+     case NetworkModel::IrcUserRole:
+-        return QVariant::fromValue<QObject *>(_ircUser);
++        return QVariant::fromValue(_ircUser);
+     case NetworkModel::UserAwayRole:
+         return (bool)_ircUser ? _ircUser->isAway() : false;
+     default:
+@@ -750,7 +750,7 @@ QVariant ChannelBufferItem::data(int col
+ {
+     switch (role) {
+     case NetworkModel::IrcChannelRole:
+-        return QVariant::fromValue<QObject *>(_ircChannel);
++        return QVariant::fromValue(_ircChannel);
+     default:
+         return BufferItem::data(column, role);
+     }
+@@ -1147,7 +1147,7 @@ QVariant IrcUserItem::data(int column, i
+     case NetworkModel::IrcChannelRole:
+         return parent()->data(column, role);
+     case NetworkModel::IrcUserRole:
+-        return QVariant::fromValue<QObject *>(_ircUser.data());
++        return QVariant::fromValue(_ircUser.data());
+     case NetworkModel::UserAwayRole:
+         return (bool)_ircUser ? _ircUser->isAway() : false;
+     default:
+--- a/src/common/buffersyncer.cpp
++++ b/src/common/buffersyncer.cpp
+@@ -90,8 +90,7 @@ QVariantList BufferSyncer::initLastSeenM
+     QVariantList list;
+     QHash<BufferId, MsgId>::const_iterator iter = _lastSeenMsg.constBegin();
+     while (iter != _lastSeenMsg.constEnd()) {
+-        list << QVariant::fromValue<BufferId>(iter.key())
+-             << QVariant::fromValue<MsgId>(iter.value());
++        list << QVariant::fromValue(iter.key()) << QVariant::fromValue(iter.value());
+         ++iter;
+     }
+     return list;
+@@ -113,8 +112,7 @@ QVariantList BufferSyncer::initMarkerLin
+     QVariantList list;
+     QHash<BufferId, MsgId>::const_iterator iter = _markerLines.constBegin();
+     while (iter != _markerLines.constEnd()) {
+-        list << QVariant::fromValue<BufferId>(iter.key())
+-             << QVariant::fromValue<MsgId>(iter.value());
++        list << QVariant::fromValue(iter.key()) << QVariant::fromValue(iter.value());
+         ++iter;
+     }
+     return list;
+@@ -136,8 +134,7 @@ QVariantList BufferSyncer::initActivitie
+     QVariantList list;
+     auto iter = _bufferActivities.constBegin();
+     while (iter != _bufferActivities.constEnd()) {
+-        list << QVariant::fromValue<BufferId>(iter.key())
+-             << QVariant::fromValue<int>((int) iter.value());
++        list << QVariant::fromValue(iter.key()) << QVariant::fromValue((int)iter.value());
+         ++iter;
+     }
+     return list;
+@@ -197,8 +194,7 @@ QVariantList BufferSyncer::initHighlight
+     QVariantList list;
+     auto iter = _highlightCounts.constBegin();
+     while (iter != _highlightCounts.constEnd()) {
+-        list << QVariant::fromValue<BufferId>(iter.key())
+-             << QVariant::fromValue<int>((int) iter.value());
++        list << QVariant::fromValue(iter.key()) << QVariant::fromValue((int)iter.value());
+         ++iter;
+     }
+     return list;
+--- a/src/common/network.cpp
++++ b/src/common/network.cpp
+@@ -1209,8 +1209,8 @@ QDataStream &operator<<(QDataStream &out
+     i["CodecForServer"]            = info.codecForServer;
+     i["CodecForEncoding"]          = info.codecForEncoding;
+     i["CodecForDecoding"]          = info.codecForDecoding;
+-    i["NetworkId"]                 = QVariant::fromValue<NetworkId>(info.networkId);
+-    i["Identity"]                  = QVariant::fromValue<IdentityId>(info.identity);
++    i["NetworkId"]                 = QVariant::fromValue(info.networkId);
++    i["Identity"]                  = QVariant::fromValue(info.identity);
+     i["MessageRateBurstSize"]      = info.messageRateBurstSize;
+     i["MessageRateDelay"]          = info.messageRateDelay;
+     i["AutoReconnectInterval"]     = info.autoReconnectInterval;
+--- a/src/common/serializers/serializers.cpp
++++ b/src/common/serializers/serializers.cpp
+@@ -29,7 +29,7 @@ bool toVariant(QDataStream& stream, Quas
+     if (!Serializers::deserialize(stream, features, content)) {
+         return false;
+     }
+-    data = QVariant::fromValue<T>(content);
++    data = QVariant::fromValue(content);
+     return true;
+ }
+--- a/src/common/types.h
++++ b/src/common/types.h
+@@ -100,27 +100,27 @@ inline uint qHash(const SignedId64 &id)
+ struct UserId : public SignedId {
+     inline UserId(int _id = 0) : SignedId(_id) {}
+-    //inline operator QVariant() const { return QVariant::fromValue<UserId>(*this); }  // no automatic conversion!
++    //inline operator QVariant() const { return QVariant::fromValue(*this); }  // no automatic conversion!
+ };
+ struct MsgId : public SignedId64 {
+     inline MsgId(qint64 _id = 0) : SignedId64(_id) {}
+-    //inline operator QVariant() const { return QVariant::fromValue<MsgId>(*this); }
++    //inline operator QVariant() const { return QVariant::fromValue(*this); }
+ };
+ struct BufferId : public SignedId {
+     inline BufferId(int _id = 0) : SignedId(_id) {}
+-    //inline operator QVariant() const { return QVariant::fromValue<BufferId>(*this); }
++    //inline operator QVariant() const { return QVariant::fromValue(*this); }
+ };
+ struct NetworkId : public SignedId {
+     inline NetworkId(int _id = 0) : SignedId(_id) {}
+-    //inline operator QVariant() const { return QVariant::fromValue<NetworkId>(*this); }
++    //inline operator QVariant() const { return QVariant::fromValue(*this); }
+ };
+ struct IdentityId : public SignedId {
+     inline IdentityId(int _id = 0) : SignedId(_id) {}
+-    //inline operator QVariant() const { return QVariant::fromValue<IdentityId>(*this); }
++    //inline operator QVariant() const { return QVariant::fromValue(*this); }
+ };
+ struct AccountId : public SignedId {
+--- a/src/common/util.h
++++ b/src/common/util.h
+@@ -53,7 +53,7 @@ QVariantList toVariantList(const QList<T
+ {
+     QVariantList variants;
+     for (int i = 0; i < list.count(); i++) {
+-        variants << QVariant::fromValue<T>(list[i]);
++        variants << QVariant::fromValue(list[i]);
+     }
+     return variants;
+ }
+--- a/src/core/core.cpp
++++ b/src/core/core.cpp
+@@ -301,7 +301,7 @@ void Core::saveState()
+     if (_storage) {
+         QVariantList activeSessions;
+         for (auto &&user : instance()->_sessions.keys())
+-            activeSessions << QVariant::fromValue<UserId>(user);
++            activeSessions << QVariant::fromValue(user);
+         _storage->setCoreState(activeSessions);
+     }
+ }
+--- a/src/qtui/chatitem.cpp
++++ b/src/qtui/chatitem.cpp
+@@ -871,7 +871,7 @@ void ContentsChatItem::addActionsToMenu(
+         case Clickable::Url:
+             privateData()->activeClickable = click;
+             menu->addAction(icon::get("edit-copy"), tr("Copy Link Address"),
+-                &_actionProxy, SLOT(copyLinkToClipboard()))->setData(QVariant::fromValue<void *>(this));
++                            &_actionProxy, SLOT(copyLinkToClipboard()))->setData(QVariant::fromValue(static_cast<void *>(this)));
+             break;
+         case Clickable::Channel:
+         {
+--- a/src/qtui/chatlinemodelitem.cpp
++++ b/src/qtui/chatlinemodelitem.cpp
+@@ -76,7 +76,7 @@ bool ChatLineModelItem::setData(int colu
+ QVariant ChatLineModelItem::data(int column, int role) const
+ {
+     if (role == ChatLineModel::MsgLabelRole)
+-        return QVariant::fromValue<UiStyle::MessageLabel>(messageLabel());
++        return QVariant::fromValue(messageLabel());
+     QVariant variant;
+     MessageModel::ColumnType col = (MessageModel::ColumnType)column;
+@@ -111,7 +111,8 @@ QVariant ChatLineModelItem::timestampDat
+     case ChatLineModel::SelectedBackgroundRole:
+         return backgroundBrush(UiStyle::FormatType::Timestamp, true);
+     case ChatLineModel::FormatRole:
+-        return QVariant::fromValue<UiStyle::FormatList>({std::make_pair(quint16{0}, UiStyle::Format{UiStyle::formatType(_styledMsg.type()) | UiStyle::FormatType::Timestamp, {}, {}})});
++        return QVariant::fromValue(UiStyle::FormatList{
++            std::make_pair(quint16{0}, UiStyle::Format{UiStyle::formatType(_styledMsg.type()) | UiStyle::FormatType::Timestamp, {}, {}})});
+     }
+     return QVariant();
+ }
+@@ -129,7 +130,8 @@ QVariant ChatLineModelItem::senderData(i
+     case ChatLineModel::SelectedBackgroundRole:
+         return backgroundBrush(UiStyle::FormatType::Sender, true);
+     case ChatLineModel::FormatRole:
+-        return QVariant::fromValue<UiStyle::FormatList>({std::make_pair(quint16{0}, UiStyle::Format{UiStyle::formatType(_styledMsg.type()) | UiStyle::FormatType::Sender, {}, {}})});
++        return QVariant::fromValue(UiStyle::FormatList{
++            std::make_pair(quint16{0}, UiStyle::Format{UiStyle::formatType(_styledMsg.type()) | UiStyle::FormatType::Sender, {}, {}})});
+     }
+     return QVariant();
+ }
+@@ -146,11 +148,11 @@ QVariant ChatLineModelItem::contentsData
+     case ChatLineModel::SelectedBackgroundRole:
+         return backgroundBrush(UiStyle::FormatType::Contents, true);
+     case ChatLineModel::FormatRole:
+-        return QVariant::fromValue<UiStyle::FormatList>(_styledMsg.contentsFormatList());
++        return QVariant::fromValue(_styledMsg.contentsFormatList());
+     case ChatLineModel::WrapListRole:
+         if (_wrapList.isEmpty())
+             computeWrapList();
+-        return QVariant::fromValue<ChatLineModel::WrapList>(_wrapList);
++        return QVariant::fromValue(_wrapList);
+     }
+     return QVariant();
+ }
+@@ -174,7 +176,7 @@ QVariant ChatLineModelItem::backgroundBr
+     QTextCharFormat fmt = QtUi::style()->format({UiStyle::formatType(_styledMsg.type()) | subelement, {}, {}},
+                                                 messageLabel() | (selected ? UiStyle::MessageLabel::Selected : UiStyle::MessageLabel::None));
+     if (fmt.hasProperty(QTextFormat::BackgroundBrush))
+-        return QVariant::fromValue<QBrush>(fmt.background());
++        return QVariant::fromValue(fmt.background());
+     return QVariant();
+ }
+--- a/src/qtui/mainwin.cpp
++++ b/src/qtui/mainwin.cpp
+@@ -1774,7 +1774,7 @@ void MainWin::clientNetworkCreated(Netwo
+     const Network *net = Client::network(id);
+     QAction *act = new QAction(net->networkName(), this);
+     act->setObjectName(QString("NetworkAction-%1").arg(id.toInt()));
+-    act->setData(QVariant::fromValue<NetworkId>(id));
++    act->setData(QVariant::fromValue(id));
+     connect(net, SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated()));
+     connect(act, SIGNAL(triggered()), this, SLOT(connectOrDisconnectFromNet()));
+--- a/src/qtui/settingsdlg.cpp
++++ b/src/qtui/settingsdlg.cpp
+@@ -95,7 +95,7 @@ void SettingsDlg::registerSettingsPage(S
+     else
+         item = new QTreeWidgetItem(cat, QStringList(sp->title()));
+-    item->setData(0, SettingsPageRole, QVariant::fromValue<QObject *>(sp));
++    item->setData(0, SettingsPageRole, QVariant::fromValue(sp));
+     pageIsLoaded[sp] = false;
+     if (!ui.settingsTree->selectedItems().count())
+         ui.settingsTree->setCurrentItem(item);
+--- a/src/qtui/settingspages/chatmonitorsettingspage.cpp
++++ b/src/qtui/settingspages/chatmonitorsettingspage.cpp
+@@ -161,8 +161,8 @@ void ChatMonitorSettingsPage::save()
+     // save list of active buffers
+     QVariantList saveableBufferIdList;
+-    foreach(BufferId id, _configActive->bufferList()) {
+-        saveableBufferIdList << QVariant::fromValue<BufferId>(id);
++    foreach (BufferId id, _configActive->bufferList()) {
++        saveableBufferIdList << QVariant::fromValue(id);
+     }
+     chatViewSettings.setValue("Buffers", saveableBufferIdList);
+--- a/src/qtui/settingspages/networkssettingspage.cpp
++++ b/src/qtui/settingspages/networkssettingspage.cpp
+@@ -570,7 +570,7 @@ QListWidgetItem *NetworksSettingsPage::i
+         }
+         if (!item) item = new QListWidgetItem(disconnectedIcon, info.networkName, ui.networkList);
+     }
+-    item->setData(Qt::UserRole, QVariant::fromValue<NetworkId>(info.networkId));
++    item->setData(Qt::UserRole, QVariant::fromValue(info.networkId));
+     setItemState(info.networkId, item);
+     widgetHasChanged();
+     return item;
+--- a/src/qtui/settingspages/shortcutsmodel.cpp
++++ b/src/qtui/settingspages/shortcutsmodel.cpp
+@@ -156,7 +156,7 @@ QVariant ShortcutsModel::data(const QMod
+         return QVariant();
+     case ActionRole:
+-        return QVariant::fromValue<QObject *>(action);
++        return QVariant::fromValue(action);
+     case DefaultShortcutRole:
+         return action->shortcut(Action::DefaultShortcut);
+--- a/src/uisupport/networkmodelcontroller.cpp
++++ b/src/uisupport/networkmodelcontroller.cpp
+@@ -577,7 +577,7 @@ NetworkModelController::JoinDlg::JoinDlg
+     foreach(NetworkId id, Client::networkIds()) {
+         const Network *net = Client::network(id);
+         if (net->isConnected()) {
+-            networks->addItem(net->networkName(), QVariant::fromValue<NetworkId>(id));
++            networks->addItem(net->networkName(), QVariant::fromValue(id));
+         }
+     }
+--- a/src/uisupport/toolbaractionprovider.cpp
++++ b/src/uisupport/toolbaractionprovider.cpp
+@@ -165,7 +165,7 @@ void ToolBarActionProvider::networkCreat
+     Action *act = new Action(net->networkName(), this);
+     _networkActions[id] = act;
+     act->setObjectName(QString("NetworkAction-%1").arg(id.toInt()));
+-    act->setData(QVariant::fromValue<NetworkId>(id));
++    act->setData(QVariant::fromValue(id));
+     connect(net, SIGNAL(updatedRemotely()), SLOT(networkUpdated()));
+     connect(act, SIGNAL(triggered()), SLOT(connectOrDisconnectNet()));
+     networkUpdated(net);
diff --git a/patches/qt514/0003-qa-Replace-deprecated-qVariantFromValue-by-QVariant-.patch b/patches/qt514/0003-qa-Replace-deprecated-qVariantFromValue-by-QVariant-.patch
new file mode 100644 (file)
index 0000000..621e2da
--- /dev/null
@@ -0,0 +1,130 @@
+From 1f21c1f9613031ae263eeed0c4883bfcd5488343 Mon Sep 17 00:00:00 2001
+From: Manuel Nickschas <sputnick@quassel-irc.org>
+Date: Tue, 7 Jan 2020 19:25:38 +0100
+Subject: [PATCH 3/6] qa: Replace deprecated qVariantFromValue() by
+ QVariant::fromValue()
+Bug: https://bugs.quassel-irc.org/issues/1544
+Bug-Ubuntu: https://bugs.launchpad.net/quassel/+bug/1885436
+Origin: upstream, https://github.com/quassel/quassel/pull/518
+Origin: upstream, https://github.com/quassel/quassel/commit/1f21c1f9613031ae263eeed0c4883bfcd5488343
+
+Deprecated since Qt 5.14.
+---
+ src/client/clientsettings.cpp                     | 4 ++--
+ src/common/bufferviewconfig.cpp                   | 6 +++---
+ src/core/coreirclisthelper.cpp                    | 2 +-
+ src/core/coreusersettings.cpp                     | 2 +-
+ src/qtui/settingspages/bufferviewsettingspage.cpp | 6 +++---
+ 5 files changed, 10 insertions(+), 10 deletions(-)
+
+--- a/src/client/clientsettings.cpp
++++ b/src/client/clientsettings.cpp
+@@ -182,7 +182,7 @@ void CoreAccountSettings::setJumpKeyMap(
+     QVariantMap variants;
+     QHash<int, BufferId>::const_iterator mapIter = keyMap.constBegin();
+     while (mapIter != keyMap.constEnd()) {
+-        variants[QString::number(mapIter.key())] = qVariantFromValue(mapIter.value());
++        variants[QString::number(mapIter.key())] = QVariant::fromValue(mapIter.value());
+         ++mapIter;
+     }
+     setAccountValue("JumpKeyMap", variants);
+@@ -205,8 +205,8 @@ QHash<int, BufferId> CoreAccountSettings
+ void CoreAccountSettings::setBufferViewOverlay(const QSet<int> &viewIds)
+ {
+     QVariantList variants;
+-    foreach(int viewId, viewIds) {
+-        variants << qVariantFromValue(viewId);
++    foreach (int viewId, viewIds) {
++        variants << QVariant::fromValue(viewId);
+     }
+     setAccountValue("BufferViewOverlay", variants);
+ }
+--- a/src/common/bufferviewconfig.cpp
++++ b/src/common/bufferviewconfig.cpp
+@@ -150,8 +150,8 @@ QVariantList BufferViewConfig::initBuffe
+ {
+     QVariantList buffers;
+-    foreach(BufferId bufferId, _buffers) {
+-        buffers << qVariantFromValue(bufferId);
++    foreach (BufferId bufferId, _buffers) {
++        buffers << QVariant::fromValue(bufferId);
+     }
+     return buffers;
+@@ -186,8 +186,8 @@ QVariantList BufferViewConfig::initRemov
+ {
+     QVariantList removedBuffers;
+-    foreach(BufferId bufferId, _removedBuffers) {
+-        removedBuffers << qVariantFromValue(bufferId);
++    foreach (BufferId bufferId, _removedBuffers) {
++        removedBuffers << QVariant::fromValue(bufferId);
+     }
+     return removedBuffers;
+@@ -208,8 +208,8 @@ QVariantList BufferViewConfig::initTempo
+ {
+     QVariantList temporarilyRemovedBuffers;
+-    foreach(BufferId bufferId, _temporarilyRemovedBuffers) {
+-        temporarilyRemovedBuffers << qVariantFromValue(bufferId);
++    foreach (BufferId bufferId, _temporarilyRemovedBuffers) {
++        temporarilyRemovedBuffers << QVariant::fromValue(bufferId);
+     }
+     return temporarilyRemovedBuffers;
+--- a/src/core/coreirclisthelper.cpp
++++ b/src/core/coreirclisthelper.cpp
+@@ -90,10 +90,8 @@ bool CoreIrcListHelper::endOfChannelList
+         QVariantList channelList;
+         foreach(ChannelDescription channel, _channelLists[netId]) {
+             QVariantList channelVariant;
+-            channelVariant << channel.channelName
+-                           << channel.userCount
+-                           << channel.topic;
+-            channelList << qVariantFromValue<QVariant>(channelVariant);
++            channelVariant << channel.channelName << channel.userCount << channel.topic;
++            channelList << QVariant::fromValue<QVariant>(channelVariant);
+         }
+         _finishedChannelLists[netId] = channelList;
+         _channelLists.remove(netId);
+--- a/src/core/coreusersettings.cpp
++++ b/src/core/coreusersettings.cpp
+@@ -47,7 +47,7 @@ QList<IdentityId> CoreUserSettings::iden
+ void CoreUserSettings::storeIdentity(const Identity &identity)
+ {
+-    setLocalValue(QString("Identities/%1").arg(identity.id().toInt()), qVariantFromValue(identity));
++    setLocalValue(QString("Identities/%1").arg(identity.id().toInt()), QVariant::fromValue(identity));
+ }
+--- a/src/qtui/settingspages/bufferviewsettingspage.cpp
++++ b/src/qtui/settingspages/bufferviewsettingspage.cpp
+@@ -127,12 +127,12 @@ void BufferViewSettingsPage::load()
+     // load network selector
+     ui.networkSelector->clear();
+     ui.networkSelector->addItem(tr("All"));
+-    ui.networkSelector->setItemData(0, qVariantFromValue<NetworkId>(NetworkId()));
+-    const Network *net;
+-    foreach(NetworkId netId, Client::networkIds()) {
++    ui.networkSelector->setItemData(0, QVariant::fromValue(NetworkId()));
++    const Network* net;
++    foreach (NetworkId netId, Client::networkIds()) {
+         net = Client::network(netId);
+         ui.networkSelector->addItem(net->networkName());
+-        ui.networkSelector->setItemData(ui.networkSelector->count() - 1, qVariantFromValue<NetworkId>(net->networkId()));
++        ui.networkSelector->setItemData(ui.networkSelector->count() - 1, QVariant::fromValue(net->networkId()));
+     }
+     _ignoreWidgetChanges = false;
+@@ -207,7 +207,7 @@ void BufferViewSettingsPage::coreConnect
+ void BufferViewSettingsPage::addBufferView(BufferViewConfig *config)
+ {
+     QListWidgetItem *item = new QListWidgetItem(config->bufferViewName(), ui.bufferViewList);
+-    item->setData(Qt::UserRole, qVariantFromValue<QObject *>(qobject_cast<QObject *>(config)));
++    item->setData(Qt::UserRole, QVariant::fromValue(qobject_cast<QObject*>(config)));
+     connect(config, SIGNAL(updatedRemotely()), this, SLOT(updateBufferView()));
+     connect(config, SIGNAL(destroyed()), this, SLOT(bufferViewDeleted()));
+     ui.deleteBufferView->setEnabled(ui.bufferViewList->count() > 1);
diff --git a/patches/qt514/0004-qa-Avoid-deprecation-warnings-for-QList-QSet-convers.patch b/patches/qt514/0004-qa-Avoid-deprecation-warnings-for-QList-QSet-convers.patch
new file mode 100644 (file)
index 0000000..61e4cca
--- /dev/null
@@ -0,0 +1,361 @@
+From 52209badc8e769e50aa3019b63689dda0e79e9d0 Mon Sep 17 00:00:00 2001
+From: Manuel Nickschas <sputnick@quassel-irc.org>
+Date: Tue, 7 Jan 2020 20:31:31 +0100
+Subject: [PATCH 4/6] qa: Avoid deprecation warnings for QList/QSet conversions
+Bug: https://bugs.quassel-irc.org/issues/1544
+Bug-Ubuntu: https://bugs.launchpad.net/quassel/+bug/1885436
+Origin: upstream, https://github.com/quassel/quassel/pull/518
+Origin: upstream, https://github.com/quassel/quassel/commit/52209badc8e769e50aa3019b63689dda0e79e9d0
+
+Qt 5.14 deprecated the explicit functions for converting between
+QSet and QList, preferring instead the use of range-based ctors.
+Unfortunately, those ctors were only added in Qt 5.14, so we can't
+use them when compiling against older versions.
+
+Add a util function for QList->QSet to keep the version check in
+a single place. Replace the other direction by using QSet::values().
+In some cases, conversions could be avoided altogether, or an STL
+container be used easily, so do that.
+---
+ src/client/backlogrequester.cpp               | 22 +++++++------------
+ src/client/backlogrequester.h                 | 15 +++++--------
+ src/client/bufferviewoverlay.cpp              |  9 ++++----
+ src/client/clientbacklogmanager.cpp           |  3 ++-
+ src/client/messagefilter.cpp                  |  5 +++--
+ src/common/ircuser.cpp                        |  2 +-
+ src/common/util.h                             | 11 ++++++++++
+ src/core/corebuffersyncer.cpp                 |  3 ++-
+ src/qtui/chatview.cpp                         |  3 ++-
+ src/qtui/chatviewsearchcontroller.cpp         |  5 ++---
+ .../settingspages/chatmonitorsettingspage.cpp |  3 ++-
+ src/uisupport/bufferviewfilter.cpp            |  3 ++-
+ 12 files changed, 46 insertions(+), 38 deletions(-)
+
+--- a/src/client/backlogrequester.cpp
++++ b/src/client/backlogrequester.cpp
+@@ -35,26 +35,18 @@ BacklogRequester::BacklogRequester(bool
+     Q_ASSERT(backlogManager);
+ }
+-
+-void BacklogRequester::setWaitingBuffers(const QSet<BufferId> &buffers)
+-{
+-    _buffersWaiting = buffers;
+-    _totalBuffers = _buffersWaiting.count();
+-}
+-
+-
+-void BacklogRequester::addWaitingBuffer(BufferId buffer)
++void BacklogRequester::setWaitingBuffers(const BufferIdList& buffers)
+ {
+-    _buffersWaiting << buffer;
+-    _totalBuffers++;
++    _buffersWaiting = {buffers.begin(), buffers.end()};
++    _totalBuffers = int(_buffersWaiting.size());
+ }
+ bool BacklogRequester::buffer(BufferId bufferId, const MessageList &messages)
+ {
+     _bufferedMessages << messages;
+-    _buffersWaiting.remove(bufferId);
+-    return !_buffersWaiting.isEmpty();
++    _buffersWaiting.erase(bufferId);
++    return !_buffersWaiting.empty();
+ }
+@@ -62,15 +54,14 @@ BufferIdList BacklogRequester::allBuffer
+ {
+     QSet<BufferId> bufferIds = Client::bufferViewOverlay()->bufferIds();
+     bufferIds += Client::bufferViewOverlay()->tempRemovedBufferIds();
+-    return bufferIds.toList();
++    return bufferIds.values();
+ }
+ void BacklogRequester::flushBuffer()
+ {
+-    if (!_buffersWaiting.isEmpty()) {
+-        qWarning() << Q_FUNC_INFO << "was called before all backlog was received:"
+-                   << _buffersWaiting.count() << "buffers are waiting.";
++    if (!_buffersWaiting.empty()) {
++        qWarning() << Q_FUNC_INFO << "was called before all backlog was received:" << _buffersWaiting.size() << "buffers are waiting.";
+     }
+     _bufferedMessages.clear();
+     _totalBuffers = 0;
+--- a/src/client/backlogrequester.h
++++ b/src/client/backlogrequester.h
+@@ -18,8 +18,9 @@
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
+  ***************************************************************************/
+-#ifndef BACKLOGREQUESTER_H
+-#define BACKLOGREQUESTER_H
++#pragma once
++
++#include <set>
+ #include <QList>
+@@ -47,7 +48,7 @@ public:
+     inline RequesterType type() { return _requesterType; }
+     inline const QList<Message> &bufferedMessages() { return _bufferedMessages; }
+-    inline int buffersWaiting() const { return _buffersWaiting.count(); }
++    inline int buffersWaiting() const { return int(_buffersWaiting.size()); }
+     inline int totalBuffers() const { return _totalBuffers; }
+     bool buffer(BufferId bufferId, const MessageList &messages); //! returns false if it was the last missing backlogpart
+@@ -59,9 +60,7 @@ public:
+ protected:
+     BufferIdList allBufferIds() const;
+-    inline void setWaitingBuffers(const QList<BufferId> &buffers) { setWaitingBuffers(buffers.toSet()); }
+-    void setWaitingBuffers(const QSet<BufferId> &buffers);
+-    void addWaitingBuffer(BufferId buffer);
++    void setWaitingBuffers(const BufferIdList& buffers);
+     ClientBacklogManager *backlogManager;
+@@ -70,7 +69,7 @@ private:
+     RequesterType _requesterType;
+     MessageList _bufferedMessages;
+     int _totalBuffers;
+-    QSet<BufferId> _buffersWaiting;
++    std::set<BufferId> _buffersWaiting;
+ };
+@@ -117,6 +116,3 @@ private:
+     int _limit;
+     int _additional;
+ };
+-
+-
+-#endif //BACKLOGREQUESTER_H
+--- a/src/client/bufferviewoverlay.cpp
++++ b/src/client/bufferviewoverlay.cpp
+@@ -27,6 +27,7 @@
+ #include "clientbacklogmanager.h"
+ #include "clientbufferviewmanager.h"
+ #include "networkmodel.h"
++#include "util.h"
+ const int BufferViewOverlay::_updateEventId = QEvent::registerEventType();
+@@ -101,13 +102,13 @@ void BufferViewOverlay::addView(int view
+                     if (Client::networkModel()->networkId(bufferId) == config->networkId())
+                         buffers << bufferId;
+                 }
+-                foreach(BufferId bufferId, config->temporarilyRemovedBuffers().toList()) {
++                for (BufferId bufferId : config->temporarilyRemovedBuffers()) {
+                     if (Client::networkModel()->networkId(bufferId) == config->networkId())
+                         buffers << bufferId;
+                 }
+             }
+             else {
+-                buffers = BufferIdList::fromSet(config->bufferList().toSet() + config->temporarilyRemovedBuffers());
++                buffers = (toQSet(config->bufferList()) + config->temporarilyRemovedBuffers()).values();
+             }
+             Client::backlogManager()->checkForBacklog(buffers);
+         }
+@@ -224,12 +225,12 @@ void BufferViewOverlay::updateHelper()
+             // we have to apply several filters before we can add a buffer to a category (visible, removed, ...)
+             buffers += filterBuffersByConfig(config->bufferList(), config);
+-            tempRemovedBuffers += filterBuffersByConfig(config->temporarilyRemovedBuffers().toList(), config);
++            tempRemovedBuffers += filterBuffersByConfig(config->temporarilyRemovedBuffers().values(), config);
+             removedBuffers += config->removedBuffers();
+         }
+         // prune the sets from overlap
+-        QSet<BufferId> availableBuffers = Client::networkModel()->allBufferIds().toSet();
++        QSet<BufferId> availableBuffers = toQSet(Client::networkModel()->allBufferIds());
+         buffers.intersect(availableBuffers);
+--- a/src/client/clientbacklogmanager.cpp
++++ b/src/client/clientbacklogmanager.cpp
+@@ -24,6 +24,7 @@
+ #include "backlogsettings.h"
+ #include "backlogrequester.h"
+ #include "client.h"
++#include "util.h"
+ #include <ctime>
+@@ -119,8 +120,8 @@ void ClientBacklogManager::requestInitia
+ BufferIdList ClientBacklogManager::filterNewBufferIds(const BufferIdList &bufferIds)
+ {
+     BufferIdList newBuffers;
+-    QSet<BufferId> availableBuffers = Client::networkModel()->allBufferIds().toSet();
+-    foreach(BufferId bufferId, bufferIds) {
++    QSet<BufferId> availableBuffers = toQSet(Client::networkModel()->allBufferIds());
++    foreach (BufferId bufferId, bufferIds) {
+         if (_buffersRequested.contains(bufferId) || !availableBuffers.contains(bufferId))
+             continue;
+         newBuffers << bufferId;
+--- a/src/client/messagefilter.cpp
++++ b/src/client/messagefilter.cpp
+@@ -28,6 +28,7 @@
+ #include "messagemodel.h"
+ #include "networkmodel.h"
+ #include "clientignorelistmanager.h"
++#include "util.h"
+ MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent)
+     : QSortFilterProxyModel(parent),
+@@ -40,7 +41,7 @@ MessageFilter::MessageFilter(QAbstractIt
+ MessageFilter::MessageFilter(MessageModel *source, const QList<BufferId> &buffers, QObject *parent)
+     : QSortFilterProxyModel(parent),
+-    _validBuffers(buffers.toSet()),
++    _validBuffers(toQSet(buffers)),
+     _messageTypeFilter(0)
+ {
+     init();
+@@ -119,7 +120,7 @@ QString MessageFilter::idString() const
+     if (_validBuffers.isEmpty())
+         return "*";
+-    QList<BufferId> bufferIds = _validBuffers.toList();
++    QList<BufferId> bufferIds = _validBuffers.values();
+     qSort(bufferIds);
+     QStringList bufferIdStrings;
+--- a/src/common/ircuser.cpp
++++ b/src/common/ircuser.cpp
+@@ -353,7 +353,7 @@ void IrcUser::partChannel(const QString
+ void IrcUser::quit()
+ {
+-    QList<IrcChannel *> channels = _channels.toList();
++    QList<IrcChannel*> channels = _channels.values();
+     _channels.clear();
+     foreach(IrcChannel *channel, channels) {
+         disconnect(channel, 0, this, 0);
+--- a/src/common/util.h
++++ b/src/common/util.h
+@@ -21,6 +21,7 @@
+ #pragma once
+ #include <QList>
++#include <QSet>
+ #include <QString>
+ #include <QVariant>
+@@ -60,6 +61,16 @@ QVariantList toVariantList(const QList<T
+ template<typename T>
++QSet<T> toQSet(const QList<T>& list)
++{
++#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
++    return list.toSet();
++#else
++    return {list.begin(), list.end()};
++#endif
++}
++
++template<typename T>
+ QList<T> fromVariantList(const QVariantList &variants)
+ {
+     QList<T> list;
+--- a/src/core/corebuffersyncer.cpp
++++ b/src/core/corebuffersyncer.cpp
+@@ -24,6 +24,7 @@
+ #include "coresession.h"
+ #include "corenetwork.h"
+ #include "ircchannel.h"
++#include "util.h"
+ class PurgeEvent : public QEvent
+ {
+@@ -193,7 +194,7 @@ void CoreBufferSyncer::purgeBufferIds()
+         actualBuffers << bufferInfo.bufferId();
+     }
+-    QSet<BufferId> storedIds = lastSeenBufferIds().toSet() + markerLineBufferIds().toSet();
++    QSet<BufferId> storedIds = toQSet(lastSeenBufferIds()) + toQSet(markerLineBufferIds());
+     foreach(BufferId bufferId, storedIds) {
+         if (!actualBuffers.contains(bufferId)) {
+             BufferSyncer::removeBuffer(bufferId);
+--- a/src/qtui/chatview.cpp
++++ b/src/qtui/chatview.cpp
+@@ -31,6 +31,7 @@
+ #include "qtui.h"
+ #include "qtuistyle.h"
+ #include "clientignorelistmanager.h"
++#include "util.h"
+ #include "chatline.h"
+@@ -316,7 +317,7 @@ QSet<ChatLine *> ChatView::visibleChatLi
+ QList<ChatLine *> ChatView::visibleChatLinesSorted(Qt::ItemSelectionMode mode) const
+ {
+-    QList<ChatLine *> result = visibleChatLines(mode).toList();
++    QList<ChatLine *> result = visibleChatLines(mode).values();
+     qSort(result.begin(), result.end(), chatLinePtrLessThan);
+     return result;
+ }
+--- a/src/qtui/chatviewsearchcontroller.cpp
++++ b/src/qtui/chatviewsearchcontroller.cpp
+@@ -128,7 +128,7 @@ void ChatViewSearchController::updateHig
+             if (line)
+                 chatLines << line;
+         }
+-        foreach(ChatLine *line, QList<ChatLine *>(chatLines.toList())) {
++        foreach (ChatLine* line, chatLines) {
+             updateHighlights(line);
+         }
+     }
+@@ -314,8 +314,7 @@ void ChatViewSearchController::repositio
+         if (line)
+             chatLines << line;
+     }
+-    QList<ChatLine *> chatLineList(chatLines.toList());
+-    foreach(ChatLine *line, chatLineList) {
++    foreach (ChatLine* line, chatLines) {
+         repositionHighlights(line);
+     }
+ }
+--- a/src/qtui/settingspages/chatmonitorsettingspage.cpp
++++ b/src/qtui/settingspages/chatmonitorsettingspage.cpp
+@@ -28,6 +28,7 @@
+ #include "bufferview.h"
+ #include "bufferviewfilter.h"
+ #include "chatviewsettings.h"
++#include "util.h"
+ #include <QVariant>
+@@ -196,7 +197,7 @@ bool ChatMonitorSettingsPage::testHasCha
+     if (_configActive->bufferList().count() != settings["Buffers"].toList().count())
+         return true;
+-    QSet<BufferId> uiBufs = _configActive->bufferList().toSet();
++    QSet<BufferId> uiBufs = toQSet(_configActive->bufferList());
+     QSet<BufferId> settingsBufs;
+     foreach(QVariant v, settings["Buffers"].toList())
+     settingsBufs << v.value<BufferId>();
+--- a/src/uisupport/bufferviewfilter.cpp
++++ b/src/uisupport/bufferviewfilter.cpp
+@@ -32,6 +32,7 @@
+ #include "graphicalui.h"
+ #include "networkmodel.h"
+ #include "uistyle.h"
++#include "util.h"
+ /*****************************************
+@@ -159,7 +160,7 @@ void BufferViewFilter::enableEditMode(bo
+         return;
+     if (enable == false) {
+-        addBuffers(QList<BufferId>::fromSet(_toAdd));
++        addBuffers(_toAdd.values());
+         QSet<BufferId>::const_iterator iter;
+         for (iter = _toTempRemove.constBegin(); iter != _toTempRemove.constEnd(); ++iter) {
+             if (config()->temporarilyRemovedBuffers().contains(*iter))
diff --git a/patches/qt514/0005-qa-Replace-deprecated-QString-sprintf-by-QString-asp.patch b/patches/qt514/0005-qa-Replace-deprecated-QString-sprintf-by-QString-asp.patch
new file mode 100644 (file)
index 0000000..c249361
--- /dev/null
@@ -0,0 +1,25 @@
+From 56491f1d5772764aa82a5bda85c83ab336af4346 Mon Sep 17 00:00:00 2001
+From: Manuel Nickschas <sputnick@quassel-irc.org>
+Date: Tue, 7 Jan 2020 20:39:38 +0100
+Subject: [PATCH 5/6] qa: Replace deprecated QString::sprintf() by
+ QString::asprintf()
+Bug: https://bugs.quassel-irc.org/issues/1544
+Bug-Ubuntu: https://bugs.launchpad.net/quassel/+bug/1885436
+Origin: upstream, https://github.com/quassel/quassel/pull/518
+Origin: upstream, https://github.com/quassel/quassel/commit/56491f1d5772764aa82a5bda85c83ab336af4346
+
+---
+ src/uisupport/actioncollection.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/uisupport/actioncollection.cpp
++++ b/src/uisupport/actioncollection.cpp
+@@ -93,7 +93,7 @@ QAction *ActionCollection::addAction(con
+     else
+         action->setObjectName(indexName);
+     if (indexName.isEmpty())
+-        indexName = indexName.sprintf("unnamed-%p", (void *)action);
++        indexName = indexName.asprintf("unnamed-%p", (void*)action);
+     // do we already have this action?
+     if (_actionByName.value(indexName, 0) == action)
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..55949c2
--- /dev/null
@@ -0,0 +1,7 @@
+01_default_network_channel.patch
+02_script_interpreter_path.patch
+qt514/0001-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch
+qt514/0002-common-Always-let-QVariant-fromValue-deduce-the-type.patch
+qt514/0003-qa-Replace-deprecated-qVariantFromValue-by-QVariant-.patch
+qt514/0004-qa-Avoid-deprecation-warnings-for-QList-QSet-convers.patch
+qt514/0005-qa-Replace-deprecated-QString-sprintf-by-QString-asp.patch
diff --git a/quassel-client.install b/quassel-client.install
new file mode 100644 (file)
index 0000000..2090435
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin/quasselclient
+usr/share/applications/quasselclient.desktop
diff --git a/quassel-client.manpages b/quassel-client.manpages
new file mode 100644 (file)
index 0000000..8d6da06
--- /dev/null
@@ -0,0 +1 @@
+debian/manpages/quasselclient.1
diff --git a/quassel-core.install b/quassel-core.install
new file mode 100644 (file)
index 0000000..18c1f54
--- /dev/null
@@ -0,0 +1,3 @@
+usr/bin/quasselcore
+debian/usr.bin.quasselcore /etc/apparmor.d
+debian/quassel-core.ufw.profile /etc/ufw/applications.d
diff --git a/quassel-core.logrotate b/quassel-core.logrotate
new file mode 100644 (file)
index 0000000..4a05659
--- /dev/null
@@ -0,0 +1,10 @@
+/var/log/quassel/core.log {
+        rotate 4
+        weekly
+        compress
+        delaycompress
+        copytruncate
+        missingok
+        notifempty
+}
+
diff --git a/quassel-core.manpages b/quassel-core.manpages
new file mode 100644 (file)
index 0000000..42b2438
--- /dev/null
@@ -0,0 +1,2 @@
+debian/manpages/quasselcore.1 
+
diff --git a/quassel-core.postinst b/quassel-core.postinst
new file mode 100644 (file)
index 0000000..358b2d8
--- /dev/null
@@ -0,0 +1,45 @@
+#!/bin/sh -e
+# postinst script for quassel-core
+
+set -e
+
+# some variables
+QUASSEL_GROUP=quassel
+QUASSEL_USER=quasselcore
+QUASSEL_HOME=/var/lib/quassel
+QUASSEL_LOG=/var/log/quassel
+QUASSEL_CERT=$QUASSEL_HOME/quasselCert.pem
+
+# create group
+echo "Creating $QUASSEL_GROUP group ..."
+addgroup --quiet --system $QUASSEL_GROUP
+
+# create user
+echo "Creating $QUASSEL_USER user ..."
+adduser --quiet --system --ingroup $QUASSEL_GROUP \
+--home $QUASSEL_HOME --no-create-home $QUASSEL_USER
+
+if [ ! -d $QUASSEL_HOME ] ; then
+  # create $HOME
+  echo "Creating $QUASSEL_HOME directory ..."
+  mkdir -p $QUASSEL_HOME
+  chown $QUASSEL_USER:$QUASSEL_GROUP $QUASSEL_HOME
+fi
+
+if [ ! -d $QUASSEL_LOG ] ; then
+  echo "Creating $QUASSEL_LOG directory ..."
+  mkdir -p $QUASSEL_LOG
+  chown $QUASSEL_USER:$QUASSEL_GROUP $QUASSEL_LOG
+fi
+
+# generate a SSL certificate for 18 months (support time) + 6 months (development time)
+# this covers the worst case scenario of earliest possible install + no whatsoever
+# updates while support time frame. otherwise the key will be regenerated
+# FIXME: Not over-writing existing certs, but need to (someday) replace old certs
+if [ ! -e $QUASSEL_CERT ] ; then
+  echo "Generating SSL certificate as $QUASSEL_CERT ..."
+  ( umask 0027 && runuser -u $QUASSEL_USER -- openssl req -x509 -nodes -batch -days 680 -newkey rsa \
+    -keyout $QUASSEL_CERT -out $QUASSEL_CERT )
+fi
+
+#DEBHELPER#
diff --git a/quassel-core.postrm b/quassel-core.postrm
new file mode 100644 (file)
index 0000000..1e90e86
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+# postrm script for quassel-core
+
+set -e
+
+# configure some variables
+QUASSEL_GROUP=quassel
+QUASSEL_USER=quasselcore
+
+case "$1" in
+       purge)
+               echo "Deleting $QUASSEL_USER user ..."
+               if which deluser > /dev/null; then
+                       deluser --quiet --system $QUASSEL_USER
+               fi
+
+               echo "Deleting $QUASSEL_GROUP group ..."
+               if which delgroup > /dev/null; then
+                       delgroup --quiet --system $QUASSEL_GROUP
+               fi
+
+               echo "Deleting /var/cache/quassel ..."
+               rm -rf /var/lib/quassel
+               echo "Deleting /var/log/quassel ..."
+                rm -rf /var/log/quassel
+               ;;
+       remove)
+               ;;
+       upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+               ;;
+       *)
+               echo "postrm called with unknown argument \`$1'" >&2
+               exit 1
+               ;;
+esac
+
+#DEBHELPER#
diff --git a/quassel-core.quasselcore.default b/quassel-core.quasselcore.default
new file mode 100644 (file)
index 0000000..448472d
--- /dev/null
@@ -0,0 +1,11 @@
+# Defaults for quasselcore initscript
+# sourced by /etc/init.d/quasselcore
+
+# Loglevel Debug|Info|Warning|Error. Default is: Info
+LOGLEVEL="Info"
+
+# The port quasselcore will listen at. Default is: 4242
+PORT="4242"
+
+# Network address to listen on
+LISTEN="::,0.0.0.0"
diff --git a/quassel-core.quasselcore.init b/quassel-core.quasselcore.init
new file mode 100644 (file)
index 0000000..e4b3c74
--- /dev/null
@@ -0,0 +1,142 @@
+#!/bin/sh
+#
+# Copyright (C) 2008 Harald Sitter <apachelogger@ubuntu.com>
+# Copyright (C) 2009 Thomas Mueller <thomas_mueller_ffb@online.de>
+# Copyright (C) 2014 Thomas Mueller <thomas_mueller@tmit.eu>
+#
+# This is free software; you may redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2,
+# or (at your option) any later version.
+#
+# This is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License with
+# the Debian operating system, in /usr/share/common-licenses/GPL;  if
+# not, write to the Free Software Foundation, Inc., 51 Franklin Street,
+# Fifth Floor, Boston, MA  02110-1301, USA
+
+### BEGIN INIT INFO
+# Provides:          quasselcore
+# Required-Start:    $remote_fs
+# Required-Stop:     $remote_fs
+# Should-Start:      postgresql
+# Should-Stop:       postgresql
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: distributed IRC client using a central core component
+# Description:       This is the core component of Quassel. A modern,
+#                    cross-platform, distributed IRC client, meaning that one
+#                    (or multiple) client(s) can attach to and detach from this
+#                    central core. It's much like the popular combination
+#                    of screen and a text-based IRC client such as WeeChat.
+### END INIT INFO
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+DAEMON=/usr/bin/quasselcore
+NAME=quasselcore
+DESC="distributed IRC core"
+LOGDIR=/var/log/quassel
+
+PIDFILE=/var/run/quasselcore.pid 
+
+# Test if binary exisits
+test -x $DAEMON || exit 0
+
+# Define LSB log_* functions.
+. /lib/lsb/init-functions
+
+DAEMON_OPTS=""
+LOGFILE=$LOGDIR/core.log
+DATADIR=/var/lib/quassel
+DAEMONUSER=quasselcore
+
+# defaulting LOGLEVEL and PORT, just in case /etc/default/$name gets deleted
+LOGLEVEL="Info"
+PORT="4242"
+LISTEN="::,0.0.0.0"
+
+# source default
+if [ -f /etc/default/$NAME ] ; then
+    . /etc/default/$NAME
+fi
+
+# test daemon user
+if [ -n "$DAEMONUSER" ] ; then
+    getent passwd | grep -q "^$DAEMONUSER:"
+    if [ $? -ne 0 ]; then
+        log_failure_msg "The user $DAEMONUSER, required to run $NAME does not exist."
+        exit 1
+    fi
+fi
+
+start_server() {
+    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \
+        --background --chuid $DAEMONUSER --exec $DAEMON \
+        -- --logfile=$LOGFILE --loglevel=$LOGLEVEL --configdir=$DATADIR \
+           --port=$PORT --listen=$LISTEN \
+           $DAEMON_OPTS
+}
+
+stop_server() {
+    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --user $DAEMONUSER \
+        --exec $DAEMON
+}
+
+reload_server() {
+    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --user $DAEMONUSER \
+        --exec $DAEMON
+}
+
+case "$1" in
+  start)
+       log_daemon_msg "Starting $DESC" "$NAME"
+       start_server
+       case "$?" in
+               0) log_end_msg 0 ;;
+               1) log_progress_msg "already started"
+                  log_end_msg 0 ;;
+               *) log_end_msg $? ;;
+       esac
+
+       ;;
+  stop)
+       log_daemon_msg "Stopping $DESC" "$NAME"
+       stop_server
+       case "$?" in
+               0) log_end_msg 0 ;;
+               1) log_progress_msg "already stopped"
+                  log_end_msg 0 ;;
+               *) log_end_msg $? ;;
+       esac
+
+       ;;
+  reload)
+       log_daemon_msg "Reloading $DESC" "$NAME"
+       reload_server
+       case "$?" in
+               0) log_end_msg 0 ;;
+               1) log_progress_msg "not running"
+                  log_end_msg 0 ;;
+               *) log_end_msg $? ;;
+       esac
+
+       ;;
+  restart|force-reload)
+       $0 stop
+       $0 start
+       ;;
+  status)
+       status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
+       ;;
+  *)
+       echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload|status}" >&2
+       exit 3
+       ;;
+esac
+
+exit 0
diff --git a/quassel-core.quasselcore.service b/quassel-core.quasselcore.service
new file mode 100644 (file)
index 0000000..6bdb1f5
--- /dev/null
@@ -0,0 +1,18 @@
+[Unit]
+Description=distributed IRC client using a central core component
+Documentation=man:quasselcore(1)
+Wants=network-online.target postgresql.service
+After=network-online.target postgresql.service
+
+[Service]
+User=quasselcore
+Group=quassel
+WorkingDirectory=/var/lib/quassel
+Environment="DATADIR=/var/lib/quassel" "LOGFILE=/var/log/quassel/core.log" "LOGLEVEL=Info" "PORT=4242" "LISTEN=::,0.0.0.0"
+EnvironmentFile=-/etc/default/quasselcore
+ExecStart=/usr/bin/quasselcore --configdir=${DATADIR} --logfile=${LOGFILE} --loglevel=${LOGLEVEL} --port=${PORT} --listen=${LISTEN}
+ExecReload=/bin/kill -HUP $MAINPID
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/quassel-core.ufw.profile b/quassel-core.ufw.profile
new file mode 100644 (file)
index 0000000..42e6cd6
--- /dev/null
@@ -0,0 +1,4 @@
+[Quassel]
+title=Quassel Core
+description=Quassel IRC core/server component
+ports=4242/tcp
diff --git a/quassel-data.install b/quassel-data.install
new file mode 100644 (file)
index 0000000..24c7372
--- /dev/null
@@ -0,0 +1,36 @@
+usr/share/icons/hicolor/
+usr/share/pixmaps/
+usr/share/quassel/icons/breeze*/apps/32/
+usr/share/quassel/icons/breeze*/apps/64/
+usr/share/quassel/icons/breeze*/apps/48/
+usr/share/quassel/icons/breeze*/scalable/apps/
+usr/share/quassel/icons/breeze*/scalable/status/
+usr/share/quassel/icons/breeze*/scalable/actions/
+usr/share/quassel/icons/breeze*/status/24/
+usr/share/quassel/icons/breeze*/status/64/
+usr/share/quassel/icons/breeze*/actions/32/
+usr/share/quassel/icons/breeze*/actions/24/
+usr/share/quassel/icons/oxygen/22x22/apps/
+usr/share/quassel/icons/oxygen/22x22/status/
+usr/share/quassel/icons/oxygen/22x22/actions/
+usr/share/quassel/icons/oxygen/scalable/action/
+usr/share/quassel/icons/oxygen/48x48/apps/
+usr/share/quassel/icons/oxygen/48x48/status/
+usr/share/quassel/icons/oxygen/48x48/actions/
+usr/share/quassel/icons/oxygen/128x128/apps/
+usr/share/quassel/icons/oxygen/128x128/status/
+usr/share/quassel/icons/oxygen/128x128/actions/
+usr/share/quassel/icons/oxygen/64x64/apps/
+usr/share/quassel/icons/oxygen/64x64/status/
+usr/share/quassel/icons/oxygen/64x64/actions/
+usr/share/quassel/icons/oxygen/16x16/apps/
+usr/share/quassel/icons/oxygen/16x16/status/
+usr/share/quassel/icons/oxygen/16x16/actions/
+usr/share/quassel/icons/oxygen/32x32/apps/
+usr/share/quassel/icons/oxygen/32x32/status/
+usr/share/quassel/icons/oxygen/32x32/actions/
+usr/share/quassel/translations/*.qm
+usr/share/quassel/networks.ini
+usr/share/quassel/scripts/
+usr/share/quassel/stylesheets/*.qss
+usr/share/knotifications5/quassel.notifyrc
diff --git a/quassel-data.links b/quassel-data.links
new file mode 100644 (file)
index 0000000..50a719a
--- /dev/null
@@ -0,0 +1,2 @@
+/usr/bin/inxi /usr/share/quassel/scripts/inxi
+/usr/bin/mpris-quassel /usr/share/quassel/scripts/mpris
diff --git a/quassel.NEWS b/quassel.NEWS
new file mode 100644 (file)
index 0000000..18384d6
--- /dev/null
@@ -0,0 +1,22 @@
+quassel (1:0.13.0-1) experimental; urgency=medium
+
+  Upstream recommends making a backup of your quassel database before
+  proceeding with the upgrade to 0.13.0:
+
+  "Before you upgrade, please be aware that both the database schema and the
+   config file formats have been updated since 0.12. Quassel will
+   automatically upgrade both once the new version is started for the first
+   time, however no rollback is possible, so do make a backup before starting
+   the new version! The upgrade may take a long time (up to several hours) if
+   your database is (un)reasonably large, during which the core or mono client
+   cannot be used. The upgrade may also temporarily require up to double the
+   disk space. Do not interrupt the upgrade process, otherwise your database
+   may become corrupted!"
+
+  The package does not restart on upgrade.  The database upgrade will be done
+  after system reboot or manual restart.
+
+  Please make a backup or decide to live dangerously before proceeding.
+
+ -- Scott Kitterman <scott@kitterman.com>  Sun, 02 Dec 2018 17:21:06 -0500
+
diff --git a/quassel.install b/quassel.install
new file mode 100644 (file)
index 0000000..14f2575
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin/quassel
+usr/share/applications/quassel.desktop
diff --git a/quassel.manpages b/quassel.manpages
new file mode 100644 (file)
index 0000000..6294277
--- /dev/null
@@ -0,0 +1 @@
+debian/manpages/quassel.1
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..f83543a
--- /dev/null
+++ b/rules
@@ -0,0 +1,35 @@
+#!/usr/bin/make -f
+
+export DEB_BUILD_MAINT_OPTIONS=hardening=+all
+export DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed
+
+WEBENGINE_INSTALL_STATUS := $(shell dpkg-query -W --showformat='$${Status}\n' qtwebengine5-dev|grep "install ok installed")
+ifeq (install ok installed,$(WEBENGINE_INSTALL_STATUS))
+       WEB_BACKEND = -DWITH_WEBKIT=OFF -DWITH_WEBENGINE=ON
+else
+       WEB_BACKEND = -DWITH_WEBKIT=ON -DWITH_WEBENGINE=OFF
+endif
+
+%:
+       dh $@
+
+override_dh_auto_configure:
+       dh_auto_configure -- -DWITH_OXYGEN_ICONS=ON -DWITH_BUNDLED_ICONS=OFF -DUSE_QT5=ON -DWITH_KDE=ON $(WEB_BACKEND)
+
+override_dh_install:
+       dh_install
+       # replace inxi with a symlink
+ifneq (,$(filter quassel-data, $(shell dh_listpackages)))
+       rm debian/quassel-data/usr/share/quassel/scripts/inxi
+endif
+       dh_missing --fail-missing
+
+override_dh_installinit:
+       dh_apparmor -pquassel-core --profile-name=usr.bin.quasselcore
+       dh_installinit --no-stop-on-upgrade --no-restart-after-upgrade --error-handler=exit --name=quasselcore
+
+override_dh_systemd_enable:
+       dh_systemd_enable --name=quasselcore
+
+override_dh_systemd_start:
+       dh_systemd_start --name=quasselcore
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/usr.bin.quasselcore b/usr.bin.quasselcore
new file mode 100644 (file)
index 0000000..1dd43e8
--- /dev/null
@@ -0,0 +1,34 @@
+# Author: Felix Geyer <debfx@ubuntu.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of version 2 of the GNU General Public
+# License published by the Free Software Foundation.
+
+#include <tunables/global>
+
+/usr/bin/quasselcore {
+  #include <abstractions/base>
+  #include <abstractions/nameservice>
+  #include <abstractions/user-tmp>
+  #include <abstractions/ssl_certs>
+
+  /var/lib/quassel/ rw,
+  /var/lib/quassel/** rwkl,
+
+  /var/log/quassel/* rw,
+
+  /etc/xdg/Trolltech.conf r,
+  deny /etc/xdg/Trolltech.conf k,
+  /etc/ssl/openssl.cnf r,
+  /usr/lib/ssl/openssl.cnf r,
+
+  # QSysInfo::machineUniqueId()
+  /var/lib/dbus/machine-id r,
+  /etc/machine-id r,
+
+  # QSysInfo::bootUniqueId()
+  @{PROC}/sys/kernel/random/boot_id r,
+
+  # Site-specific additions and overrides. See local/README for details.
+  #include <local/usr.bin.quasselcore>
+}
diff --git a/watch b/watch
new file mode 100644 (file)
index 0000000..fadc0cf
--- /dev/null
+++ b/watch
@@ -0,0 +1,4 @@
+version=3
+
+https://quassel-irc.org/downloads \
+  /pub/quassel-(.*)\.tar\.bz2